引言
上一篇我们讲到了如何搭建一个简单的Spring Boot项目,在实际应用中,Spring Boot比较多用于搭建Spring Web项目。接下来将介绍如何使用Spring Boot、MySql、Mybatis等搭建一个可快速开发的应用框架。
1、为什么使用通用 Mapper?
通用Mapper是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。
GitHub源码:https://github.com/abel533/Mapper
文档地址:https://github.com/abel533/Mapper/wiki
2、为什么使用PageHelper插件?
使用过Mybatis的朋友都知道,在需要分页查询的业务场景下,编写分页条件的语句相对会比较麻烦。MyBatis 分页插件 - PageHelper支持任何复杂的单表、多表分页,减少了我们开发量。
GitHub源码:https://github.com/pagehelper/Mybatis-PageHelper
文档地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/en/HowToUse.md
详细步骤
引入jar包
在pom.xml中引入相关jar包
<properties>
<!-- mysql -->
<mysql.version>6.0.6</mysql.version>
<!-- mybatis-->
<mybatis.starter.version>1.3.2</mybatis.starter.version>
<!-- 通用Mapper-->
<mybatis.mapper.version>4.0.2</mybatis.mapper.version>
<!-- PageHelper-->
<mybatis.pagehelper.version>1.2.5</mybatis.pagehelper.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--mybatis所需依赖 begin-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.starter.version}</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${mybatis.mapper.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${mybatis.pagehelper.version}</version>
</dependency>
<!--mybatis所需依赖 end-->
</dependencies>
添加配置
1、在application.yml文件中添加一下配置
mybatis:
# mybatis扫描的xml文件(注意此路径此处不能用.来做分隔符)
mapper-locations: classpath*:com/csdn/**/mapper/*.xml
# mybatis扫描的实体文件
type-aliases-package: com.csdn.**.entity
# 通用mapper,MyMapper为自定义封装的实体类
mapper:
mappers: com.csdn.common.mybatis.MyMapper
ORDER: BEFORE
# pagehelper分页插件
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params:
count: countSql
2、在Spring Boot的启动类上添加Mapper扫描注解
注意@MapperScan要导入tk包下面的,不要导错。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import tk.mybatis.spring.annotation.MapperScan;
@SpringBootApplication
@EnableTransactionManagement //开启事务管理
@MapperScan("com.csdn.**.dao") //与dao层的@Mapper二选一写上即可(主要作用是扫包)
@EnableEncryptableProperties
public class MyBatisApplication {
public static void main(String[] args) {
SpringApplication.run(MyBatisApplication.class, args);
}
}
3、自定义通用 Mapper类
public interface MyMapper<T> extends Mapper<T>, IdsMapper<T> {
}
简单示例
1、Country.java实体类
public class Country {
@Id
// 通用 Mapper 中 Oracle 生成id方式: @KeySql(sql = "select sys_guid() from dual", order = ORDER.BEFORE)
// 通用 Mapper 中 MySql 生成id方式
@KeySql(sql = "select REPLACE(uuid(),'-','')", order = ORDER.BEFORE)
private String id;
private String countryname;
private String countrycode;
//省略 getter 和 setter
}
2、CountryMapper.java
CountryMapper为调用数据库方法的DAO层接口类,该接口继承了通用Mapper接口。因此当我们在service层注入CountryMapper后,即可调用通用Mapper所封装好的方法。
public interface CountryMapper extends MyMapper<Country> {
}
3、CountryServiceImpl.java
public class CountryService{
@Autowired
protected CountryMapper mapper;
public Country getCountryById(String id){
// 可直接调用通用Mapper封装好的增删改查方法
Country country = mapper.selectByPrimaryKey(id);
return country ;
}
}
4、使用PageHelper快速查询分页数据
在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
public List<Country> getCountryList(int pageNum,int pageSize){
PageHelper.startPage(pageNum, pageSize);
List<Country> list= mapper.selectAll();
return list;
}
此外,通用Mapper还提供更多好玩实用的方法,如专用代码生成器、通用代码生成器、二级缓存配置等。后续将持续更新,敬请关注!