詳解Mybatis注解寫法(附10余個(gè)常用例子)
【前言】
Mybatis 除了 XML 配置寫法,還可以使用注解寫法。
首先需要引入 Mybatis 的依賴:
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.3</version> </dependency>
然后在接口上打上對應(yīng) @Mapper 注解
下面是常用的 Myatis 注解寫法:
【1】新增對象( 非自增 ID )
插入的時(shí)候,數(shù)據(jù)庫的值字段會自動匹配對象中同名稱屬性的值。
@Insert(value = { "INSERT INTO user (id, name, age, remark) VALUES (#{id}, #{name}, #{age}, #{remark})" }) public void addUser(User user);
【2】新增對象( 自增 ID )
如果數(shù)據(jù)庫user表的 id 是自增長,我們可以加上 @Options 注解,那么該對象在插入后,id 屬性會自動獲取到主鍵。
@Options(useGeneratedKeys=true, keyProperty="id") 其中的 id 對應(yīng)數(shù)據(jù)庫表中的主鍵字段。
@Insert(value = { "INSERT INTO user (name, age, remark) VALUES (#{name}, #{age}, #{remark})" }) @Options(useGeneratedKeys=true, keyProperty="id") public void insertUser(User user);
【3】根據(jù) ID 查詢對象
@Param(value = "id") 其中的 id 對應(yīng) SQL 語句中的 #{id}
@Select("SELECT * FROM user WHERE id = #{id}") public User getUserById(@Param(value = "id") long id);
在查詢對象的過程中,表字段會自動裝箱給同名屬性。當(dāng)然,也可以寫成綁定形式。
如下:@Result 注解中 property 是對象字段,column 是表字段。
@Select("SELECT * FROM user WHERE id = #{id}") @Results({ @Result(property="id", column="id"), @Result(property="name", column="name"), @Result(property="age", column="age"), @Result(property="remark", column="remark"), }) public User getUserById(@Param(value = "id") long id);
【4】大于 ( > ) 查詢
在SQL 語句中,直接寫作 > ,但在 xml 中,大于通常用轉(zhuǎn)義 > 替代 ( xml 寫法介紹詳見 6.2)。
@Select("SELECT * FROM user WHERE age > #{age}") public List<User> getUserList(@Param(value = "age") Integer age);
【5】小于 ( < ) 查詢
在SQL 語句中,直接寫作 < ,但在 xml 中,小于通常用轉(zhuǎn)義 < 替代 ( xml 寫法介紹詳見 6.2)。
@Select("SELECT * FROM user WHERE age < #{age}") public List<User> getUserList(@Param(value = "age") Integer age);
【6】IN 關(guān)鍵字查詢
(6.1)帶 IN 的子查詢
@Select("SELECT * FROM user WHERE id IN (SELECT id FROM user WHERE name = #{name})") public List<User> getUserList(@Param(value = "name") String name);
(6.2)帶 IN 的集合查詢
List 集合,Set集合,數(shù)組 都適用。
注意:@Select({"<script>", "xx1", "xx2", "</script>"}) 這種寫法為 xml 方式寫法。所有 SQL 都在 <script> </script> 這對標(biāo)簽之中,標(biāo)簽之外是一對大括號,<script> 標(biāo)簽內(nèi)的所有參數(shù)在最后執(zhí)行 SQL 的時(shí)候會自動拼接,如這里為 xx1xx2,以此類推。 <script> 標(biāo)簽內(nèi)還可以內(nèi)嵌標(biāo)簽,比如下面里的 <foreach>,標(biāo)簽內(nèi)所有引號都為單引號。
@Select({"<script>", "SELECT * FROM user WHERE id IN ", "<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>", "</script>"}) public List<User> getUserList(@Param(value = "ids") List<Long> ids);
在 Postgrelsql 中,如果邏輯SQL中的 IN 和 ANY 的語義相同,那么盡量用 ANY,這樣會更加效率。如:
@Select("SELECT * FROM user WHERE id = ANY(#{ids}::integer[])") public List<SubOrderPO> getUserList(@Param(value = "ids") Integer[] ids);
【7】LIKE 關(guān)鍵字查詢
@Select("SELECT * FROM user WHERE name LIKE concat('%', #{name}, '%') ") public List<User> getUserList(@Param(value = "name") String name);
【8】時(shí)間查詢
(8.1)Date 類型:直接傳入進(jìn)行比較
@Select("SELECT * FROM user WHERE create_time > #{createTime}") public List<User> test(@Param(value = "createTime") Date createTime);
(8.2)String 類型:需要將其轉(zhuǎn)化( 時(shí)間精度可以按自己需要裁取 )
Mysql :STR_TO_DATE('2008-08-08 08:08:08', '%Y-%m-%d %H:%i:%s')
Postgrelsql :to_timestamp('2008-08-08 08:08:08','yyyy-MM-dd hh24:mi:ss')
Oracle : to_date( '2008-08-08 08:08:08' , 'yyyy-MM-dd HH24:mi:ss' )
如 Mysql 寫法:
@Select("SELECT * FROM user WHERE create_time > STR_TO_DATE(#{createTime}, '%Y-%m-%d %H:%i:%s')") public List<User> test(@Param(value = "createTime") String createTime);
【9】高級查詢( 動態(tài)SQL )
注意:【>】是大于(>)的轉(zhuǎn)義,【<】 是小于(<)的轉(zhuǎn)義
@Select({"<script>", "SELECT * FROM user ","<where>", "<if test = 'name != null' >", " AND name LIKE concat('%', #{name}, '%') ", "</if>", "<if test = 'age != null and age != 0' >", " AND age < #{age} ", "</if>", "</where>", "</script>"}) public List<User> getUserList(@Param(value = "name") String name, @Param(value = "age") Integer age);
【10】修改對象
@Update("UPDATE user SET name = #{name} WHERE id = #{id}") public void update(@Param(value = "id") Long id, @Param(value = "name") String name);
【11】刪除對象
@Delete("Delete FROM user WHERE id = #{id}") public void delete(@Param(value = "id") Long id);
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁查詢的實(shí)例
本文主要介紹了oracle+mybatis-plus+springboot實(shí)現(xiàn)分頁查詢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Java獲取時(shí)間如何將當(dāng)前時(shí)間減一天、一月、一年、并格式化
這篇文章主要介紹了Java獲取時(shí)間,將當(dāng)前時(shí)間減一天、一月、一年,并加以格式化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09SpringBoot自動配置深入探究實(shí)現(xiàn)原理
在springboot的啟動類中可以看到@SpringBootApplication注解,它是SpringBoot的核心注解,也是一個(gè)組合注解。其中@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三個(gè)注解尤為重要。今天我們就來淺析這三個(gè)注解的含義2022-08-08Java報(bào)錯(cuò)sun.misc.Unsafe.park(Native Method)問題
這篇文章主要介紹了Java報(bào)錯(cuò)sun.misc.Unsafe.park(Native Method)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07shiro并發(fā)人數(shù)登錄控制的實(shí)現(xiàn)代碼
在做項(xiàng)目中遇到這樣的需求要求每個(gè)賬戶同時(shí)只能有一個(gè)人登錄或幾個(gè)人同時(shí)登錄,如果是同時(shí)登錄的多人,要么不讓后者登錄,要么踢出前者登錄,怎么實(shí)現(xiàn)這樣的功能呢?下面小編給大家?guī)砹藄hiro并發(fā)人數(shù)登錄控制的實(shí)現(xiàn)代碼,一起看看吧2017-09-09java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作
這篇文章主要介紹了java jdk1.8 使用stream流進(jìn)行l(wèi)ist 分組歸類操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10