# Mybatis 高级用法和tk.mybatis使用

Mybatis 高级用法和tk.mybatis使用

文章目录

使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider

  • MyBatis 3.x 版本提供了以下4CRUD的高级注解。

@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");
}
相关推荐
南城以南溫暖如初1479 小时前
从零搭建24小时自助健身系统:技术选型与核心模块实战
java·spring boot·redis·mysql·vue·mybatis
小江的记录本17 小时前
【ORM 框架】MyBatis-Plus 核心特性、条件构造器、分页插件、乐观锁插件(附《思维导图》、《问题排查与实践清单》和《面试高频考点汇总》)
java·windows·spring boot·python·spring·面试·mybatis
小江的记录本18 小时前
【ORM框架】MyBatis核心原理、ORM思想、MyBatis vs JPA
java·数据库·后端·spring·spring cloud·oracle·mybatis
qq_485015212 天前
MyBatis-Plus 3.x FieldStrategy 作用
java·数据库·mybatis
布谷歌2 天前
如何自定义 MyBatis枚举处理器(EnumTypeHandler):分享从 “同包同名 shadow 覆盖” 到 “官方扩展点” 的重构经历
重构·mybatis
南城以南溫暖如初1472 天前
树洞交友系统架构设计与匿名聊天实战指南
java·spring boot·mysql·系统架构·vue·mybatis·交友
凯酱3 天前
MyBatis 中 OGNL 的使用:从入门到实战
java·tomcat·mybatis
蓝缘4 天前
解决main No MyBatis mapper was found in 的警告
mybatis
luteres4 天前
Mybatis+SSM整合笔记
java·开发语言·mybatis
晚染烟4 天前
每日八股day31
mybatis