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

embedded/2024/9/25 10:36:32/

mybatis_0">Mybatis 高级用法和tk.mybatis使用

文章目录

  • Mybatis 高级用法和tk.mybatis使用
    • 使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider
      • @SelectProvider
        • 使用例子
    • tk.mybatis
      • 引入依赖
      • 查询实现
        • 实体映射类
          • 实体类规范
        • dao层
        • 调用dao

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

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

@SelectProvider:用于构建动态查询SQL

@InsertProvider:用于构建动态新增SQL

@UpdateProvider:用于构建动态更新SQL

@DeleteProvider:用于构建动态删除SQL

@SelectProvider

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(SelectProvider.List.class)
public @interface SelectProvider {// 用于指定获取 sql 语句的指定类Class<?> type();// 指定类中要执行获取 sql 语句的方法String method();
}
使用例子
@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();}}
}

mybatis_53">tk.mybatis

  • tkmybatis 是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。

引入依赖

<!-- 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注解标注映射表名称
  • 注意字段表名称大小写问题。
@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 接口即可使用
    在这里插入图片描述
@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
@Autowired
private TkUserMapper tkUserMapper;@Override
public void test1() {String id = "1";List<TkUser> tkUserList =  tkUserMapper.selectById(id);log.info("test");
}

http://www.ppmy.cn/embedded/46054.html

相关文章

pytorch+YOLOv8-1

1.工具开发 2.idea配置pytorch环境 默认安装新版本torch pip install torch 3.pytorch验证 4. print(torch.cuda.is_available()) 输出结果为 False 说明我只能用cpu

vue3状态管理,pinia的使用

​​​​​​​状态管理 我们知道组件与组件之间可以传递信息&#xff0c;那么我们就可以将一个信息作为组件的独立状态&#xff08;例如&#xff0c;单个组件的颜色&#xff09;或者共有状态&#xff08;例如&#xff0c;多个组件是否显示&#xff09;在组件之传递&#xff0c…

做场外个股期权怎么询价

做场外个股期权怎么询价&#xff1f;没有具体的哪家做市商是询价是最低的&#xff0c;个人投资者需要通过机构通道方询价进行对比&#xff0c;各券商的报价由询价机构方提供给到投资者&#xff0c;可以参考不同券商的报价进行比对&#xff0c;再决定是否进行投资。本文来自&…

BGP——边界网关路由协议

BGP -边界网关路由协议 OSPF RIP EIGRP AS——自治系统 标准编号16位二进制 0-65535 1-64511公有 64512 -私有 扩展编号 32位二进制 动态路由协议: GP ——内部网关路由协议 —— AS之内 或企业网、局域网 RIP OSPF EIGRP EGP-外部网关路由协议 - …

鸿蒙开发接口媒体:【@ohos.multimedia.medialibrary (媒体库管理)】

媒体库管理 说明&#xff1a; 该组件从API Version 6开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 导入模块 …

【Qt秘籍】[006]-Label实现Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好&#xff0c;世界”。 因为 The C Programming Language 中使用它做为第一个演示程序&#xff0c;后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面&#xff0c;我们也将演示利用Label显示Qt中的"Hello World!&q…

Windows配置java环境JDK

配置jdk环境非常简单&#xff0c;大概有以下几步&#xff1a; 下载jdk安装&#xff0c;然后双击进行安装配置环境变量(也不是一定非要配置环境变量&#xff0c;配置环境变量的好处就是&#xff0c;在任何位置&#xff0c;系统都可以找到安装路径&#xff0c;非常实用且方便) …

LiveData是如何感知Room数据变化的

一 Room数据变化LiveData如何收到onChanged回调的&#xff1f; 1.1 LiveData是如何创建的 这里讨论的LiveData的创建是特指Dao定义的方法的返回类型&#xff0c;而不是所有的LiveData。 以NoteDao 举例&#xff1a; Dao public interface NoteDao {Query("select * fr…