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 语句都能构建,没毛病
技术分享区
|