好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Spring Boot集成MyBatis实现通用Mapper的配置及使用

什么是通用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

引入依赖

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

<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中增加如下配置:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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和数据库的基本信息。在应用服务启动时,会自动初始化classpath下的sql脚本。

?

1

2

3

4

5

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的使用

引入依赖

?

1

2

3

4

5

<dependency>

  <groupid>tk.mybatis</groupid>

  <artifactid>mapper</artifactid>

  <version> 3.4 . 0 </version>

</dependency>

通用mapper的作者 abel533 ,有兴趣可阅读源码。

配置通用mapper

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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 包下。

?

1

2

3

4

5

basedao

import tk.mybatis.mapper.common.mapper;

import tk.mybatis.mapper.common.mysqlmapper;

public interface basedao<t> extends mapper<t>,mysqlmapper<t>{

}

通用mapper接口,其他接口继承该接口即可。

创建实体

我们需要添加 test 表对应的实体。

?

1

2

3

4

5

6

7

8

9

10

11

@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") 注解指定了该实体对应的数据库表名。

配置文件

?

1

2

3

mybatis:

configuration:

map-underscore-to-camel- case : true

为了更好地映射java实体和数据库字段,我们指定下划线驼峰法的映射配置。

testdao编写

?

1

2

3

4

public interface testdaoextends basedao<testmodel>{

  @insert ( "insert into test(id, local_name) values(#{id}, #{localname})" )

  integerinserttestmodel(testmodel testmodel);

}

testdao 继承自 basedao ,并指定了泛型为对应的 testmodel 。 testdao 包含继承的方法,如:

?

1

2

3

4

5

6

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的配置及使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

原文链接:http://blueskykong.com/2018/08/22/mybatis/

查看更多关于Spring Boot集成MyBatis实现通用Mapper的配置及使用的详细内容...

  阅读:64次