【SpringBoot学习】28、Spring Boot 整合 TKMybatis 通用 Mapper

Spring Boot 整合 TKMybatis

在这里插入图片描述

TKMybatis 也叫作 Mybatis Mapper,都是同一个东西,官方文档地址

Boot 整合定律
1、添加pom.xml 相关依赖
2、修改配置文件
3、添加注解,KO

相关依赖

<!-- 通用Mapper启动器 -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>

配置文件添加配置

# mybatis
mybatis:
  type-aliases-package: cn.tellsea.skeleton.business.entity
  configuration:
    map-underscore-to-camel-case: true

整合TKMybatis,启动类添加注解扫描即可

@MapperScan("cn.tellsea.skeleton.business.mapper")

整合完整,简单吧

自定义父类接口

了解过 TKMybatis 的人都知道,他的使用方式是通过持久层继承接口,从而直接调用已经写好的方法,首先我们定义需要的基类公共接口,让实际业务的Mapper 层继承接口即可,下面是我整理的最常用接口:

/**
 * 自定义通用mapper需要继承的接口
 *
 * @param <T> 不能为空
 * @author Tellsea
 * @date 2019/7/13
 */
public interface MyMapper<T> extends Mapper<T>, DeleteByIdsMapper<T>, MySqlMapper<T>, BatchMapper<T> {
    
    

    // Mapper 基础接口
    // DeleteByIdsMapper 支持批量删除
    // MySqlMapper 支持批量新增
    // BatchMapper 支持批量更新

}

实际使用中,将我们的Mapper接口继承上面的自定义接口,即可使用所有基本功能

public interface UserInfoMapper extends MyMapper<UserInfo> {
    
    

}

然后在调用时,注入 UserInfoMapper 即可直接使用。

新增接口

当继承了自定义 Mapper 接口时,已经可以使用方法了

/**
 * 新增所有字段
 *
 * @param record
 */
void insert(T record);

/**
 * 新增非空字段
 *
 * @param record
 */
void insertSelective(T record);

/**
 * 批量新增
 *
 * @param recordList
 */
void insertList(List<? extends T> recordList);

/**
 * 新增,采用数据库主键策略
 *
 * @param record
 */
void insertUseGeneratedKeys(T record);

新增之后回显Id

第一步,检查实体类的 Id 属性是否开启了注解

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@GeneratedValue注解的strategy属性提供四种值

属性值 说明
AUTO 主键由程序控制, 是默认选项 ,不设置就是这个
IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持
Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植

第二步,直接新增之后调用实体类的 GetId 方法,即可拿到回显 Id,简单吧!!!

@Test
private void test() {
    
    
    UserInfo userInfo = new UserInfo();
    userInfoService.insertSelective(userInfo);
    System.out.println(userInfo.getId());
}

更新

/**
 * 根据主键更新全部字段
 *
 * @param record
 */
void updateByPrimaryKey(T record);

/**
 * 根据主键更新非空字段
 *
 * @param record
 */
void updateByPrimaryKeySelective(T record);

/**
 * 根据Example条件更新所有字段
 *
 * @param record
 * @param example
 */
void updateByExample(T record, Object example);

/**
 * 根据Example条件更新非空字段
 *
 * @param record
 * @param example
 */
void updateByExampleSelective(T record, Object example);

/**
 * 批量更新
 *
 * @param recordList
 */
void updateBatchByPrimaryKeySelective(List<? extends T> recordList);

删除

/**
 * 根据实体非空字段删除
 *
 * @param record
 */
void delete(T record);

/**
 * 根据主键删除
 *
 * @param key
 */
void deleteByPrimaryKey(Object key);

/**
 * 根据主键字符串进行删除
 * 类中只有存在一个带有@Id注解的字段
 *
 * @param ids 如 "1,2,3,4"
 */
void deleteByIds(String ids);

/**
 * 根据Example条件删除数据
 *
 * @param example
 */
void deleteByExample(Object example);

单查询

/**
 * 根据主键查询
 *
 * @param key
 * @return
 */
T selectByPrimaryKey(Object key);

/**
 * 根据实体字段查询
 *
 * @param record
 * @return
 */
T selectOne(T record);

/**
 * 根据Example条件查询
 *
 * @param example
 * @return
 */
T selectOneByExample(Object example);

查询列表

/**
 * 根据实体非空字段查询
 *
 * @param record
 * @return
 */
List<T> select(T record);

/**
 * 查询所有
 *
 * @return
 */
List<T> selectAll();

/**
 * 根据Example条件查询
 *
 * @param example
 * @return
 */
List<T> selectByExample(Object example);

/**
 * 根据非空实体字段和边界查询
 * 能实现分页功能(不推荐使用)
 *
 * @param record
 * @param rowBounds
 * @return
 */
List<T> selectByRowBounds(T record, RowBounds rowBounds);

/**
 * 根据Example条件和边界查询
 *
 * @param example
 * @param rowBounds
 * @return
 */
List<T> selectByExampleAndRowBounds(Object example, RowBounds rowBounds);

计数

/**
 * 根据实体非空属性计数
 *
 * @param record
 * @return
 */
int selectCount(T record);

/**
 * 根据构造查询条件计数
 *
 * @param example
 * @return
 */
int selectCountByExample(Object example);

条件构造器

Example example = new Example(UserInfo.class);
Example.Criteria criteria = example.createCriteria();

绝大多数的 sql 语句都能构建,没毛病

在这里插入图片描述

技术分享区

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_38762237/article/details/121607664
今日推荐