亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解spring boot mybatis全注解化

 更新時(shí)間:2017年09月25日 11:15:06   作者:給人生一個(gè)夢(mèng)  
這篇文章主要介紹了spring boot mybatis全注解化的相關(guān)資料,需要的朋友可以參考下

本文重點(diǎn)給大家介紹spring boot mybatis 注解化的實(shí)例代碼,具體內(nèi)容大家參考下本文:

pom.xml

<!-- 引入mybatis --> 
<dependency> 
  <groupId>org.mybatis.spring.boot</groupId> 
  <artifactId>mybatis-spring-boot-starter</artifactId> 
  <version>1.3.0</version> 
</dependency> 
<!-- mybatis分頁(yè)插件 --> 
<dependency> 
  <groupId>com.github.pagehelper</groupId> 
  <artifactId>pagehelper-spring-boot-starter</artifactId> 
  <version>1.1.1</version> 
</dependency> 

基本SQL操作

spring boot已經(jīng)自動(dòng)實(shí)現(xiàn)了mybatis所有配置,直接寫dao接口即可

@Mapper 
public interface MybatisDao { 
  @Select("select * from user where id = #{id}") 
  public List<User> findById(User param); 

@Mapper:聲明一個(gè)mybatis的dao接口,會(huì)被spring boot掃描到

@Select:聲明一個(gè)查詢方法,相應(yīng)的增刪改使用@Insert @Delete@Update

List<User>:返回集合。如果只返回一個(gè)結(jié)果,返回值是User。如果是增刪改方法返回值是int

User param:傳參,#{id}就是param對(duì)象的id值

掃描Mapper

@MapperScan("hello.dao")

在配置類上添加以上注解,可以掃描dao包中的所有接口,替代在每個(gè)dao中寫@Mapper注解,不過這樣會(huì)提高耦合度。而@Mapper可以與dao自成一體,與@Controller、@Service遙相呼應(yīng),整體結(jié)構(gòu)更優(yōu)雅

駝峰命名

在properties中添加以下配置,在執(zhí)行查詢后,可以將數(shù)據(jù)庫(kù)的NN_NN格式字段,在java結(jié)果集對(duì)象中自動(dòng)轉(zhuǎn)換成駝峰命名參數(shù)

mybatis.configuration.mapUnderscoreToCamelCase=true 

結(jié)果映射@Results

如果結(jié)果集不是JAVA對(duì)象而是Map,map中的列名會(huì)和數(shù)據(jù)庫(kù)中的NN_NN一樣,是不會(huì)自動(dòng)駝峰轉(zhuǎn)換的。可以使用@Result來(lái)指明結(jié)果映射,同樣也適用JAVA對(duì)象

@Results({ 
  @Result(property="nnNn",column="NN_NN")   
}) 
@Select("select * from user")   
public List<Map> findAll();  

使用List<Map>不用去維護(hù)pojo,適于用數(shù)據(jù)庫(kù)字段不確定或經(jīng)常變化的場(chǎng)景。但是程序的可讀性、可維護(hù)性不如List<User>

可復(fù)用的@Results

聲明時(shí)給id賦值為user

@Results(id="user",value={ 
  @Result(property="nnNn",column="NN_NN") 
}) 

在其他 方法中,重復(fù)使用id為user的結(jié)果映射

@ResultMap("user")

打印SQL日志到控制臺(tái)

在application.properties中添加以下配置

logging.level.你的包名.mybatis接口包=debug 

執(zhí)行SQL時(shí),會(huì)在控制臺(tái)打印SQL日志

第一行:==>左邊是執(zhí)行SQL的接口及其方法,右邊是執(zhí)行語(yǔ)句

第二行:傳參數(shù)1,String類型

第三行:查到一行數(shù)據(jù)

分頁(yè)

首先要在pom.xml中引入文章開頭的分頁(yè)插件,分頁(yè)邏輯寫在service層。

@Service 
@Transactional 
public class HelloServiceImpl { 
  @Autowired 
  MybatisDao mybatisDao; 
  public void find(){  
    //分頁(yè)插件: 查詢第1頁(yè),每頁(yè)10行 
    Page<User> page =PageHelper.startPage(1, 10);  
    mybatisDao.findAll();  
    //數(shù)據(jù)表的總行數(shù) 
    page.getTotal(); 
    //分頁(yè)查詢結(jié)果的總行數(shù) 
    page.size(); 
    //第一個(gè)User對(duì)象,參考list,序號(hào)0是第一個(gè)元素,依此類推 
    page.get(0); 
  } 

執(zhí)行原理:PageHelper.startPage會(huì)攔截下一個(gè)sql,也就是mybatisDao.findAll()的SQL。并且根據(jù)當(dāng)前數(shù)據(jù)庫(kù)的語(yǔ)法,把這個(gè)SQL改造成一個(gè)高性能的分頁(yè)SQL,同時(shí)還會(huì)查詢?cè)摫淼目傂袛?shù),具體可以看SQL日志。

PageHelper.startPage和mybatisDao.findAll()最好緊跟在一起,中間不要有別的邏輯,否則可能出BUG。

Page<User> page:相當(dāng)于一個(gè)list集合,findAll()方法查詢完成后,會(huì)給page對(duì)象的相關(guān)參數(shù)賦值

回傳ID

假設(shè)數(shù)據(jù)庫(kù)表的ID主鍵是自動(dòng)增長(zhǎng)的,現(xiàn)在添加一條數(shù)據(jù),想要得到這條數(shù)據(jù)自動(dòng)增長(zhǎng)的ID,方法如下

dao層

useGeneratedKeys=true:獲取數(shù)據(jù)庫(kù)生成的主鍵

keyProperty="id":把主鍵值存入U(xiǎn)ser param對(duì)象的id屬性

@Insert("insert into user(name) values(#{name})") 
@Options(useGeneratedKeys=true,keyProperty="id")  
public int add(User param); 

service層

User user = new User(); 
user.setName("tom"); 
mybatisDao.add(user); 
System.out.println("回傳ID值:"+user.getId()); 

控制臺(tái)

存儲(chǔ)過程

這是一個(gè)mysql存儲(chǔ)過程,傳入一個(gè)id值,根據(jù)這個(gè)id查詢出name值并且做為傳出參數(shù)

DELIMITER $$ 
CREATE PROCEDURE `hello`(IN id_in VARCHAR(10),OUT name_out VARCHAR(10)) 
BEGIN 
     SELECT NAME INTO name_out FROM USER WHERE id=id_in; 
  END$$ 
DELIMITER ; 

dao層

mode=IN:傳入?yún)?shù),就是user.id

mode=OUT:傳出參數(shù),就是user.name

StatementType.CALLABLE:說明這是一個(gè)存儲(chǔ)過程

@Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})") 
@Options(statementType= StatementType.CALLABLE ) 
public void call(User user); 

service層

public void call(){ 
  User user = new User(); 
  user.setId("14"); 
  mybatisDao.call(user); 
  System.out.println(user.getName()); 

執(zhí)行結(jié)果

總結(jié)

以上所述是小編給大家介紹的spring boot mybatis全注解化,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在SpringBoot中實(shí)現(xiàn)一個(gè)訂單號(hào)生成系統(tǒng)的示例代碼

    在Spring Boot中設(shè)計(jì)一個(gè)訂單號(hào)生成系統(tǒng),主要考慮到生成的訂單號(hào)需要滿足的幾個(gè)要求:唯一性、可擴(kuò)展性、以及可能的業(yè)務(wù)相關(guān)性,本文給大家介紹了幾種常見的解決方案及相應(yīng)的示例代碼,需要的朋友可以參考下
    2024-02-02
  • HttpServletRequest對(duì)象簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HttpServletRequest對(duì)象簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了HttpServletRequest對(duì)象簡(jiǎn)介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java中clone方法使用筆記

    Java中clone方法使用筆記

    clone顧名思義是復(fù)制,在Java語(yǔ)言中,clone方法被對(duì)象調(diào)用,所以會(huì)復(fù)制對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Java中clone方法使用的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • SpringAOP中的通知Advice解析

    SpringAOP中的通知Advice解析

    這篇文章主要介紹了SpringAOP中的通知Advice解析,AOP 中的通知是基于連接點(diǎn)業(yè)務(wù)邏輯的一種增強(qiáng),Spring AOP 可以基于 XML 方式和基于注解方式定義,只是寫法不同,這里只使用注解的方式來(lái)講解通知的詳細(xì)用法,需要的朋友可以參考下
    2023-09-09
  • Spring Security6 最新版配置及實(shí)現(xiàn)動(dòng)態(tài)權(quán)限管理

    Spring Security6 最新版配置及實(shí)現(xiàn)動(dòng)態(tài)權(quán)限管理

    Spring Security 在最近幾個(gè)版本中配置的寫法都有一些變化,很多常見的方法都廢棄了,并且將在未來(lái)的 Spring Security7 中移除,因此又補(bǔ)充了一些新的內(nèi)容,重新發(fā)一下,供各位使用 Spring Security 的小伙伴們參考,需要的朋友可以參考下
    2024-03-03
  • Java仿Windows記事本源代碼分享

    Java仿Windows記事本源代碼分享

    這篇文章主要為大家詳細(xì)介紹了Java仿Windows記事本源代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • java 通過發(fā)送json,post請(qǐng)求,返回json數(shù)據(jù)的方法

    java 通過發(fā)送json,post請(qǐng)求,返回json數(shù)據(jù)的方法

    下面小編就為大家分享一篇java 通過發(fā)送json,post請(qǐng)求,返回json數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2018-03-03
  • springboot訪問404問題的解決辦法

    springboot訪問404問題的解決辦法

    工作中遇到url404問題,解決問題的進(jìn)程比較崎嶇,寫篇文章記錄,下面這篇文章主要給大家介紹了關(guān)于springboot訪問404問題的解決辦法,文中通過圖文介紹的非常詳細(xì),要的朋友可以參考下
    2023-03-03
  • springboot整合mybatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更新批處理方式

    springboot整合mybatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更新批處理方式

    這篇文章主要介紹了springboot整合mybatis實(shí)現(xiàn)數(shù)據(jù)庫(kù)的更新批處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring?Boot實(shí)現(xiàn)分布式系統(tǒng)中的服務(wù)發(fā)現(xiàn)和注冊(cè)(最新推薦)

    Spring?Boot實(shí)現(xiàn)分布式系統(tǒng)中的服務(wù)發(fā)現(xiàn)和注冊(cè)(最新推薦)

    在本文中,我們深入探討了Spring?Boot如何實(shí)現(xiàn)分布式系統(tǒng)中的服務(wù)發(fā)現(xiàn)和注冊(cè),我們使用Eureka作為服務(wù)注冊(cè)中心,Ribbon作為負(fù)載均衡器,Hystrix作為熔斷器,成功地實(shí)現(xiàn)了服務(wù)發(fā)現(xiàn)、服務(wù)注冊(cè)、負(fù)載均衡和服務(wù)熔斷等功能,需要的朋友參考下吧
    2023-06-06

最新評(píng)論