詳解spring boot mybatis全注解化
本文重點(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分頁插件 --> <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ù)庫的NN_NN格式字段,在java結(jié)果集對(duì)象中自動(dòng)轉(zhuǎn)換成駝峰命名參數(shù)
mybatis.configuration.mapUnderscoreToCamelCase=true
結(jié)果映射@Results
如果結(jié)果集不是JAVA對(duì)象而是Map,map中的列名會(huì)和數(shù)據(jù)庫中的NN_NN一樣,是不會(huì)自動(dòng)駝峰轉(zhuǎn)換的??梢允褂聾Result來指明結(jié)果映射,同樣也適用JAVA對(duì)象
@Results({
@Result(property="nnNn",column="NN_NN")
})
@Select("select * from user")
public List<Map> findAll();
使用List<Map>不用去維護(hù)pojo,適于用數(shù)據(jù)庫字段不確定或經(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í)行語句
第二行:傳參數(shù)1,String類型
第三行:查到一行數(shù)據(jù)
分頁
首先要在pom.xml中引入文章開頭的分頁插件,分頁邏輯寫在service層。
@Service
@Transactional
public class HelloServiceImpl {
@Autowired
MybatisDao mybatisDao;
public void find(){
//分頁插件: 查詢第1頁,每頁10行
Page<User> page =PageHelper.startPage(1, 10);
mybatisDao.findAll();
//數(shù)據(jù)表的總行數(shù)
page.getTotal();
//分頁查詢結(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ù)庫的語法,把這個(gè)SQL改造成一個(gè)高性能的分頁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ù)庫表的ID主鍵是自動(dòng)增長的,現(xiàn)在添加一條數(shù)據(jù),想要得到這條數(shù)據(jù)自動(dòng)增長的ID,方法如下
dao層
useGeneratedKeys=true:獲取數(shù)據(jù)庫生成的主鍵
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使用Spring Test進(jìn)行集成測(cè)試的流程步驟
Spring Test 是 Spring Framework 提供的一個(gè)測(cè)試框架,它可以幫助我們進(jìn)行集成測(cè)試,在本文中,我們將介紹如何使用 Spring Test 進(jìn)行集成測(cè)試,需要的朋友可以參考下2023-06-06
springBoot啟動(dòng)時(shí)讓方法自動(dòng)執(zhí)行的幾種實(shí)現(xiàn)方式
這篇文章主要介紹了springBoot啟動(dòng)時(shí)讓方法自動(dòng)執(zhí)行的幾種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
Nacos服務(wù)實(shí)例的權(quán)重設(shè)置方式(以及設(shè)置為0時(shí)的作用與場(chǎng)景)
這篇文章主要介紹了Nacos服務(wù)實(shí)例的權(quán)重設(shè)置方式(以及設(shè)置為0時(shí)的作用與場(chǎng)景),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07
SpringBoot事件發(fā)布與監(jiān)聽超詳細(xì)講解
今天去官網(wǎng)查看spring boot資料時(shí),在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
java創(chuàng)建子類對(duì)象設(shè)置并調(diào)用父類的變量操作
這篇文章主要介紹了java創(chuàng)建子類對(duì)象設(shè)置并調(diào)用父類的變量操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01
JMagick實(shí)現(xiàn)基本圖像處理的類實(shí)例
這篇文章主要介紹了JMagick實(shí)現(xiàn)基本圖像處理的類,實(shí)例分析了java圖像處理的相關(guān)技巧,需要的朋友可以參考下2015-06-06

