這篇文章將為大家詳細講解有關Spring Boot集成MyBatis如何實現(xiàn)通用Mapper的配置,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)長期為上1000+客戶提供的網(wǎng)站建設服務,團隊從業(yè)經(jīng)驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為欽南企業(yè)提供專業(yè)的成都網(wǎng)站設計、成都網(wǎng)站建設,欽南網(wǎng)站改版等技術服務。擁有10年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
什么是通用Mapper
通用Mapper就是為了解決單表增刪改查,基于Mybatis的插件。開發(fā)人員不需要編寫SQL,不需要在DAO中增加方法,只要寫好實體類,就能支持相應的增刪改查方法。
關于MyBatis,大部分人都很熟悉。MyBatis 是一款優(yōu)秀的持久層框架,它支持定制化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數(shù)以及獲取結果集。MyBatis 可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。
不管是DDD(Domain Driven Design,領域驅動建模)還是分層架構的風格,都會涉及到對數(shù)據(jù)庫持久層的操作,本文將會講解Spring Boot集成MyBatis如何實現(xiàn)通用Mapper。
Spring Boot集成MyBatis
引入依賴
org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-web org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.1 MySQL mysql-connector-java org.projectlombok lombok com.zaxxer HikariCP
可以看到如上關于Mybatis引入了 mybatis-spring-boot-starter
,由Mybatis提供的starter。
數(shù)據(jù)庫配置
在application.yml中增加如下配置:
spring: datasource: hikari: connection-test-query: SELECT 1 minimum-idle: 1 maximum-pool-size: 5 pool-name: dbcp1 driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=utf-8 username: user password: pwd type: com.zaxxer.hikari.HikariDataSource schema[0]: classpath:/init.sql initialize: true
可以看到,我們配置了hikari和數(shù)據(jù)庫的基本信息。在應用服務啟動時,會自動初始化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腳本中,我們創(chuàng)建了一張 test 表。
到這里,后面我們一般需要配置Mybatis映射的xml文件和實體類的路徑。根據(jù)mybatis generator 自動生成代碼。包括 XXMapper.java , XXEntity.java , XXMapper.xml 。這里我們就不演示了,直接進入下一步的通用Mapper實現(xiàn)。
通用Mapper的使用
引入依賴
tk.mybatis mapper 3.4.0
通用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; @Configuration public 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 包下。
BaseDao import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.MySqlMapper; public interface BaseDaoextends Mapper ,MySqlMapper { }
通用Mapper接口,其他接口繼承該接口即可。
創(chuàng)建實體
我們需要添加 test 表對應的實體。
@Data @Table(name = "test") @AllArgsConstructor @NoArgsConstructor public class TestModel{ @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String localName; }
其中, @Table(name = "test")
注解指定了該實體對應的數(shù)據(jù)庫表名。
配置文件
mybatis: configuration: map-underscore-to-camel-case: true
為了更好地映射Java實體和數(shù)據(jù)庫字段,我們指定下劃線駝峰法的映射配置。
TestDao編寫
public interface TestDaoextends BaseDao{ @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層和控制層
本文略過這兩層,比較簡單,讀者可以參見本文對應的源碼地址。
結果驗證
我們在插入一條數(shù)據(jù)之后,查詢對應的實體。對應執(zhí)行的結果也都是成功,可以看到控制臺的如下日志信息:
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實現(xiàn)通用Mapper到此就大功告成。
關于“Spring Boot集成MyBatis如何實現(xiàn)通用Mapper的配置”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。