激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

服務器之家 - 編程語言 - Java教程 - SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢

SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢

2022-01-20 00:52一灰灰Blog Java教程

通常我們在使用Mybatis進行開發時,會選擇xml文件來寫對應的sql,然后將Mapper接口與sql的xml文件建立綁定關系,然后在項目中調用mapper接口就可以執行對應的sql,感興趣的可以學習一下

通常我們在使用Mybatis進行開發時,會選擇xml文件來寫對應的sql,然后將Mapper接口與sql的xml文件建立綁定關系,然后在項目中調用mapper接口就可以執行對應的sql

那么如何將Mapper接口與sql進行綁定呢?本文將介紹四種常見的姿勢

  • 默認策略
  • SpringBoot配置參數mybatis.mapper-locations
  • <mapper>指定
  • SqlSessionFactory指定

 

I. 環境準備

1. 數據庫準備

使用mysql作為本文的實例數據庫,新增一張表

CREATE TABLE `money` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '用戶名',
`money` int(26) NOT NULL DEFAULT '0' COMMENT '錢',
`is_deleted` tinyint(1) NOT NULL DEFAULT '0',
`create_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
`update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

2. 項目環境

本文借助 SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA進行開發

pom依賴如下

<dependencies>
  <dependency>
      <groupId>org.mybatis.spring.boot</groupId>
      <artifactId>mybatis-spring-boot-starter</artifactId>
      <version>2.2.0</version>
  </dependency>
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
  </dependency>
</dependencies>

db配置信息 application.yml

spring:
datasource:
  url: jdbc:mysql://127.0.0.1:3306/story?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
  username: root
  password:

 

II. 實例演示

環境搭建完畢,準備對應的實體類,Mapper接口

1. 實體類,Mapper接口

數據庫實體類: MoneyPo

@Data
@NoArgsConstructor
@AllArgsConstructor
public class MoneyPo {
  private Integer id;

  private String name;

  private Long money;

  private Integer isDeleted;

  private Timestamp createAt;

  private Timestamp updateAt;
}

一個基礎的Mapper接口

@Mapper
public interface MoneyMapper {
trueint savePo(@Param("po") MoneyPo po);
}

一個demo service

@Repository
public class MoneyRepository {
  private Random random = new Random();

  public void testMapper() {
      MoneyPo po = new MoneyPo();
      po.setName("mybatis user");
      po.setMoney((long) random.nextInt(12343));
      po.setIsDeleted(0);

      moneyMapper.savePo(po);
      System.out.println("add record: " + po);
}

2. sql文件

寫sql的xml文件內容如下

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.git.hui.boot.mybatis.mapper.MoneyMapper">

  <insert id="savePo" parameterType="com.git.hui.boot.mybatis.entity.MoneyPo" useGeneratedKeys="true"
          keyProperty="po.id">
    INSERT INTO `money` (`name`, `money`, `is_deleted`)
    VALUES
true  (#{po.name}, #{po.money}, #{po.isDeleted});
  </insert>
</mapper>

3. Mapper與Sql綁定

以上為代碼層面實現CURD的基礎知識,基本上就是mybatis操作的那些套路,沒有什么需要特殊注意的;接下來我們進入本文主題

如何告訴mybatis,將上面的MoenyMapper接口與xml文件關聯起來

3.1 默認方式

采用默認的綁定方式,不需要我們做額外的操作,重點是需要遵循規則

  • xml的目錄結構,與Mapper接口的包路徑完全一致
  • xml文件名與Mapper接口名完全一致(注意大小寫都要完全一致)

請注意上面的另個完全一致

SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢

使用默認的方式進行綁定時,一個示例如上圖;特別需要注意的是文件名的大小寫,xml文件的目錄層級都需要完全一致

如果使用上面這種方式,在執行時,依然提示有問題,排查的思路就是查看 target目錄下生成的class文件與xml文件是否在一起,如下圖就是正常的case

SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢

再次說明

基于上面的case,我們可以直接將xml文件,與mapper接口寫在一起,不放在資源路徑resources下面

3.2 SpringBoot配置

SpringBoot提供了一個簡單的配置,來指定Mapper接口與sql的綁定,一行配置即可

mybatis:
mapper-locations: classpath:sqlmapper/*.xml

使用這種方式就比較簡單了,不要求xml文件與Mapper接口文件名一致;也沒有指定路徑層級一致

SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢

3.3 Mapper標簽

mapper標簽,需要放在mybatis的配置文件中,因此我們首先通過SpringBoot的配置參數指定文件路徑

mybatis:
configuration:
  config-location: classpath:mybatis-config.xml

在資源文件下,新建文件 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
      PUBLIC "-//ibatis.apache.org//DTD Config 3.1//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <mappers>
      <mapper resource="sqlmapper/money-mapper.xml"/>
  </mappers>
</configuration>

通過上面的mapper標簽來指定注冊關系,也是可行的,詳情可參考官方文檔 !

https://mybatis.org/mybatis-3/configuration.html#mappers

3.4 SqlSessionFactory

在前面一篇介紹Mapper接口注冊的博文中,就介紹了通過qlSessionFactory+ MapperScannerConfigurer來注冊

這里也是可以通過SqlSessionFactory來指定xml文件的

@Bean(name = "sqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
  SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
  bean.setDataSource(dataSource);
  bean.setMapperLocations(
          // 設置mybatis的xml所在位置,這里使用mybatis注解方式,沒有配置xml文件
          new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/*.xml"));
  // 注冊typehandler,供全局使用
  bean.setTypeHandlers(new Timestamp2LongHandler());
  bean.setPlugins(new SqlStatInterceptor());
  return bean.getObject();
}

4. 小結

本文主要介紹了四種Mapper接口與sql文件關系綁定的姿勢,了解幾種不同的姿勢的特點,在實際的項目開發中,選擇一個即可

  • 默認:在resource資源目錄下,xml文件的目錄層級與Mapper接口的包層級完全一致,且xml文件名與mapper接口文件名也完全一致
    • 如mapper接口: com.git.hui.boot.mybatis.mapper.MoneyMapper
    • 對應的xml文件: com/git/hui/boot/mybatis/mapper/MoneyMapper.xml
  • springboot配置參數:
    • application.yml配置文件中,指定 mybatis.mapper-locations=classpath:sqlmapper/*.xml
  • mybatis-config配置文件
    • 這種姿勢常見于非SpringBoot項目集成mybatis,通常將mybatis的相關配置放在 mybatis-config.xml 文件中
    • 首先在配置文件中,指定加載參數 mybatis.config-location=classpath:mybatis-config.xml
    • 然后指定映射器 <mappers><mapper resource="sqlmapper/money-mapper.xml"/></mappers>
  • SqlSessionFactory指定
    • 直接在SqlSessionFactory中指定即可Mapper文件
// 設置mybatis的xml所在位置,這里使用mybatis注解方式,沒有配置xml文件
bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapping/*.xml"));

除了上面幾種方式之外,mybatis還支持無xml的方式,完全依靠注解來實現sql的拼裝,因此也就不存在映射關系綁定了,關于注解的case,可以參考博文【DB系列】Mybatis+注解整合篇

 

III. 不能錯過的源碼和相關知識點

項目

工程:https://github.com/liuyueyi/spring-boot-demo
源碼:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/104-mybatis-ano
源碼:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/103-mybatis-xml

到此這篇關于SpringBoot+Mybatis實現Mapper接口與Sql綁定幾種姿勢的文章就介紹到這了,更多相關SpringBoot Mybatis Mapper接口與Sql綁定內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://spring.hhui.top/spring-blog/2021/07/07/210707-SpringBoot%E7%B3%BB%E5%88%97Mybatis%E4%B9%8BMapper%E6%8E%A5%E5%8F%A3%E4%B8%8ESql%E7%BB%91%E5%AE%9A%E5%87%A0%E7%A7%8D%E5%A7%BF%E5%8A%BF/

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 精品国产91久久久久 | 中文在线观看www | 免费国产不卡午夜福在线 | 精品一区二区免费 | 一级大黄毛片免费观看 | 直接在线观看的三级网址 | h色视频在线观看 | 国产成人高清成人av片在线看 | h色网站在线观看 | 久久精品女人天堂av | 欧美日本综合 | 久久久久久久久淑女av国产精品 | 自拍偷拍亚洲图片 | 91精品国产91久久久久久不卞 | 毛片免费观看视频 | 91精品国产综合久久婷婷香 | 久久精品日产第一区二区三区 | 欧美18videos性处按摩 | 国产88久久久国产精品免费二区 | 91精品国产99久久久久久红楼 | 久久精品伊人网 | 精品少妇v888av | 黄色网战入口 | 北原夏美av | 最新视频一区二区 | 色99久久 | 亚洲电影免费观看高清完整版在线观 | 一级在线免费观看视频 | 久久精品视频在线免费观看 | 久久精品视频16 | 91不雅视频| 99国产精品国产免费观看 | 一级免费在线视频 | 奇米影视8888狠狠狠狠 | 精品国产91久久久久 | av电影在线观看网站 | 国产又粗又爽又深的免费视频 | 成年免费大片黄在线观看岛国 | 内地av在线 | 久久综合狠狠综合久久 | 在线免费小视频 |