Mybatis 高級(jí)用法和tk.mybatis使用示例詳解
使用@SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider
MyBatis 3.x 版本提供了以下4個(gè)CRUD的高級(jí)注解。
@SelectProvider:用于構(gòu)建動(dòng)態(tài)查詢(xún)SQL。
@InsertProvider:用于構(gòu)建動(dòng)態(tài)新增SQL。
@UpdateProvider:用于構(gòu)建動(dòng)態(tài)更新SQL。
@DeleteProvider:用于構(gòu)建動(dòng)態(tài)刪除SQL。
@SelectProvider
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Repeatable(SelectProvider.List.class)
public @interface SelectProvider {
// 用于指定獲取 sql 語(yǔ)句的指定類(lèi)
Class<?> type();
// 指定類(lèi)中要執(zhí)行獲取 sql 語(yǔ)句的方法
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();
}
}
}tk.mybatis
tkmybatis 是對(duì)底層 sql 進(jìn)行了抽象封裝,不需要考慮 sql 怎么寫(xiě),只需要按照邏輯思維,遵循 tkmybatis 的語(yǔ)法即可實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作。
引入依賴(lài)
<!-- 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>查詢(xún)實(shí)現(xiàn)
實(shí)體映射類(lèi)
建立實(shí)體類(lèi)用@Table注解標(biāo)注映射表名稱(chēng)注意字段表名稱(chēng)大小寫(xiě)問(wèn)題。
@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 省略
}實(shí)體類(lèi)規(guī)范
- 表名默認(rèn)使用類(lèi)名,駝峰轉(zhuǎn)下劃線(xiàn)(只對(duì)大寫(xiě)字母進(jìn)行處理),如
UserInfo默認(rèn)對(duì)應(yīng)的表名為user_info。 - 表名可以使用
@Table(name = “tableName”)進(jìn)行指定,對(duì)不符合第一條默認(rèn)規(guī)則的可以通過(guò)這種方式指定表名。 - 字段默認(rèn)和
@Column一樣,都會(huì)作為表字段,表字段默認(rèn)為Java對(duì)象的Field名字駝峰轉(zhuǎn)下劃線(xiàn)形式。 - 可以使用
@Column(name = “fieldName”)指定不符合第3條規(guī)則的字段名。 - 使用
@Transient注解可以忽略字段,添加該注解的字段不會(huì)作為表字段使用。 - 建議一定是有一個(gè)
@Id注解作為主鍵的字段,可以有多個(gè)@Id注解的字段作為聯(lián)合主鍵。
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();
}
}
}調(diào)用dao
@Autowired
private TkUserMapper tkUserMapper;
@Override
public void test1() {
String id = "1";
List<TkUser> tkUserList = tkUserMapper.selectById(id);
log.info("test");
}到此這篇關(guān)于Mybatis 高級(jí)用法和tk.mybatis使用的文章就介紹到這了,更多相關(guān)Mybatis tk.mybatis使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
簡(jiǎn)單了解java類(lèi)的初始化以及類(lèi)的實(shí)例化
這篇文章主要介紹了簡(jiǎn)單了解java類(lèi)的初始化以及類(lèi)的實(shí)例化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
SpringBoot監(jiān)聽(tīng)Redis Key過(guò)期事件的幾種方式
本文介紹了使用Redis監(jiān)聽(tīng)鍵過(guò)期來(lái)實(shí)現(xiàn)電商平臺(tái)優(yōu)惠券自動(dòng)失效的解決方案,包括配置Redis、實(shí)現(xiàn)監(jiān)聽(tīng)器、使用線(xiàn)程池優(yōu)化以及進(jìn)一步優(yōu)化措施,需要的朋友可以參考下2026-03-03
SpringBoot基于RabbitMQ實(shí)現(xiàn)消息可靠性的方法
RabbitMQ 提供了 publisher confirm 機(jī)制來(lái)避免消息發(fā)送到 MQ 過(guò)程中丟失,這種機(jī)制必須給每個(gè)消息指定一個(gè)唯一ID,消息發(fā)送到MQ以后,會(huì)返回一個(gè)結(jié)果給發(fā)送者,表示消息是否處理成功,本文給大家介紹了SpringBoot基于RabbitMQ實(shí)現(xiàn)消息可靠性的方法,需要的朋友可以參考下2024-04-04
Springboot 如何實(shí)現(xiàn)filter攔截token驗(yàn)證和跨域
這篇文章主要介紹了Springboot 如何實(shí)現(xiàn)filter攔截token驗(yàn)證和跨域操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot使用@Validated處理校驗(yàn)的方法步驟
@Validated?注解的主要目的是啟用和利用?Spring?的驗(yàn)證框架,它可以用于類(lèi)上也可以用于方法參數(shù)上,本文給大家介紹了SpringBoot使用@Validated優(yōu)雅的處理校驗(yàn)的方法步驟,通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
Red?Hat?安裝JDK與IntelliJ?IDEA的詳細(xì)過(guò)程
YUM是基于Red Hat的Linux發(fā)行版的一個(gè)強(qiáng)大而用戶(hù)友好的包管理工具,這篇文章主要介紹了Red?Hat安裝JDK與IntelliJ IDEA,需要的朋友可以參考下2023-08-08
@TableField(typeHandler = FastjsonTypeHandler.clas
文章總結(jié)個(gè)人前端上傳經(jīng)驗(yàn),提出了一些優(yōu)化上傳方法的建議,旨在提高上傳效率和用戶(hù)體驗(yàn),希望能為開(kāi)發(fā)者提供參考2026-04-04
SpringBoot整合Shiro兩種方式(總結(jié))
這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
SpringBoot中內(nèi)置的49個(gè)常用工具類(lèi)使用
SpringBoot以其強(qiáng)大的自動(dòng)配置和豐富的生態(tài)系統(tǒng)成為Java開(kāi)發(fā)的首選框架,本文將介紹49個(gè)常用工具類(lèi),并通過(guò)簡(jiǎn)潔的代碼示例展示它們的基本用法,希望對(duì)大家有一定的幫助2025-04-04

