程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring Boot集成MyBatis訪問數據庫的方法

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

編輯:關於JAVA

Spring Boot集成MyBatis訪問數據庫的方法。本站提示廣大學習愛好者:(Spring Boot集成MyBatis訪問數據庫的方法)文章只能為提供參考,不一定能成為您想要的結果。以下是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,增加軟件依賴
<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的定義,如下

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的使用,可以參考相關的官方文檔。

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.業務層實現

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訪問數據庫的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved