首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SpringBoot】tk.mybatis集成,帮你更加傻瓜式的写代码~

【SpringBoot】tk.mybatis集成,帮你更加傻瓜式的写代码~

作者头像
林老师带你学编程
发布2019-05-25 23:31:52
3.3K0
发布2019-05-25 23:31:52
举报
文章被收录于专栏:强仔仔强仔仔

一、pom文件中加入tk.mybatis依赖

<!--tk.mybatis依赖-->

<dependency>

<groupId>tk.mybatis</groupId>

<artifactId>mapper-spring-boot-starter</artifactId>

<version>2.1.5</version>

</dependency>

引入依赖的时候要特别注意是否会和springboot相互冲突,比如我这边用的springboot版本是2.1.3.RELEASE和2.1.5的tk.mybatis是不冲突的。

二、mapper接口中继承Mapper(tk.mybatis.mapper.common.Mapper)

import com.hzcard.crm.mybatis.domain.SampleMain;

import tk.mybatis.mapper.common.Mapper;

public interface SampleMainMapper extends Mapper<SampleMain> {

}

我们可以看到这个SampleMainMapper接口中都没有写任何的方法,只是继承一个Mapping接口,这边需要注意的是Mapper不是mybatis中的mapper(org.apache.ibatis.annotations.Mapper),而是tk.mybatis.mapper.common.Mapper中的。

三、.mapper对应的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">
<mapper namespace="com.hzcard.crm.mybatis.mapper.SampleMainMapper">
  <resultMap id="BaseResultMap" type="com.hzcard.crm.mybatis.domain.SampleMain">
    <!--
      WARNING - @mbg.generated
    -->
    <id column="id_" jdbcType="BIGINT" property="id" />
    <result column="gmt_create" jdbcType="TIMESTAMP" property="gmtCreate" />
    <result column="gmt_modified" jdbcType="TIMESTAMP" property="gmtModified" />
    <result column="is_deleted" jdbcType="BIT" property="deleted" />
    <result column="first_name" jdbcType="VARCHAR" property="firstName" />
    <result column="last_name" jdbcType="VARCHAR" property="lastName" />
    <result column="age_" jdbcType="TINYINT" property="age" />
  </resultMap>
</mapper>

我们可以看到也没有对应的增删改查配置信息出现,因为tk.mybatis已经全部帮我们做好了。

四、实际代码调用过程详解

1.控制类代码

@RestController
public class SampleController implements SampleApi{
   
   private static final Logger logger = LoggerFactory.getLogger(SampleController.class);
   
   @Autowired
   private SampleService sampleService;
   
   @Override
   public SampleDto echo(SampleDto dto) {
      logger.info("#echo {}", dto);
      return dto;
   }

   @Override
   public SampleDto getById(@PathVariable("id") Long id) {
      logger.info("#getById {}", id);
      return sampleService.getSample(id);
   }

   @Override
   public Long create(@RequestBody SampleDto dto) {
      logger.info("#create {}", dto);
      return sampleService.createSample(dto);
   }

   @Override
   public boolean update(@PathVariable("id") Long id, @RequestBody SampleDto dto) {
      logger.info("#update id={}, dto={}", id, dto);
      dto.setId(id);
      return sampleService.updateSample(dto);
   }

   @Override
   public boolean delete(@PathVariable("id") Long id) {
      logger.info("#delete {}", id);
      return sampleService.deleteSample(id);
   }

   @Override
   public Page<SampleDto> page(@RequestParam("index") int index, @RequestParam(value = "size", defaultValue = "20") int size) {
      logger.info("#page index={}, size={}", index, size);
      return sampleService.pageSample(index, size);
   }
}

2.服务接口代码

public interface SampleService {

   /**
    * 创建
    * @param dto {@link SampleDto}
    * @return ID
    */
   Long createSample(SampleDto dto);
   
   /**
    * 更新
    * @param dto {@link SampleDto}
    * @return 是否更新
    */
   boolean updateSample(SampleDto dto);
   
   /**
    * 删除
    * @param id ID
    * @return 是否删除
    */
   boolean deleteSample(Long id);
   
   /**
    * 查找
    * @param id ID
    * @return {@link SampleDto},没有相应对象则返回{@code null}
    */
   SampleDto getSample(Long id);
   
   /**
    * 分页查找
    * @param index 页码下标
    * @param size 每页尺寸
    * @return 分页对象
    */
   Page<SampleDto> pageSample(int index, int size);
}

3.服务实现类代码

@Service
public class SampleServiceImpl implements SampleService {
   
   private static final Logger logger = LoggerFactory.getLogger(SampleServiceImpl.class);
   
   @Autowired
   private IdGenerator idGenerator;
   
   @Autowired
   private SampleMainMapper sampleMainMapper;
   
   @Override
   @Transactional
   public Long createSample(SampleDto dto) {
      
      logger.info("#createSample {}", dto);
      
      Date currentDate = DateUtils.getCurrentDate();
      long id = idGenerator.nextId();
      
      SampleMain sampleMain = BeanUtils.copyProps(dto, SampleMain.class);
      
      sampleMain.setId(id);
      sampleMain.setGmtCreate(currentDate);
      sampleMain.setGmtModified(currentDate);
      sampleMain.setDeleted(Boolean.FALSE);
      
      sampleMainMapper.insertSelective(sampleMain);
      
      return id;
   }

   @Override
   @Transactional
   public boolean updateSample(SampleDto dto) {
      
      logger.info("#updateSample {}", dto);
      
      Date currentDate = DateUtils.getCurrentDate();
      SampleMain sampleMain = BeanUtils.copyProps(dto, SampleMain.class);
      sampleMain.setGmtModified(currentDate);
      
      int rows = sampleMainMapper.updateByPrimaryKeySelective(sampleMain);
      
      return rows > 0;
   }

   @Override
   @Transactional
   public boolean deleteSample(Long id) {
      
      logger.info("#deleteSample {}", id);
      
      int rows = sampleMainMapper.deleteByPrimaryKey(id);
      return rows > 0;
   }

   @Override
   public SampleDto getSample(Long id) {
      
      logger.info("#getSample {}", id);
      
      SampleMain sampleMain = sampleMainMapper.selectByPrimaryKey(id);
      return BeanUtils.copyProps(sampleMain, SampleDto.class);
   }

   @Override
   public Page<SampleDto> pageSample(int index, int size) {
      
      logger.info("#pageSample index={}, size={}", index, size);
      
      PageInfo<SampleMain> pageInfo = PageHelper.offsetPage(index * size, size)// 分页
            .setOrderBy("GMT_CREATE DESC")// 排序
            .doSelectPageInfo(new ISelect() {
               @Override
               public void doSelect() {
                  sampleMainMapper.selectAll();
               }
            });

      return PageCopier.copy(pageInfo, SampleDto.class);
   }

}

我们可以看到sampleMainMapper中的insertSelective、deleteByPrimaryKey、updateByPrimaryKeySelective、selectByPrimaryKey这些常见的方法都已经帮我们集成好了,我们只需要调用接口了,完全没必要自己写,可谓简单又高效。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月07日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档