- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- Mybatis中注解怎么用
小編給大家分享一下Mybatis中注解怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
Mybatis 除了 XML 配置寫(xiě)法,還可以使用注解寫(xiě)法。
首先需要引入 Mybatis 的依賴(lài):
<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>
然后在接口上打上對應 @Mapper 注解
下面是常用的 Myatis 注解寫(xiě)法:
【1】新增對象( 非自增 ID )
插入的時(shí)候,數據庫的值字段會(huì )自動(dòng)匹配對象中同名稱(chēng)屬性的值。
@Insert(value = { "INSERT INTO user (id, name, age, remark) VALUES (#{id}, #{name}, #{age}, #{remark})" }) public void addUser(User user);
【2】新增對象( 自增 ID )
如果數據庫user表的 id 是自增長(cháng),我們可以加上 @Options 注解,那么該對象在插入后,id 屬性會(huì )自動(dòng)獲取到主鍵。
@Options(useGeneratedKeys=true, keyProperty="id") 其中的 id 對應數據庫表中的主鍵字段。
@Insert(value = { "INSERT INTO user (name, age, remark) VALUES (#{name}, #{age}, #{remark})" }) @Options(useGeneratedKeys=true, keyProperty="id") public void insertUser(User user);
【3】根據 ID 查詢(xún)對象
@Param(value = "id") 其中的 id 對應 SQL 語(yǔ)句中的 #{id}
@Select("SELECT * FROM user WHERE id = #{id}") public User getUserById(@Param(value = "id") long id);
在查詢(xún)對象的過(guò)程中,表字段會(huì )自動(dòng)裝箱給同名屬性。當然,也可以寫(xiě)成綁定形式。
如下:@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】大于 ( > ) 查詢(xún)
在SQL 語(yǔ)句中,直接寫(xiě)作 > ,但在 xml 中,大于通常用轉義 > 替代 ( xml 寫(xiě)法介紹詳見(jiàn) 6.2)。
@Select("SELECT * FROM user WHERE age > #{age}") public List<User> getUserList(@Param(value = "age") Integer age);
【5】小于 ( < ) 查詢(xún)
在SQL 語(yǔ)句中,直接寫(xiě)作 < ,但在 xml 中,小于通常用轉義 < 替代 ( xml 寫(xiě)法介紹詳見(jiàn) 6.2)。
@Select("SELECT * FROM user WHERE age < #{age}") public List<User> getUserList(@Param(value = "age") Integer age);
【6】IN 關(guān)鍵字查詢(xún)
(6.1)帶 IN 的子查詢(xún)
@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 的集合查詢(xún)
List 集合,Set集合,數組 都適用。
注意:@Select({"<script>", "xx1", "xx2", "</script>"}) 這種寫(xiě)法為 xml 方式寫(xiě)法。所有 SQL 都在 <script> </script> 這對標簽之中,標簽之外是一對大括號,<script> 標簽內的所有參數在最后執行 SQL 的時(shí)候會(huì )自動(dòng)拼接,如這里為 xx1xx2,以此類(lèi)推。 <script> 標簽內還可以?xún)惹稑撕?,比如下面里?<foreach>,標簽內所有引號都為單引號。
@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 的語(yǔ)義相同,那么盡量用 ANY,這樣會(huì )更加效率。如:
@Select("SELECT * FROM user WHERE id = ANY(#{ids}::integer[])") public List<SubOrderPO> getUserList(@Param(value = "ids") Integer[] ids);
【7】LIKE 關(guān)鍵字查詢(xún)
@Select("SELECT * FROM user WHERE name LIKE concat('%', #{name}, '%') ") public List<User> getUserList(@Param(value = "name") String name);
【8】時(shí)間查詢(xún)
(8.1)Date 類(lèi)型:直接傳入進(jìn)行比較
@Select("SELECT * FROM user WHERE create_time > #{createTime}") public List<User> test(@Param(value = "createTime") Date createTime);
(8.2)String 類(lèi)型:需要將其轉化( 時(shí)間精度可以按自己需要裁取 )
: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 hh34:mi:ss')
Oracle : to_date( '2008-08-08 08:08:08' , 'yyyy-MM-dd HH24:mi:ss' )
如 Mysql 寫(xiě)法:
@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】高級查詢(xún)( 動(dòng)態(tài)SQL )
注意:【>】是大于(>)的轉義,【<】 是小于(<)的轉義
@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);
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站