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)文章
常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例
這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例,一般來(lái)說(shuō)DSA算法用于簽名的效率會(huì)比RSA要快,需要的朋友可以參考下2016-04-04
SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)全過(guò)程
Spring Security是一個(gè)功能強(qiáng)大且高度可定制的身份驗(yàn)證和授權(quán)框架,專(zhuān)門(mén)用于保護(hù)Java應(yīng)用程序的Web集成,下面這篇文章主要給大家介紹了關(guān)于SpringSecurity?Web權(quán)限方案實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2024-01-01
java監(jiān)聽(tīng)器的實(shí)現(xiàn)和原理詳解
這篇文章主要給大家介紹了關(guān)于java監(jiān)聽(tīng)器實(shí)現(xiàn)和原理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
SpringBoot創(chuàng)建定時(shí)任務(wù)的示例詳解
在Spring Boot中創(chuàng)建定時(shí)任務(wù),通常使用@Scheduled注解,這是Spring框架提供的一個(gè)功能,允許你按照固定的頻率(如每天、每小時(shí)、每分鐘等)執(zhí)行某個(gè)方法,本文給大家介紹了SpringBoot創(chuàng)建定時(shí)任務(wù)的示例,需要的朋友可以參考下2024-04-04

