亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Spring Boot集成MyBatis實現通用Mapper的配置及使用

2024-07-14 08:42:09
字體:
來源:轉載
供稿:網友

什么是通用Mapper

通用Mapper就是為了解決單表增刪改查,基于Mybatis的插件。開發人員不需要編寫SQL,不需要在DAO中增加方法,只要寫好實體類,就能支持相應的增刪改查方法。

關于MyBatis,大部分人都很熟悉。MyBatis 是一款優秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。

不管是DDD(Domain Driven Design,領域驅動建模)還是分層架構的風格,都會涉及到對數據庫持久層的操作,本文將會講解Spring Boot集成MyBatis如何實現通用Mapper。

Spring Boot集成MyBatis

引入依賴

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.1</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency><dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId></dependency>

可以看到如上關于Mybatis引入了 mybatis-spring-boot-starter ,由Mybatis提供的starter。

數據庫配置

在application.yml中增加如下配置:

spring:datasource:hikari:connection-test-query: SELECT 1minimum-idle: 1maximum-pool-size: 5pool-name: dbcp1driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=utf-8username: userpassword: pwdtype: com.zaxxer.hikari.HikariDataSource schema[0]: classpath:/init.sqlinitialize: true

可以看到,我們配置了hikari和數據庫的基本信息。在應用服務啟動時,會自動初始化classpath下的sql腳本

CREATE TABLE IF NOT EXISTS `test` ( `id` bigint(20) unsigned NOT NULL, `local_name` varchar(128) NOT NULL , PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在sql腳本中,我們創建了一張 test 表。

到這里,后面我們一般需要配置Mybatis映射的xml文件和實體類的路徑。根據mybatis generator 自動生成代碼。包括 XXMapper.java , XXEntity.java , XXMapper.xml 。這里我們就不演示了,直接進入下一步的通用Mapper實現。

通用Mapper的使用

引入依賴

<dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>3.4.0</version></dependency>

通用Mapper的作者 abel533 ,有興趣可閱讀源碼。

配置通用Mapper

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import tk.mybatis.spring.mapper.MapperScannerConfigurer;import java.util.Properties;@Configurationpublic class MyBatisMapperScannerConfig{ @Bean public MapperScannerConfigurer mapperScannerConfigurer(){  MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();  mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");  mapperScannerConfigurer.setBasePackage("com.blueskykong.mybatis.dao");//掃描該路徑下的dao  Properties properties = new Properties();  properties.setProperty("mappers", "com.blueskykong.mybatis.config.BaseDao");//通用dao  properties.setProperty("notEmpty", "false");  properties.setProperty("IDENTITY", "MYSQL");  mapperScannerConfigurer.setProperties(properties);  return mapperScannerConfigurer; }}

在配置中,設定了指定路徑下的dao,并指定了通用dao。需要注意的是, MapperScannerConfigurer 來自于 tk.mybatis.spring.mapper 包下。

BaseDaoimport tk.mybatis.mapper.common.Mapper;import tk.mybatis.mapper.common.MySqlMapper;public interface BaseDao<T>extends Mapper<T>,MySqlMapper<T>{}

通用Mapper接口,其他接口繼承該接口即可。

創建實體

我們需要添加 test 表對應的實體。

@Data@Table(name = "test")@AllArgsConstructor@NoArgsConstructorpublic class TestModel{ @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String localName;}

其中, @Table(name = "test") 注解指定了該實體對應的數據庫表名。

配置文件

mybatis:configuration:map-underscore-to-camel-case: true

為了更好地映射Java實體和數據庫字段,我們指定下劃線駝峰法的映射配置。

TestDao編寫

public interface TestDaoextends BaseDao<TestModel>{ @Insert("insert into test(id, local_name) values(#{id}, #{localName})") IntegerinsertTestModel(TestModel testModel);}

TestDao 繼承自 BaseDao ,并指定了泛型為對應的 TestModel 。 TestDao 包含繼承的方法,如:

int deleteByPrimaryKey(Integer userId);int insert(User record);int insertSelective(User record);UserselectByPrimaryKey(Integer userId);int updateByPrimaryKeySelective(User record);int updateByPrimaryKey(User record);

還可以自定義一些方法,我們在上面自定義了一個 insertTestModel 方法。

Service層和控制層

本文略過這兩層,比較簡單,讀者可以參見本文對應的源碼地址。

結果驗證

我們在插入一條數據之后,查詢對應的實體。對應執行的結果也都是成功,可以看到控制臺的如下日志信息:

c.b.mybatis.dao.TestDao.insertTestModel  : ==>  Preparing: insert into test(id, local_name) values(?, ?) 
c.b.mybatis.dao.TestDao.insertTestModel  : ==> Parameters: 5953(Integer), testName(String)
c.b.mybatis.dao.TestDao.insertTestModel  : <==    Updates: 1
c.b.m.dao.TestDao.selectByPrimaryKey     : ==>  Preparing: SELECT id,local_name FROM test WHERE id = ? 
c.b.m.dao.TestDao.selectByPrimaryKey     : ==> Parameters: 5953(Integer)
c.b.m.dao.TestDao.selectByPrimaryKey     : <==      Total: 1

Spring Boot集成MyBatis實現通用Mapper到此就大功告成。

小結

MyBatis是持久層非常常用的組件,Spring Boot倡導約定優于配置,特別是很多xml的配置。當然還有很多同學使用Spring Data。相比而言,我覺得MyBatis的SQL比Spring Data更加靈活,至于具體比較不在此討論。

本文對應的源碼地址:

https://github.com/keets2012/Spring-Boot-Samples/tree/master/mybatis-demo

abel533/Mapper

總結

以上所述是小編給大家介紹的Spring Boot集成MyBatis實現通用Mapper的配置及使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕少妇一区二区三区| 911国产网站尤物在线观看| 久久九九亚洲综合| 国产一区二区三区视频免费| 日韩中文娱乐网| 午夜欧美不卡精品aaaaa| 欧美日韩免费区域视频在线观看| 8x拔播拔播x8国产精品| 欧美极品少妇xxxxⅹ裸体艺术| 美日韩在线视频| 亚洲人成电影网站色www| 国内揄拍国内精品| 成人免费自拍视频| 日本亚洲欧美成人| 亚洲国产日韩欧美综合久久| 日韩有码在线观看| 97香蕉久久超级碰碰高清版| 久久精品国产久精国产思思| 亚洲成人精品在线| 亚洲一级一级97网| 精品国产自在精品国产浪潮| 日本欧美国产在线| 久久精品99国产精品酒店日本| 亚洲成av人乱码色午夜| 91伊人影院在线播放| 久久免费精品日本久久中文字幕| 91精品国产高清自在线| 日韩高清a**址| 亚洲精品97久久| 91九色精品视频| 日韩一区二区福利| 97精品国产97久久久久久免费| 91日本在线观看| 亚洲大胆人体av| 欧美黄色片视频| 欧美性xxxxxx| 欧美激情a在线| 51精品国产黑色丝袜高跟鞋| 精品国产一区二区三区久久狼黑人| 在线播放日韩欧美| 国产+成+人+亚洲欧洲| www.精品av.com| 97久久超碰福利国产精品…| 亚洲xxxxx电影| 欧美性猛交xxxxx水多| 欧洲s码亚洲m码精品一区| 精品国产999| 日韩欧美在线视频免费观看| 久久久久久久网站| 久久久久国产精品www| 九九热精品视频国产| 国产拍精品一二三| 欧美激情精品久久久久| 欧美色图在线视频| 国产精品高潮粉嫩av| 午夜精品视频网站| 欧美一级淫片丝袜脚交| 欧美电影在线观看网站| 国产欧美日韩免费| 不卡在线观看电视剧完整版| 国产欧美在线播放| 456亚洲影院| 美女精品视频一区| 日韩中文字幕网址| 91亚洲精品在线观看| 欧美极品xxxx| 国产精品第8页| 国产成人福利网站| 正在播放欧美视频| 国产亚洲xxx| 91精品在线播放| 亚洲欧美日本伦理| 国产精品高潮呻吟久久av无限| 福利视频一区二区| 亚洲性猛交xxxxwww| 国产精品视频yy9099| 欧美日韩免费区域视频在线观看| 欧美大片在线看免费观看| 国产精品永久免费在线| 亚洲精品视频在线观看视频| 91视频国产高清| 国产69精品99久久久久久宅男| 青青精品视频播放| 亚洲精品动漫久久久久| 亚洲天堂成人在线| 欧美激情一区二区三区在线视频观看| 97色在线播放视频| 亚洲级视频在线观看免费1级| 欧美福利视频在线| 国产精品久久久久久久av大片| 国产一区私人高清影院| 欧美一级片一区| 91欧美日韩一区| 91精品久久久久久久久青青| 国产精品亚洲片夜色在线| 欧美激情图片区| 国产精品亚洲综合天堂夜夜| 欧美性猛交99久久久久99按摩| 亚洲第一二三四五区| 欧美天天综合色影久久精品| 国产精品免费看久久久香蕉| 欧美一二三视频| 成人在线中文字幕| 这里只有视频精品| 日韩国产中文字幕| 欧美激情videoshd| 久久免费视频在线观看| 福利一区视频在线观看| 亚洲高清久久久久久| 伊人久久久久久久久久| 久久久久久国产免费| 一本色道久久综合狠狠躁篇怎么玩| 日韩av网址在线观看| 亚州欧美日韩中文视频| 亚洲丝袜在线视频| 91精品国产91久久久久久不卡| 久久久999精品视频| 国产成人精品日本亚洲专区61| 狠狠久久亚洲欧美专区| 色婷婷综合成人av| 久热精品视频在线观看一区| 狠狠久久五月精品中文字幕| 欧美日韩国产色| 国产91露脸中文字幕在线| 日韩暖暖在线视频| 中文字幕精品国产| 精品福利在线看| 69av在线视频| 在线亚洲男人天堂| 久久精品国产免费观看| 精品国模在线视频| 亚洲精品免费在线视频| 日韩中文字幕网址| 亚洲男人天堂网站| 亚洲欧美日韩在线一区| 欧美国产视频一区二区| 久久久97精品| 午夜精品理论片| 亚洲一区二区三区毛片| 亚洲国产婷婷香蕉久久久久久| 色偷偷av亚洲男人的天堂| 日韩中文字幕在线看| 久久精品色欧美aⅴ一区二区| 久久精品视频在线播放| 久久精品成人一区二区三区| 成人免费视频a| 欧美日韩国内自拍| 欧美在线视频免费播放| 国产va免费精品高清在线| 欧美老肥婆性猛交视频| 国产午夜精品全部视频在线播放| 夜夜嗨av色一区二区不卡| 国产男人精品视频| 欧美激情日韩图片| 亚洲乱亚洲乱妇无码| 欧美黑人狂野猛交老妇| 精品中文字幕在线2019| 国产精品视频久久| 亚洲自拍另类欧美丝袜| 久久69精品久久久久久久电影好| 亚洲综合在线中文字幕| 成人免费视频a| 欧美另类老女人| 深夜福利一区二区|