tk.mybatis.mapper.common包下提供有许多ORM对象增删查改的接口方法,可以直接使用或者对这些方法进行扩展使用来达到类似JPA操作数据库的效果。
集成tk.mybatis也十分简单,只需要引入依赖:
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
根据自己项目SpringBoot版本选择不冲突的tk.mybatis版本,我的SpringBoot版本是2.0.0.RELEASE。
下面将举例说明并使用相关接口方法
1、首先创建表以及Java实体对象
-- 使用MySQL数据库
create table tb_song
(
SONG_ID int primary key auto_increment,
SINGER_NAME VARCHAR(40) null,
SONG_SORT int(8) null,
SONG_STATUS int(4) null,
);
@Getter
@Setter
@ToString
@Table(name = "tb_song")
public class SongEntity {
@Id
@Column(name = "SONG_ID")
private Integer songId;
@Column(name = "SONG_NAME")
private String songName;
@Column(name = "SONG_SORT")
private Integer songSort;
@Column(name = "SONG_STATUS")
private Short songStatus;
}
实体类使用到了以下注解(@Getter,@Setter,@ToString这三个是lombok的注解),@Table(描述表信息),@Id(指定表的主键字段),@Column(描述数据库字段信息)。
2、MyMapper基类继承tk.mybatis.mapper.common.Mapper和tk.mybatis.mapper.additional.insert.InsertListMapper接口:
/**
* @param <T>
* @author caijun
* @description Dao层基类
*/
public interface MyMapper<T> extends Mapper<T>, InsertListMapper<T> {
}
这里先介绍一下 Mapper, InsertListMapper 这两个接口的继承关系和接口方法:
这里的InsertListMapper接口也是一个通用Mapper接口,含有特殊方法,批量插入,支持批量插入的数据库都可以使用,例如mysql,h2等。
tk.mybatis对象操作API介绍:
查询方法:
BaseSelectMapper接口下通用方法
方法名称 | 说明 |
---|---|
T selectOne(T record); | 根据实体属性查询单个对象 |
List select(T record); | 根据实体属性查询多个对象 |
List selectAll(); | 查询全部结果 |
int selectCount(T record); | 根据实体属性查询总数 |
T selectByPrimaryKey(Object key); | 根据主键查询单个对象 |
boolean existsWithPrimaryKey(Object key); | 根据主键查询主键是否存在 |
插入方法:
方法名称 | 说明 |
---|---|
int insert(T record); | 保存单个实体,null的属性也会保存,不会使用数据库默认值 |
int insertSelective(T record); | 保存单个实体,null的属性不会保存,会使用数据库默认值 |
批量插入方法:
InsertListMapper接口下通用方法
方法名称 | 说明 |
---|---|
int insertList(List<? extends T> recordList); | 批量插入方法,支持批量插入的数据库可用 |
更新方法:
方法名称 | 说明 |
---|---|
int updateByPrimaryKey(T record); | 根据主键更新全部字段,null值也会被更新 |
int updateByPrimaryKeySelective(T record); | 根据主键更新属性不为null的字段 |
删除方法:
方法名称 | 说明 |
---|---|
int delete(T record); | 根据实体属性作为条件进行查询删除 |
int deleteByPrimaryKey(Object key); | 根据主键进行删除 |
3、实体对象接口继承MyMapper基类接口
@Mapper
public interface SongEntityMapper extends MyMapper<SongEntity> {
// 自定义通过Mapper.xml定义的数据库操作(本篇不展开说这种方式)
...
}
4、service类中注入SongEntityMapper接口使用通用方法
@Slf4j
@Service
public class SongServiceImpl extends BaseServiceImpl<SongEntity, Integer, Object> implements ISongService {
// 注入SongEntityMapper
@Autowired
private SongEntityMapper songMapper;
// 这里是实现BaseServiceImpl抽象方法返回SongEntityMapper接口对象,不必太关注
@Override
protected MyMapper<SongEntity> getMyMapper() {
return songMapper;
}
@Override
public void testUseCommonMethod() {
songMapper.
}
}
mybatis更新后提供的这些通用方法虽不如JPA灵活,但是可以在使用mybatis作为DAO层框架的项目中通过简单的继承通用接口,亦可方便的使用对象操作,简单又高效。