SpringBoot無廢話入門04:MyBatis整合

1.Parent引入及pom配置

? ? ? ??首先晴玖,如果要支持mybatis呕屎,那么我們就應(yīng)該引入mybatis的starter秀睛。同時莲祸,由于連接本身還需要用jdbc的connetor和連接池,所以一并需要引入這些依賴畜号。如下是一個完整的的最簡pom允瞧,

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

? <modelVersion>4.0.0</modelVersion>

? <packaging>war</packaging>

? <parent>

? ? <groupId>org.springframework.boot</groupId>

? ? <artifactId>spring-boot-starter-parent</artifactId>

? ? <version>2.1.3.RELEASE</version>

? </parent>

? <name>testboot01</name>

? <groupId>com.zuikc</groupId>

? <artifactId>testboot01</artifactId>

? <version>1.0-SNAPSHOT</version>

? <dependencies>

? ? ? <!--jsp支持, servlet 依賴. -->

? ? ? <dependency>

? ? ? ? ? <groupId>javax.servlet</groupId>

? ? ? ? ? <artifactId>javax.servlet-api</artifactId>

? ? ? ? ? <scope>provided</scope>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>javax.servlet</groupId>

? ? ? ? ? <artifactId>jstl</artifactId>

? ? ? </dependency>

? ? ? <!-- tomcat 的支持.-->

? ? ? <dependency>

? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? <artifactId>spring-boot-starter-tomcat</artifactId>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>org.apache.tomcat.embed</groupId>

? ? ? ? ? <artifactId>tomcat-embed-jasper</artifactId>

? ? ? ? ? <scope>provided</scope>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>mysql</groupId>

? ? ? ? ? <artifactId>mysql-connector-java</artifactId>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>org.apache.tomcat</groupId>

? ? ? ? ? <artifactId>tomcat-dbcp</artifactId>

? ? ? ? ? <version>7.0.47</version>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>org.apache.tomcat</groupId>

? ? ? ? ? <artifactId>tomcat-dbcp</artifactId>

? ? ? ? ? <version>7.0.47</version>

? ? ? </dependency>

? ? ? <dependency>

? ? ? ? ? <groupId>org.mybatis.spring.boot</groupId>

? ? ? ? ? <artifactId>mybatis-spring-boot-starter</artifactId>

? ? ? ? ? <version>1.3.2</version>

? ? ? </dependency>

? ? <dependency>

? ? ? <groupId>org.springframework.boot</groupId>

? ? ? <artifactId>spring-boot-starter-web</artifactId>

? ? </dependency>

? </dependencies>

? <build>

? ? <plugins>

? ? ? <plugin>

? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? <artifactId>spring-boot-maven-plugin</artifactId>

? ? ? </plugin>

? ? </plugins>

? </build>

</project>

2.配置初始化

? ? ? ??首先我們需要將數(shù)據(jù)庫連接配置到文件中,比如prop.properties畦韭,

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf8

jdbc.username=root

jdbc.password=root

jdbc.maxActive=2335

jdbc.maxIdel=120

jdbc.maxWait=100

? ? ? ??然后,用java配置的方式將其引入到代碼中据过,創(chuàng)建DataSourceConfiguration绳锅,

package com.zuikc.config;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.PropertySource;

@Configuration

//這個注解導(dǎo)入剛才增加的jdbc配置文件

@PropertySource("classpath:prop.properties")

public class DataSourceConfiguration {

? ? @Value("${jdbc.driver}")

? ? private String driver;

? ? @Value("${jdbc.url}")

? ? private String url;

? ? @Value("${jdbc.username}")

? ? private String username;

? ? @Value("${jdbc.password}")

? ? private String password;

? ? @Value("${jdbc.maxActive}")

? ? private int maxActive;

? ? @Value("${jdbc.maxIdel}")

? ? private int maxIdel;

? ? @Value("${jdbc.maxWait}")

? ? private long maxWait;

? ? @Bean

? ? public BasicDataSource dataSource(){

? ? ? ? BasicDataSource dataSource = new BasicDataSource();

? ? ? ? dataSource.setDriverClassName(driver);

? ? ? ? dataSource.setUrl(url);

? ? ? ? dataSource.setUsername(username);

? ? ? ? dataSource.setPassword(password);

? ? ? ? dataSource.setMaxActive(maxActive);

? ? ? ? dataSource.setMaxIdle(maxIdel);

? ? ? ? dataSource.setMaxWait(maxWait);

? ? ? ? dataSource.setValidationQuery("SELECT 1");

? ? ? ? dataSource.setTestOnBorrow(true);

? ? ? ? return dataSource;

? ? }

}

? ? ? ??接著鳞芙,增加mybatis配置原朝,

package com.zuikc.config;

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.SqlSessionTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.annotation.EnableTransactionManagement;

import org.springframework.transaction.annotation.TransactionManagementConfigurer;

@Configuration

//加上這個注解喳坠,使得支持事務(wù)

@EnableTransactionManagement

public class MyBatisConfig implements TransactionManagementConfigurer {

? ? @Autowired

? ? private DataSource dataSource;

? ? @Override

? ? public PlatformTransactionManager annotationDrivenTransactionManager() {

? ? ? ? return new DataSourceTransactionManager(dataSource);

? ? }

? ? @Bean(name = "sqlSessionFactory")

? ? public SqlSessionFactory sqlSessionFactoryBean() {

? ? ? ? SqlSessionFactoryBean bean = new SqlSessionFactoryBean();

? ? ? ? bean.setDataSource(dataSource);

? ? ? ? try {

? ? ? ? ? ? return bean.getObject();

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? e.printStackTrace();

? ? ? ? ? ? throw new RuntimeException(e);

? ? ? ? }

? ? }

? ? @Bean

? ? public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {

? ? ? ? return new SqlSessionTemplate(sqlSessionFactory);

? ? }

}

? ? ? ??注意上面的sqlSessionFactory這個bean壕鹉。

? ? ? ??然后需要配置MyBatis配置文件的路徑聋涨,這個配置需要與上面的配置分開來寫,因為它們有著一個先后順序脊凰,

package com.zuikc.config;

import org.mybatis.spring.mapper.MapperScannerConfigurer;

import org.springframework.boot.autoconfigure.AutoConfigureAfter;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

// 因為這個對象的掃描茂腥,需要在MyBatisConfig的后面注入切省,所以加上下面的注解

@AutoConfigureAfter(MyBatisConfig.class)

public class MyBatisMapperScannerConfig {

? ? @Bean

? ? public MapperScannerConfigurer mapperScannerConfigurer() {

? ? ? ? MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();

? ? ? ? //獲取之前注入的beanName為sqlSessionFactory的對象

? ? ? ? mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");

? ? ? ? //指定xml配置文件的路徑

? ? ? ? mapperScannerConfigurer.setBasePackage("com.zuikc.dao");

? ? ? ? return mapperScannerConfigurer;

? ? }

}

3.三層架構(gòu)

? ? ? ??先創(chuàng)建最底層的dao接口数尿,如下:

package com.zuikc.dao;

import java.util.List;

import java.util.Map;

import org.apache.ibatis.annotations.Mapper;

import org.apache.ibatis.annotations.Select;

@Mapper

public interface TestDao {

? ? @Select("SELECT * FROM tbl_user;")

? ? public List<Map<String,Object>> find();

}

? ? ? ??接著創(chuàng)建service,

package com.zuikc.service;

import com.zuikc.dao.TestDao;

import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import java.util.List;

import java.util.Map;

@Service

public class TestService {

? ? @Resource

? ? TestDao dao;

? ? public List<Map<String,Object>> find(){

? ? ? ? List<Map<String,Object>> users = dao.find();

? ? ? ? return users;

? ? }

}

? ? ? ??然后是controller诊杆,

package com.zuikc.controller;

import com.zuikc.dao.TestDao;

import com.zuikc.service.TestService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.List;

import java.util.Map;

@Controller

public class StudentController {

? ? @Autowired

? ? TestService service;

? ? @RequestMapping(value = {"test01"})

? ? public String view(Map<String, Object> map) {

? ? ? ? List<Map<String,Object>> users = service.find();

? ? ? ? for (Map<String, Object> user : users) {

? ? ? ? ? ? for (Map.Entry<String, Object> entry : user.entrySet()) {

? ? ? ? ? ? ? ? System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? System.out.println(users.size());

? ? ? ? map.put("name", "zuikc.com");

? ? ? ? map.put("date", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

? ? ? ? return "views/test01";

? ? }

}

? ? ? ??經(jīng)過上面的創(chuàng)建之后豹储,我們的代碼結(jié)構(gòu)是這樣的剥扣,

? ? ? ??執(zhí)行之铝穷,

? ? ? ??注意了曙聂,如果你已經(jīng)忘記了如何啟動MySQL,那么断国,下面就是命令哦:

? ? ? ??sudo bin/mysqld_safe --user=mysql &

4.事務(wù)支持

? ? ? ??第一步稳衬,導(dǎo)入JDBC依賴薄疚,

? ? ? <dependency>

? ? ? ? ? <groupId>org.springframework.boot</groupId>

? ? ? ? ? <artifactId>spring-boot-starter-jdbc</artifactId>

? ? ? </dependency>

? ? ? ??注意输涕,有了這個依賴慨畸,SpringBoot會自動注入DataSourceTransactionManager。

? ? ? ??接著檐什,直接在Service中添加@Transactional注解就能支持事務(wù)啦。本文不再贅述乃正,大家自己嘗試一下吧。

? ? ? ??感謝關(guān)注“碼農(nóng)星球”荧飞。本文版權(quán)屬于“碼農(nóng)星球”名党。我們提供咨詢和培訓(xùn)服務(wù)叹阔,關(guān)于本文有任何困惑耳幢,請關(guān)注并聯(lián)系我們欧啤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邢隧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子吱窝,更是在濱河造成了極大的恐慌迫靖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件照激,死亡現(xiàn)場離奇詭異盹牧,居然都是意外死亡,警方通過查閱死者的電腦和手機口柳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門跃闹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人苛秕,你說我怎么就攤上這事找默〕图ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵浅缸,是天一觀的道長魄咕。 經(jīng)常有香客問我哮兰,道長苟弛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任右遭,我火速辦了婚禮窘哈,結(jié)果婚禮上亭敢,老公的妹妹穿的比我還像新娘。我一直安慰自己让腹,他們只是感情好,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布骇窍。 她就那樣靜靜地躺著腹纳,像睡著了一般志群。 火紅的嫁衣襯著肌膚如雪蛔钙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天桑涎,我揣著相機與錄音攻冷,去河邊找鬼遍希。 笑死,一個胖子當著我的面吹牛禁谦,可吹牛的內(nèi)容都是我干的州泊。 我是一名探鬼主播漂洋,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼刽漂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仇祭?” 一聲冷哼從身側(cè)響起颈畸,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤眯娱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后试伙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡潘靖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年卦溢,在試婚紗的時候發(fā)現(xiàn)自己被綠了秀又。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡宣决,死狀恐怖昏苏,靈堂內(nèi)的尸體忽然破棺而出捷雕,到底是詐尸還是另有隱情,我是刑警寧澤句柠,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站精盅,受9級特大地震影響谜酒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜粘驰,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蝌数、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顶伞,春花似錦唆貌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至齐婴,卻和暖如春稠茂,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睬关。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔫仙,地道東北人丐箩。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓屎勘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親概漱。 傳聞我的和親對象是個殘疾皇子丑慎,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容