最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解spring boot mybatis全注解化

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

本文重點給大家介紹spring boot mybatis 注解化的實例代碼,具體內(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)自動實現(xiàn)了mybatis所有配置,直接寫dao接口即可

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

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

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

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

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

掃描Mapper

@MapperScan("hello.dao")

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

駝峰命名

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

mybatis.configuration.mapUnderscoreToCamelCase=true 

結(jié)果映射@Results

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

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

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

可復(fù)用的@Results

聲明時給id賦值為user

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

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

@ResultMap("user")

打印SQL日志到控制臺

在application.properties中添加以下配置

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

執(zhí)行SQL時,會在控制臺打印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(); 
    //第一個User對象,參考list,序號0是第一個元素,依此類推 
    page.get(0); 
  } 

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

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

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

回傳ID

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

dao層

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

keyProperty="id":把主鍵值存入User param對象的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()); 

控制臺

存儲過程

這是一個mysql存儲過程,傳入一個id值,根據(jù)這個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:說明這是一個存儲過程

@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全注解化,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • java中使用DES加密解密實例

    java中使用DES加密解密實例

    這篇文章主要介紹了java中使用DES加密解密實例,需要的朋友可以參考一下
    2014-01-01
  • SpringBoot使用Spring Test進行集成測試的流程步驟

    SpringBoot使用Spring Test進行集成測試的流程步驟

    Spring Test 是 Spring Framework 提供的一個測試框架,它可以幫助我們進行集成測試,在本文中,我們將介紹如何使用 Spring Test 進行集成測試,需要的朋友可以參考下
    2023-06-06
  • springBoot啟動時讓方法自動執(zhí)行的幾種實現(xiàn)方式

    springBoot啟動時讓方法自動執(zhí)行的幾種實現(xiàn)方式

    這篇文章主要介紹了springBoot啟動時讓方法自動執(zhí)行的幾種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 淺談Java的LinkedHashSet源碼

    淺談Java的LinkedHashSet源碼

    這篇文章主要介紹了淺談Java的LinkedHashSet源碼,底層是鏈表實現(xiàn)的,是set集合中唯一一個能保證怎么存就怎么取的集合對象
    因為是HashSet的子類,所以也是保證元素唯一的,與HashSet的原理一樣,需要的朋友可以參考下
    2023-09-09
  • Nacos服務(wù)實例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景)

    Nacos服務(wù)實例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景)

    這篇文章主要介紹了Nacos服務(wù)實例的權(quán)重設(shè)置方式(以及設(shè)置為0時的作用與場景),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • springboot如何自定義properties文件

    springboot如何自定義properties文件

    這篇文章主要介紹了springboot如何自定義properties文件,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-06-06
  • SpringBoot事件發(fā)布與監(jiān)聽超詳細講解

    SpringBoot事件發(fā)布與監(jiān)聽超詳細講解

    今天去官網(wǎng)查看spring boot資料時,在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • java創(chuàng)建子類對象設(shè)置并調(diào)用父類的變量操作

    java創(chuàng)建子類對象設(shè)置并調(diào)用父類的變量操作

    這篇文章主要介紹了java創(chuàng)建子類對象設(shè)置并調(diào)用父類的變量操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • JMagick實現(xiàn)基本圖像處理的類實例

    JMagick實現(xiàn)基本圖像處理的類實例

    這篇文章主要介紹了JMagick實現(xiàn)基本圖像處理的類,實例分析了java圖像處理的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 使用@CacheEvict清除指定下所有緩存

    使用@CacheEvict清除指定下所有緩存

    這篇文章主要介紹了使用@CacheEvict清除指定下所有緩存,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12

最新評論

阿图什市| 临沧市| 台湾省| 钦州市| 大姚县| 南昌市| 安新县| 泰和县| 延庆县| 梨树县| 弥勒县| 左云县| 连州市| 长顺县| 甘谷县| 外汇| 松江区| 盐边县| 阿坝| 桦南县| 潜山县| 友谊县| 吉安县| 青冈县| 冀州市| 共和县| 红安县| 监利县| 闻喜县| 丘北县| 北票市| 喀喇沁旗| 石河子市| 喜德县| 新绛县| 体育| 加查县| 即墨市| 高雄县| 南乐县| 天峻县|