Spring boot 整合mybatis+pageHepper插件

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:作者第一次写博客 ,有错误的地方或未注明的地方 请于评论 指出 谢谢~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值