一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring Boot集成MyBatis訪問數據庫的方法

Spring Boot集成MyBatis訪問數據庫的方法

2020-09-12 15:58Java教程網 Java教程

這篇文章主要介紹了Spring Boot集成MyBatis訪問數據庫的方法,需要的朋友可以參考下

基于spring boot開發的微服務應用,與MyBatis如何集成?

集成方法

可行的方法有:

1.基于XML或者Java Config,構建必需的對象,配置MyBatis。

2.使用MyBatis官方提供的組件,實現MyBatis的集成。

方法一

建議參考如下文章,完成集成的驗證。

MyBatis學習 之 一、MyBatis簡介與配置MyBatis+Spring+MySql

基于Spring + Spring MVC + Mybatis 高性能web構建

spring與mybatis三種整合方法

MyBatis學習總結(八)——Mybatis3.x與Spring4.x整合

由于不是本文的重點,因此不附上樣例。

方法二

有如下步驟:

  • 修改pom.xml,增加軟件依賴
?
1
2
3
4
5
6
7
8
9
10
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>1.2.0</version>
</dependency>
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.21</version>
</dependency>
  • 修改application.yml,增加數據源的定義

spring:

    datasource:
        url: jdbc:mysql://localhost:3306/test
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver

  • 修改application.yml,增加MyBatis的配置

mybatis:

    type-aliases-package: com.example.domain.model
    type-handlers-package: com.example.typehandler
    configuration:
        map-underscore-to-camel-case: true
        default-fetch-size: 100
        default-statement-timeout: 30

日志的配置

通過觀察日志,可有效的分析MyBatis生成的SQL,檢查SQL配置的正確性。

修改application.yml,增加如下配置

logging:
    level:
        net:
            jackieathome:
                db:
                    mapper: DEBUG

其中net.jackieathome.db.mapper下定義了訪問數據庫的mapper接口。

輸出的日志樣例如下

2017-04-16 11:32:23.266 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser      : ==>  Preparing: insert into `user`(id, name, password) values(?, ?, ?)
2017-04-16 11:32:23.293 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser      : ==> Parameters: id1492313542(String), null, null
2017-04-16 11:32:23.366 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.createUser      : <==    Updates: 1
2017-04-16 11:32:23.372 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById    : ==>  Preparing: select * from `user` where id = ?
2017-04-16 11:32:23.373 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById    : ==> Parameters: id1492313542(String)
2017-04-16 11:32:23.417 DEBUG 27801 --- [io-11002-exec-1] n.j.db.mapper.UserMapper.findUserById    : <==      Total: 1

事務的使用

依據MyBatis的官方文檔,允許用戶將事務交給Spring來管理,使用編程和注解來控制事務。這里以注解方式來舉例說明使用方法,樣例代碼如下:

1.mapper的定義,如下

?
1
2
3
4
5
6
7
8
9
10
11
12
package net.jackieathome.db.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import net.jackieathome.bean.User;
@Mapper
public interface UserMapper {
 // 創建用戶
 void createUser(User user);
 // 查找用戶
 User findUserById(@Param("id") String id);
}

2.數據庫訪問的中間層代碼,對上述mapper進行了封裝。

使用@Transactional標記該類,表明該類的公有方法全部都啟用了事務的支持。關于@Transactional的使用,可以參考相關的官方文檔。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package net.jackieathome.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import net.jackieathome.bean.User;
import net.jackieathome.db.mapper.UserMapper;
@Component
@Transactional
public class UserDao {
 @Autowired
 private UserMapper userMapper;
 /**
 * 重復插入相同的用戶數據,確認事務是否生效
 */
 public List<String> createBatch() {
 long time = System.currentTimeMillis() / 1000;
 User user = null;
 List<String> ids = new ArrayList<>();
 String id = "id" + time;
 String name = "name" + time;
 String password = "password" + time;
 user = new User();
 user.setId(id);
 user.setName(name);
 user.setPassword(password);
 userMapper.createUser(user);
 ids.add(id);
 user = new User();
 user.setId(id);
 user.setName(name);
 user.setPassword(password);
 userMapper.createUser(user);
 ids.add(id);
 return ids;
 }
}

3.業務層實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package net.jackieathome.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import net.jackieathome.bean.User;
import net.jackieathome.dao.UserDao;
import net.jackieathome.db.mapper.UserMapper;
@RestController
public class UserController {
 @Autowired
 private UserMapper userMapper;
 @Autowired
 private UserDao userDao;
 @RequestMapping(method = RequestMethod.GET, value = "/user/create/batch")
 public List<User> createBatch() {
 try
 {
 userDao.createBatch();
 }
 catch (Exception e)
 {
 }
 return userMapper.loadAllUsers();
 }
}

從實際測試看,上述事務的實現有效,可保證當數據出現主鍵沖突時,事務中的插入操作可全部撤銷,不會出現部分數據插入成功、部分失敗的現象。

注意事項:

由于注解事務的實現依賴Spring AOP,因此只有當注入行為存在時,注解事務的控制才會生效。

1.假如在上述UserController類中定義createBatch方法,并且使用注解@Transactional標記,經驗證可確認此時注解事務是無效的。  

2.假如在上述UserDao中定義了多個公有方法,存在相互調用的行為,基于相同的原因,這些方法相互調用時注解事務并不會生效。如果確實需要保證事務可用,可以考慮調整類的設計或者使用編程的方式來控制事務。

以上所述是小編給大家介紹的Spring Boot集成MyBatis訪問數據庫的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲精选在线观看 | 日韩免费观看成第15集 | 2021国产精品露脸在线 | 高清在线观看免费入口 | 久久99精国产一区二区三区四区 | 无码精品一区二区三区免费视频 | 羞羞视频动漫 | 亚洲精品老司机福利在线播放 | x8x8国产在线观看2021 | 美女毛片在线 | chinese踩踏调教vk | 日韩一级片在线观看 | 国产精品www夜色影视 | 姐姐不~不可以动漫在线观看 | 亚洲第一人黄所 | 成人亚洲欧美综合 | 成版人快猫永久破解版 | 国产特级 | 国产精品高清在线 | 亚洲国产精品一区二区首页 | 免费观看视频高清在线 | 亚洲欧洲淘宝天堂日本 | 隔壁老王国产精品福利 | 青青在线视频免费 | 人人揉人人爽五月天视频 | 亚洲国产区男人本色在线观看欧美 | 久久青青草原 | 情人我吃糖果小说 | 91制片厂(果冻传媒)原档破解 | 火影小南被爆羞羞网站进入 | 男人日女人p| 日本精品中文字幕在线播放 | 波多洁野衣一二区三区 | 高清一级做a爱免费视 | 乖女的嫩奶水h文孕妇 | 国产亚洲欧美成人久久片 | 厨房play黄瓜进去小说h | 日本午夜vr影院新入口 | 9总探花新品牛仔背带裤 | 亚州人成网在线播放 | 国产九九视频在线观看 |