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

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

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

服務器之家 - 編程語言 - Java教程 - 詳解spring boot mybatis全注解化

詳解spring boot mybatis全注解化

2021-01-10 11:24給人生一個夢 Java教程

這篇文章主要介紹了spring boot mybatis全注解化的相關資料,需要的朋友可以參考下

本文重點給大家介紹spring boot mybatis 注解化的實例代碼,具體內容大家參考下本文:

pom.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
<!-- 引入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已經自動實現了mybatis所有配置,直接寫dao接口即可

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

@Mapper:聲明一個mybatis的dao接口,會被spring boot掃描到

@Select:聲明一個查詢方法,相應的增刪改使用@Insert @Delete@Update

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

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

掃描Mapper

@MapperScan("hello.dao")

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

駝峰命名

在properties中添加以下配置,在執行查詢后,可以將數據庫的NN_NN格式字段,在java結果集對象中自動轉換成駝峰命名參數

?
1
mybatis.configuration.mapUnderscoreToCamelCase=true

結果映射@Results

如果結果集不是JAVA對象而是Map,map中的列名會和數據庫中的NN_NN一樣,是不會自動駝峰轉換的??梢允褂聾Result來指明結果映射,同樣也適用JAVA對象

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

使用List<Map>不用去維護pojo,適于用數據庫字段不確定或經常變化的場景。但是程序的可讀性、可維護性不如List<User>

可復用的@Results

聲明時給id賦值為user

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

在其他 方法中,重復使用id為user的結果映射

@ResultMap("user")

打印SQL日志到控制臺

在application.properties中添加以下配置

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

執行SQL時,會在控制臺打印SQL日志

第一行:==>左邊是執行SQL的接口及其方法,右邊是執行語句

第二行:傳參數1,String類型

第三行:查到一行數據

分頁

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Service
@Transactional
public class HelloServiceImpl {
  @Autowired
  MybatisDao mybatisDao;
  public void find(){ 
    //分頁插件: 查詢第1頁,每頁10行
    Page<User> page =PageHelper.startPage(1, 10); 
    mybatisDao.findAll(); 
    //數據表的總行數
    page.getTotal();
    //分頁查詢結果的總行數
    page.size();
    //第一個User對象,參考list,序號0是第一個元素,依此類推
    page.get(0);
  }

執行原理:PageHelper.startPage會攔截下一個sql,也就是mybatisDao.findAll()的SQL。并且根據當前數據庫的語法,把這個SQL改造成一個高性能的分頁SQL,同時還會查詢該表的總行數,具體可以看SQL日志。

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

Page<User> page:相當于一個list集合,findAll()方法查詢完成后,會給page對象的相關參數賦值

回傳ID

假設數據庫表的ID主鍵是自動增長的,現在添加一條數據,想要得到這條數據自動增長的ID,方法如下

dao層

useGeneratedKeys=true:獲取數據庫生成的主鍵

keyProperty="id":把主鍵值存入User param對象的id屬性

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

service層

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

控制臺

存儲過程

這是一個mysql存儲過程,傳入一個id值,根據這個id查詢出name值并且做為傳出參數

?
1
2
3
4
5
6
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:傳入參數,就是user.id

mode=OUT:傳出參數,就是user.name

StatementType.CALLABLE:說明這是一個存儲過程

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

service層

?
1
2
3
4
5
public void call(){
  User user = new User();
  user.setId("14");
  mybatisDao.call(user);
  System.out.println(user.getName());

執行結果

詳解spring boot mybatis全注解化

總結

以上所述是小編給大家介紹的spring boot mybatis全注解化,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.csdn.net/ztx114/article/details/78082294

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产欧美在线人网站 | 精久久| 91青青国产在线观看免费 | 精品久久香蕉国产线看观看麻豆 | 国产精品久久久久这里只有精品 | 色综合天天娱乐综合网 | 513热点网 | 成人亚洲欧美日韩中文字幕 | 日韩在线a视频免费播放 | 久久国产加勒比精品无码 | 久草草在线视视频 | 99亚洲视频 | 羞羞视频动漫 | 好姑娘在线观看完整版免费 | 国产高清免费午夜在线视频 | 贰佰麻豆剧果冻传媒一二三区 | 久久久精品国产免费A片胖妇女 | 邪恶肉肉全彩色无遮琉璃神社 | 午夜精品免费 | 亚洲AV 无码AV 中文字幕 | 日韩亚洲欧美一区二区三区 | 99精品热线在线观看免费视频 | 极品丝袜乱系列在线阅读 | 男人天堂网址 | 国产精品午夜剧场 | 精品久久久久免费极品大片 | 3d动漫美女物被遭强视频 | 日韩aaa | 美女禁区视频无遮挡免费看 | 国产精品第一区揄拍 | 欧美最猛性xxxxx动态图 | 99久久99久久久精品齐齐鬼色 | 2021麻豆剧果冻传媒入口永久 | 8天堂资源在线官网 | 男人香蕉好大好爽视频 | 欧美三级小说 | 久久综合香蕉久久久久久久 | 亚洲天堂网站 | 精品国产品国语在线不卡丶 | 亚洲高清中文字幕 | 校花被拖到野外伦小说 |