Spring boot 整合mybatis+pageHepper插件
项目结构:
1.添加maven依赖
分别为springboot 提供的mybatis starter 和github的分页插件
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>${pagehelper.version}</version>
</dependency>
如遇到依赖下载缓慢的问题可以参考 使用阿里maven仓库,解决依赖下载慢的问题
2.添加配置文件
2.1 添加java config:
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import com.github.pagehelper.PageHelper;
@Configuration
@MapperScan(basePackages="com.im.lottery.persistence")
public class MybatisConfiguation {
@Autowired
private DataSource dataSource;
//分页插件
@Bean
public Interceptor pageHelper(){
//分页插件
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("reasonable", "false");
properties.setProperty("supportMethodsArguments", "true");
properties.setProperty("returnPageInfo", "check");
properties.setProperty("params", "count=countSql");
pageHelper.setProperties(properties);
return pageHelper;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory(){
SqlSessionFactoryBean sqlSessionFactory=new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
sqlSessionFactory.setTypeAliasesPackage("com.im.lottery.entity");
sqlSessionFactory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
Interceptor[] interceptors=new Interceptor[1];
interceptors[0]=pageHelper();
sqlSessionFactory.setPlugins(interceptors);
return sqlSessionFactory;
}
}
@MapperScan 可以自动注入Mapper类
也可以于 Mapper 类 添加@Mapper注解 代码如下
@Mapper
public interface PrizeMapper {
Integer insert(Prize prize);
Integer delete(@Param("prizeId") Integer prizeId);
Integer update(Prize prize);
List<Prize> findAll();
Prize findById(@Param("prizeId")Integer prizeId);
InventoryCount getInventory(@Param("prizeId")Integer prizeId);
Integer minusInventort(@Param("prizeId")Integer prizeId);
}
二者选其一即可
2.2 添加 mybatis-config.xml 文件
默认路径于src/main/resources 下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="cacheEnabled" value="true" />
</settings>
</configuration>
3.添加Mapper
3.1 添加interface
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.im.lottery.entity.InventoryCount;
import com.im.lottery.entity.Prize;
@Mapper
public interface PrizeMapper {
Integer insert(Prize prize);
Integer delete(@Param("prizeId") Integer prizeId);
Integer update(Prize prize);
List<Prize> findAll();
Prize findById(@Param("prizeId")Integer prizeId);
InventoryCount getInventory(@Param("prizeId")Integer prizeId);
Integer minusInventort(@Param("prizeId")Integer prizeId);
}
insert 与 update 返回的 int类 为影响的数据条数 通常为 0 或1
3.2 添加与之对应的 xml
注:xml所在的路径必须与 java 相对应
<?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">
<mapper namespace="com.im.lottery.persistence.PrizeMapper">
<insert id="insert" useGeneratedKeys="true"
parameterType="com.im.lottery.entity.Prize" keyProperty="prizeId">
INSERT INTO
t_prize(
`name`,
`detail`,
`text`,
`inventory`,
`status`,
`addTime`,
`updateTime`
)VALUES(
#{name},
#{detail},
#{text},
#{inventory},
#{status},
#{addTime},
#{updateTime}
)
</insert>
<delete id="delete">
DELETE FROM t_prize
<where>
prizeId=#{prizeId}
</where>
</delete>
<update id="update" parameterType="com.im.lottery.entity.Prize">
UPDATE t_prize SET
<if test="name!=null">
`name`=#{name},
</if>
<if test="detail!=null">
`detail`=#{detail},
</if>
<if test="text!=null">
`text`=#{text},
</if>
<if test="inventory!=null">
`inventory`=#{inventory},
</if>
`updateTime`=#{updateTime}
<where>
prizeId=#{prizeId}
</where>
</update>
<select id="findAll" resultType="com.im.lottery.entity.Prize">
SELECT * FROM t_prize
</select>
<select id="findById" resultType="com.im.lottery.entity.Prize">
SELECT * FROM t_prize
<where>
prizeId=#{prizeId}
</where>
</select>
<select id="getInventory" resultType="com.im.lottery.entity.InventoryCount">
SELECT `inventory` FROM t_prize
<where>
prizeId=#{prizeId}
</where>
</select>
<update id="minusInventort">
UPDATE t_prize SET `inventory`=`inventory`-1
<where>
prizeId=#{prizeId}
</where>
</update>
</mapper>
4.service层中使用mapper
4.1 使用@Autowired 注入
@Autowired
private PrizeMapper prizeMapper;
4.2使用mapper实现数据插入
@Override
public Response InsertPrize(CreatePrizeReq createPrizeReq) {
// TODO Auto-generated method stub
if(!SignCheckUtil.check(createPrizeReq.getSign(),attach,createPrizeReq.getName())){
return ResponseUtil.createSignErrorResult();
}
Prize prize=new Prize();
prize.setName(createPrizeReq.getName());
prize.setDetail(createPrizeReq.getDetail());
prize.setText(createPrizeReq.getText());
prize.setInventory(createPrizeReq.getInventory());
prize.setStatus(1);
prize.setAddTime(Timestamp.valueOf(LocalDateTime.now()));
if(prizeMapper.insert(prize)==1){
return ResponseUtil.createSuccessResponseResult();
}else{
return ResponseUtil.createUnknownResult();
}
}
PS: 使用 pageHelper
Page<Record> pages=PageHelper.startPage(findPageReq.getIndex(), findPageReq.getPageSize())
.doSelectPage(()->recordMapper.findAll());
此处使用的recordMapper.findAll() 无需做特殊处理 只是简单的SELECT * FROM 查询
pageHelper会自动将查询结果 封装于Page 类中
结束
至此一个简单的 spring boot + mybatis +pageHeper 的项目已经完成。
本文中只进行了简单的配置与功能演示。
更多内容可查阅官方文档 连接 如下:
PS:作者第一次写博客 ,有错误的地方或未注明的地方 请于评论 指出 谢谢~