评论

收藏

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

数据库 数据库 发布于:2021-12-17 15:48 | 阅读数:536 | 评论:0

Spring Boot 整合 TKMybatis
DSC0000.png

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 语句都能构建,没毛病
DSC0001.png


技术分享区
DSC0002.png







关注下面的标签,发现更多相似文章