Mybatis使用Demo
springboot配置Mybatis流程
1. 引入依赖,在gradle中添加
mybatis-spring-boot-starter
2. 配置datasource
@Bean
public DruidDataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
//初始化
return dataSource;
}
- 在applictaion.yml中配置
mybatis:
//其路径是mybatis的xml文件所在路径
mapper-locations: classpath:mapper/*.xml
- 编写一个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" >
//namespace对应着mybatis的接口位置
<mapper namespace="com.dullbird.demo.mybaits.mapper.UserBaseInfoMapper">
<resultMap id="UserBaseInfoTotal" type="com.dullbird.demo.mybaits.po.UserBaseInfo">
<result column="user_id" property="userId" jdbcType="BIGINT" />
<result column="name" property="name" jdbcType="VARCHAR" />
</resultMap>
<select id="listUserInfos" resultMap="UserBaseInfoTotal">
select * from user_base_info
</select>
</mapper>
- 需要在spring配置文件中加入如下注解
//用于扫描mapper
@MapperScan("com.dullbird.demo.mybaits.mapper")
@Configuration
//用于开启事务
@EnableTransactionManagement
6.写测试类测试结果即可
mybatis-pageHelper:
1. 引入依赖包,由于是springboot 引入pagehelper-spring-boot-starter
2. 配置拦截器插件(注意:是在SqlSessionFactory中配置), 有两种配置方法,一种是在mybatis的主配置xml中。二、在SqlSessionFactory对象中配置。
由于我的项目没有mybatis的主配置xml,所以使用第二种
该方式没有配置成功,报错NPE,需要给对象传入配置文件,申明一个空的即可。然后又报错java.lang.RuntimeException: 在系统中发现了多个分页插件,请检查系统配置!,暂时未解决
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
//如果需要往拦截器中配置参数还可以调用setProperties
Interceptor[] interceptors = {new PageInterceptor()};
//添加拦截插件
sqlSessionFactoryBean.setPlugins(interceptors);
sqlSessionFactoryBean.setDataSource(dataSource);
SqlSessionFactory sqlSessionFactory = null;
try {
sqlSessionFactory = sqlSessionFactoryBean.getObject();
} catch (Exception e) {
logger.error("=============",e);
}
return sqlSessionFactory;
}
第三种方式,直接配置,并测试可用
@Bean
public PageHelper getPageHelper() {
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageHelper.setProperties(properties);
return pageHelper;
}
第三种方式的application.yml配置方式,和java配置一样
pagehelper:
helperDialect: mysql
# reasonable: true
supportMethodsArguments: true
params: pageNum=pageNum;pageSize=pageSize
- 具体分页方式选择
1). RowBounds方式的调用。(不使用,如果需要查看参考文章的分页工具)
2). PageHelper.startPage 静态方法调用
即在调用sql的上一句执行
PageHelper.startPage(1, 10);或PageHelper.offsetPage(1, 10);
然后调用sql查询。此处可能会有安全问题。详见参考文章
3). 使用参数方式
有两种方式,一种是接口种添加参数,另外一种是实体中。
演示第二种
首先配置application.yml
pagehelper:
helperDialect: mysql
//需要开启支持参数
supportMethodsArguments: true
//接收pageNum和pageSize
params: pageNum=pageNum;pageSize=pageSize
然后修改bean
public class UserBaseInfo {
private Long userId;
private String name;
//增加如下两个字段
private Integer pageNum;
private Integer pageSize;
//省略getter/setter
}
修改接口接收一个UserBaseInfo的参数,不需要显示的处理pageNum,pageSize
public interface UserBaseInfoMapper {
List<UserBaseInfo> listUserInfos(UserBaseInfo userBaseInfo);
}
测试代码
UserBaseInfo userBaseInfo = new UserBaseInfo();
userBaseInfo.setPageNum(1);
userBaseInfo.setPageSize(5);
System.out.println(userBaseInfoMapper.listUserInfos(userBaseInfo));
需要注意的是,利用参数的方式分页。必须开启supportMethodsArguments: true
且必须传入pageNum=pageNum;pageSize=pageSize两个参数,否则不会分页。
参考文章:
1.https://blog.csdn.net/zhoujiyu123/article/details/79786847 springboot如何继承mybatis
2.https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md mybatis分页工具