Mybatis 高级用法和tk.mybatis使用
文章目录
- [Mybatis 高级用法和tk.mybatis使用](#Mybatis 高级用法和tk.mybatis使用)
使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider
MyBatis 3.x
版本提供了以下4
个CRUD
的高级注解。
@SelectProvider
:用于构建动态查询SQL
。
@InsertProvider
:用于构建动态新增SQL
。
@UpdateProvider
:用于构建动态更新SQL
。
@DeleteProvider
:用于构建动态删除SQL
。
@SelectProvider
java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(SelectProvider.List.class)
public @interface SelectProvider {
// 用于指定获取 sql 语句的指定类
Class<?> type();
// 指定类中要执行获取 sql 语句的方法
String method();
}
使用例子
java
@Mapper
public interface TkUserMapper extends BaseMapper<TkUser> {
@SelectProvider(type = TkUserMapperProvider.class, method = "selectById")
List<TkUser> selectById(@Param("id") String id);
class TkUserMapperProvider {
public String selectById(@Param("id") String id) {
SQL sql = new SQL();
sql.SELECT("*");
sql.FROM("TEST_USER");
return sql.toString();
}
}
}
tk.mybatis
tkmybatis
是对底层sql
进行了抽象封装,不需要考虑sql
怎么写,只需要按照逻辑思维,遵循tkmybatis
的语法即可实现数据库操作。
引入依赖
xml
<!-- mybatis 通用 mapper -->
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>4.3.0</version>
</dependency>
查询实现
实体映射类
- 建立实体类用
@Table
注解标注映射表名称 - 注意字段表名称大小写问题。
java
@Table(name = "USER")
public class TkUser {
private int id;
private String username;
private String password;
private int gender;
private int age;
private int idcard;
private int phone;
// get set 省略
}
实体类规范
-
表名默认使用类名,驼峰转下划线(只对大写字母进行处理),如
UserInfo
默认对应的表名为user_info
。 -
表名可以使用
@Table(name = "tableName")
进行指定,对不符合第一条默认规则的可以通过这种方式指定表名。 -
字段默认和
@Column
一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式。 -
可以使用
@Column(name = "fieldName")
指定不符合第3条规则的字段名。 -
使用
@Transient
注解可以忽略字段,添加该注解的字段不会作为表字段使用。 -
建议一定是有一个
@Id
注解作为主键的字段,可以有多个@Id
注解的字段作为联合主键。
dao层
- 单表操作,只需要继承
tk.mybatis
下的Mapper
接口即可使用
java
@Mapper
public interface TkUserMapper extends BaseMapper<TkUser> {
@SelectProvider(type = TkUserMapperProvider.class, method = "selectById")
List<TkUser> selectById(@Param("id") String id);
class TkUserMapperProvider {
public String selectById(@Param("id") String id) {
SQL sql = new SQL();
sql.SELECT("*");
sql.FROM("TEST_USER");
return sql.toString();
}
}
}
调用dao
java
@Autowired
private TkUserMapper tkUserMapper;
@Override
public void test1() {
String id = "1";
List<TkUser> tkUserList = tkUserMapper.selectById(id);
log.info("test");
}