日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mybits注解详解

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mybits注解详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、mybatis 簡單注解
關鍵注解詞 :
@Insert : 插入sql , 和xml insert sql語法完全一樣
@Select : 查詢sql, 和xml select sql語法完全一樣
@Update : 更新sql, 和xml update sql語法完全一樣
@Delete : 刪除sql, 和xml delete sql語法完全一樣
@Param : 入參
@Results : 結果集合
@Result : 結果

1.bean領域模型

package cn.xm.exam.bean.common;import java.util.Date;import org.apache.struts2.json.annotations.JSON; /*** 查詢年齡大于55歲的人()* @author QiaoLiQiang* @time 2018年1月25日下午4:03:02*/ public class Message {private String messageid;private String name;private String idcode;private String sex;private Date birthday;private String emptype;private String isdispose;public String getMessageid() {return messageid;}public void setMessageid(String messageid) {this.messageid = messageid == null ? null : messageid.trim();}public String getName() {return name;}public void setName(String name) {this.name = name == null ? null : name.trim();}public String getIdcode() {return idcode;}public void setIdcode(String idcode) {this.idcode = idcode == null ? null : idcode.trim();}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex == null ? null : sex.trim();}@JSON(format="yyyy-MM-dd")public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getEmptype() {return emptype;}public void setEmptype(String emptype) {this.emptype = emptype == null ? null : emptype.trim();}public String getIsdispose() {return isdispose;}public void setIsdispose(String isdispose) {this.isdispose = isdispose == null ? null : isdispose.trim();}@Overridepublic String toString() {return "Message [messageid=" + messageid + ", name=" + name + ", idcode=" + idcode + ", sex=" + sex+ ", birthday=" + birthday + ", emptype=" + emptype + ", isdispose=" + isdispose + "]";}}

2.Mapper接口定義:

MessageCustomMapper.java(最后五個方法注解實現)

package cn.xm.exam.mapper.common.custom;import java.sql.SQLException; import java.util.List; import java.util.Map;import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update;import cn.xm.exam.bean.common.Message;/*** 消息mapper(查詢內部外部年齡超過55的人)* * @author QiaoLiQiang* @time 2018年1月25日下午4:07:45*/ public interface MessageCustomMapper {/*** 根據員工類型查詢超過55歲的人* * @return* @param empType:員工類型:0短委,1內部* @throws SQLException*/public List<Message> getMessageByEmptype(String empType) throws SQLException;/*** 修改消息的狀態(設置為已讀 1)* * @param messageId* 消息ID* @return* @throws SQLException*/public int updateMessageStatusByMessageId(String messageId) throws SQLException;/*** 測試注解使用Mybatis*/@Insert(" insert into message values (#{messageid,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{idcode,jdbcType=CHAR}, #{sex,jdbcType=VARCHAR}, #{birthday,jdbcType=DATE}, #{emptype,jdbcType=VARCHAR},#{isdispose,jdbcType=VARCHAR})")public int insertIntoByAnnotation(Message message) throws SQLException;@Select("select * from message where messageid = #{messageId}")public Message getMessageById(@Param("messageId")String messageId)throws SQLException;@Update("update message set name=#{name} where messageid=#{messageid}")public int updateMessageById(Message message)throws SQLException;@Select("select * from message where messageid = #{messageId}")public Map getMessageMapById(@Param("messageId")String messageId)throws SQLException;@Delete("delete from message where messageid = #{messageId}")public int deleteByMessageId(@Param("messageId")String messageid)throws SQLException;}

MessageCustomMapper.xml(只實現部分方法)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.xm.exam.mapper.common.custom.MessageCustomMapper"><!-- 查詢未讀的消息,每次顯示6條 --><select id="getMessageByEmptype" parameterType="string"resultType="cn.xm.exam.bean.common.Message">select * from message where empType=#{value} and isDispose='0' limit 0,6</select><!-- 根據ID設置消息狀態 --><update id="updateMessageStatusByMessageId">update message set isDispose='1' where messageid = #{value}</update> </mapper>

3.測試如下:

package cn.xm.exam.test.daoTest;import java.sql.SQLException; import java.util.Map;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import cn.xm.exam.bean.common.Message; import cn.xm.exam.mapper.common.custom.MessageCustomMapper;/*** mybatis注解測試* * @author QiaoLiQiang* @time 2018年3月10日下午3:47:40*/ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring/application*") public class MybatisAnnotationTest {@Autowiredprivate MessageCustomMapper messageCustomMapper;@Testpublic void testAdd() throws SQLException{Message message = new Message();message.setSex("1");message.setMessageid("001");message.setName("張三");int result = messageCustomMapper.insertIntoByAnnotation(message);System.out.println(result);}@Testpublic void testSelect() throws SQLException{Message result = messageCustomMapper.getMessageById("001");System.out.println(result);}@Testpublic void testUpdate() throws SQLException{Message message = new Message();message.setSex("2");message.setMessageid("001");message.setName("李四");int result = messageCustomMapper.updateMessageById(message);System.out.println(result);}@Testpublic void testSelectMap() throws SQLException{Map result = messageCustomMapper.getMessageMapById("001");System.out.println(result);}@Testpublic void testDelete() throws SQLException{int result = messageCustomMapper.deleteByMessageId("001");System.out.println(result);} }

結果:

(1)testAdd方法:

(2)testSelect方法:

(3)testUpdate方法:

(4)testSelectMap方法:(測試返回類型是Map)

{sex=1, name=李四, messageid=001}

(5)testDelete方法:

1

二、動態SQL

對應關系如下

@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider

四個provider注解標識 使用了動態SQL, 使用語法格式 :

@UpdateProvider(type = UserProvider.class, method =

如何使用動態SQL:

public class UserProvider {/*** udpate* @param UserDO userDO* @return*/public String updateSQL(final UserDO userDO) {return new SQL() {{UPDATE("t_user");SET("gmt_modified = now()");if (userDO.getUserName() != null) {SET("user_name = #{userName}");}WHERE("id = #{id}}");}}.toString();} }

由此可見動態SQL還是用XML寫SQL語句比較方便

本文提到的知識點比較基礎, 如需深入了解見官網文檔or看下源碼。

總結:
  1、xml 和 注解 如何選擇 ? 因人而異, 每個人的擼碼各有各的習慣, xml 、注解各有優缺點, xml的缺點 : 當模型屬性有變更時, 需要從DO改到DAO改到xml, 想想就蛋疼了~ xml也有優點 , SQL片段復用方便, 語法平易近人, 不像注解, 構造個動態語句, 還得建個類, 而且當你需要構造一段SQL被多處引用時, annotation 顯得無能為力了~重復寫相同的SQL片段, 代碼就顯得冗余了, 這時必須借助 xml來抽取共同使用。吐槽了下mybatis注解, 那注解豈不是毫無用處? no , mybatis 適合模型屬性經常變更的場景, 因為可以結合反射, 正則匹配動態構造SQL(純粹瞎歪歪, 個人想法, 應該可以實現, 改天擼一發)。可以說, mybatis的注解 優點 很好彌補了 xml缺點。兩者互補~

總結

以上是生活随笔為你收集整理的mybits注解详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。