国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Spring Boot集成MyBatis訪問(wèn)數(shù)據(jù)庫(kù)的方法

Spring Boot集成MyBatis訪問(wèn)數(shù)據(jù)庫(kù)的方法

2020-09-12 15:58Java教程網(wǎng) Java教程

這篇文章主要介紹了Spring Boot集成MyBatis訪問(wèn)數(shù)據(jù)庫(kù)的方法,需要的朋友可以參考下

基于spring boot開(kāi)發(fā)的微服務(wù)應(yīng)用,與MyBatis如何集成?

集成方法

可行的方法有:

1.基于XML或者Java Config,構(gòu)建必需的對(duì)象,配置MyBatis。

2.使用MyBatis官方提供的組件,實(shí)現(xiàn)MyBatis的集成。

方法一

建議參考如下文章,完成集成的驗(yàn)證。

MyBatis學(xué)習(xí) 之 一、MyBatis簡(jiǎn)介與配置MyBatis+Spring+MySql

基于Spring + Spring MVC + Mybatis 高性能web構(gòu)建

spring與mybatis三種整合方法

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

由于不是本文的重點(diǎn),因此不附上樣例。

方法二

有如下步驟:

  • 修改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,增加數(shù)據(jù)源的定義

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

日志的配置

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

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

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

其中net.jackieathome.db.mapper下定義了訪問(wèn)數(shù)據(jù)庫(kù)的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

事務(wù)的使用

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

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 {
 // 創(chuàng)建用戶
 void createUser(User user);
 // 查找用戶
 User findUserById(@Param("id") String id);
}

2.數(shù)據(jù)庫(kù)訪問(wèn)的中間層代碼,對(duì)上述mapper進(jìn)行了封裝。

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

?
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;
 /**
 * 重復(fù)插入相同的用戶數(shù)據(jù),確認(rèn)事務(wù)是否生效
 */
 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.業(yè)務(wù)層實(shí)現(xiàn)

?
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();
 }
}

從實(shí)際測(cè)試看,上述事務(wù)的實(shí)現(xiàn)有效,可保證當(dāng)數(shù)據(jù)出現(xiàn)主鍵沖突時(shí),事務(wù)中的插入操作可全部撤銷,不會(huì)出現(xiàn)部分?jǐn)?shù)據(jù)插入成功、部分失敗的現(xiàn)象。

注意事項(xiàng):

由于注解事務(wù)的實(shí)現(xiàn)依賴Spring AOP,因此只有當(dāng)注入行為存在時(shí),注解事務(wù)的控制才會(huì)生效。

1.假如在上述UserController類中定義createBatch方法,并且使用注解@Transactional標(biāo)記,經(jīng)驗(yàn)證可確認(rèn)此時(shí)注解事務(wù)是無(wú)效的。  

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

以上所述是小編給大家介紹的Spring Boot集成MyBatis訪問(wèn)數(shù)據(jù)庫(kù)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产综合视频在线观看 | a一级黄 | 国产成人网 | 少妇看av一二三区 | 久草在线免费资源 | 天天操天天碰 | 日韩a∨精品日韩在线观看 国产高清视频在线观看 | 日韩中文字幕一区二区三区 | 日韩欧美一区二区三区久久婷婷 | 欧美电影一区 | 精品少妇一区二区三区在线播放 | 青青草免费在线视频 | 天天精品视频免费观看 | 蜜桃一二三区 | 在线成人一区 | 日本免费一区二区三区四区 | 国产一区二区在线免费观看 | 在线看av的网址 | www.天天操.com | 亚洲精品视频一区二区三区 | 欧美一区二区三区在线视频观看 | 日韩高清在线观看 | 色.com| 黑人中文字幕一区二区三区 | 国产在线免费 | 狠狠草视频 | 亚洲精品久久久久久久久久久久久 | 欧美日韩久久精品 | 最近2019中文字幕大全视频10 | 成人午夜在线 | 欧美a网 | 亚洲卡一 | 亚洲一区二区在线播放 | 国产欧美日韩二区 | 亚洲国产精品成人 | h视频在线免费观看 | 欧美精品一区二区三区在线 | 午夜天堂 | 免费网站在线观看黄 | 成年人在线看 | av在线免费播放 |