springboot獲取ApplicationContext及整合mybatis框架

1哲戚、Springboot應用獲取ApplicationContext

在部分Springboot應用中,經常需要定時任務中執(zhí)行Spring容器中的Bean厌丑。由于定時任務啟動不是SpringMVC Controler層觸發(fā)兰迫,因此不能采用@Autoward自動注入容器中的Bean淀零。這時漾唉,我們可用編寫一個BeanUtils類荧库,可以在任意環(huán)境獲取Spring容器中的Bean。

1.1赵刑、定義Springboot應用啟動后執(zhí)行類

package com.example.demo.common.config;

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;

@Component //添加注解分衫,以便Spring啟動時掃描本類,并且需要實現(xiàn)ApplicationContextInitializer接口
public class CustomApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    private static ConfigurableApplicationContext context = null;//定義靜態(tài)類型變量
    /**
     * spring啟動后執(zhí)行本函數(shù)般此,獲取context并給static類型變量賦值
      */
    @Override 
    public void initialize(ConfigurableApplicationContext applicationContext) {
        context = applicationContext;
    }
    
    /**
     * 根據(jù)class獲取是容器中的實現(xiàn)類丐箩,class參數(shù)可以時接口的class
     * @param <T>
     * @param clzz
     * @return 容器中的實現(xiàn)類實例
     */
    public static <T> T getBean(Class<T> clzz) {
        return context.getBean(clzz);
    }
}

1.2、修改Springboot啟動類

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import com.example.demo.common.config.CustomApplicationContextInitializer;

@SpringBootApplication
public class DemoApplication {
    public static void main(String[] args) {
        //SpringApplication.run(DemoApplication.class, args);
        SpringApplication application = new SpringApplication(DemoApplication.class);
        application.addInitializers(new CustomApplicationContextInitializer()); //添加容器啟動初始化類
        application.run(args);
    }
}

即可在任意類中即可通過CustomApplicationContextInitializer.getBean(IHelloService.class)方法獲取容器中的IHelloService接口的實現(xiàn)類實例恤煞。還可以添加根據(jù)id獲取容器中的實現(xiàn)類的方法。

2施籍、Springboot整合mybatis

2.1居扒、添加durid及mybatis依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.11</version>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.29</version>
</dependency>

2.2、配置數(shù)據(jù)源及mybatis mapper等相關信息

spring:
  datasource:
    druid:
      url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull
      #url: jdbc:mysql://localhost:3306/testdb?serverTimezone=Asia/Shanghai
      username: testuser
      password: password
      driver-class-name: com.mysql.cj.jdbc.Driver

mybatis:
  mapper-locations:
  - classpath:mappers/**/*.xml #mapper文件存儲目錄丑慎,**表示任意多級目錄

2.3喜喂、編寫數(shù)據(jù)庫訪問層接口及mapper文件

package com.example.demo.hello.dao;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import com.example.demo.hello.vos.FirstTable;

@Mapper //自動在Spring容器中生成本接口實現(xiàn)類,并可以通過@Autoward注入到Service層代碼中
@Repository
public interface IHelloDao {
    public List<FirstTable> queryData();
    public int insertData();
}

mapper文件竿裂,注意namespace的值和接口類全限定名一致

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.hello.dao.IHelloDao">
    <resultMap id="queryMap" type="com.example.demo.hello.vos.FirstTable">
        <id column="id_col" jdbcType="VARCHAR" property="idCol"/>
        <result column="name_col" jdbcType="VARCHAR" property="nameCol"/>
        <result column="age_col" jdbcType="INTEGER" property="ageCol"/>
    </resultMap>
    
    <select id="queryData" resultMap="queryMap">
        SELECT id_col, name_col, age_col
        FROM first_table
    </select>
    <insert id="insertData">
        INSERT INTO first_table (id_col, name_col, age_col)
        VALUES('0000000000000002', '新增數(shù)據(jù)', 20);
    </insert>
</mapper>

之后即可在Service實現(xiàn)類中注入接口(不必編寫IHelloDao的接口實現(xiàn)類)玉吁,調用相關方法完成數(shù)據(jù)庫訪問操作。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末腻异,一起剝皮案震驚了整個濱河市进副,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悔常,老刑警劉巖影斑,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異机打,居然都是意外死亡矫户,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進店門残邀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來皆辽,“玉大人柑蛇,你說我怎么就攤上這事∏疲” “怎么了耻台?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長遗嗽。 經常有香客問我粘我,道長,這世上最難降的妖魔是什么痹换? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任征字,我火速辦了婚禮,結果婚禮上娇豫,老公的妹妹穿的比我還像新娘匙姜。我一直安慰自己,他們只是感情好冯痢,可當我...
    茶點故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布氮昧。 她就那樣靜靜地躺著,像睡著了一般浦楣。 火紅的嫁衣襯著肌膚如雪袖肥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天振劳,我揣著相機與錄音椎组,去河邊找鬼。 笑死历恐,一個胖子當著我的面吹牛寸癌,可吹牛的內容都是我干的。 我是一名探鬼主播弱贼,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼蒸苇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了吮旅?” 一聲冷哼從身側響起溪烤,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸟辅,沒想到半個月后氛什,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡匪凉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年枪眉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片再层。...
    茶點故事閱讀 40,680評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡贸铜,死狀恐怖堡纬,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情蒿秦,我是刑警寧澤烤镐,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站棍鳖,受9級特大地震影響炮叶,放射性物質發(fā)生泄漏。R本人自食惡果不足惜渡处,卻給世界環(huán)境...
    茶點故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一镜悉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧医瘫,春花似錦侣肄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至僚纷,卻和暖如春矩距,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怖竭。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工剩晴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人侵状。 一個月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像毅整,于是被迫代替她去往敵國和親趣兄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內容