最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis 開發(fā)注解快速入門

 更新時(shí)間:2016年11月25日 08:42:50   作者:堅(jiān)守一輩子的幸福  
mybatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架。這篇文章主要介紹了Mybatis 開發(fā)注解快速入門的相關(guān)資料,需要的朋友可以參考下

快速普及

1、mybatis是什么

      mybatis是一個(gè)支持普通SQL查詢,存儲(chǔ)過程和高級(jí)映射的優(yōu)秀持久層框架。

      MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及對(duì)結(jié)果集的檢索封裝。MyBatis可以使用簡(jiǎn)單的XML或注解用于配置和原始映射,將接口和Java的POJO(Plain Old Java Objects,普通的Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。
Mybatis實(shí)現(xiàn)了接口綁定,使用更加方便。

對(duì)象關(guān)系映射的改進(jìn),效率更高

MyBatis采用功能強(qiáng)大的基于OGNL的表達(dá)式來(lái)消除其他元素。

2、功能架構(gòu)

這里寫圖片描述

3、執(zhí)行流程

這里寫圖片描述

原理詳解:

       MyBatis應(yīng)用程序根據(jù)XML配置文件創(chuàng)建SqlSessionFactory,SqlSessionFactory在根據(jù)配置,配置來(lái)源于兩個(gè)地方,一處是配置文件,一處是Java代碼的注解,獲取一個(gè)SqlSession。SqlSession包含了執(zhí)行sql所需要的所有方法,可以通過SqlSession實(shí)例直接運(yùn)行映射的sql語(yǔ)句,完成對(duì)數(shù)據(jù)的增刪改查和事務(wù)提交等,用完之后關(guān)閉SqlSession。

下面看下本文介紹重點(diǎn)mybatis 簡(jiǎn)單注解

關(guān)鍵注解詞 :

@Insert : 插入sql , 和xml insert sql語(yǔ)法完全一樣

@Select : 查詢sql, 和xml select sql語(yǔ)法完全一樣

@Update : 更新sql, 和xml update sql語(yǔ)法完全一樣

@Delete : 刪除sql, 和xml delete sql語(yǔ)法完全一樣

@Param : 入?yún)?/p>

@Results : 結(jié)果集合

@Result : 結(jié)果

1、領(lǐng)域模型 :

public class UserDO {
private Long id;
private String userName;
private Date gmtCreate;
private Date gmtModified;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Date getGmtCreate() {
return gmtCreate;
}
public void setGmtCreate(Date gmtCreate) {
this.gmtCreate = gmtCreate;
}
public Date getGmtModified() {
return gmtModified;
}
public void setGmtModified(Date gmtModified) {
this.gmtModified = gmtModified;
}
}

2、接口定義 :

public interface UserDAO {
@Insert("INSERT INTO t_user(gmt_create, gmt_modified, user_name) values(now(), now(), #{userName})")
public int insert(@Param("userName") String userName);
  @Select("SELECT * FROM t_user WHERE id = #{id}")
public UserDO selectByUserId(@Param("id") Long id) ;
@Update("UPDATE t_user SET gmt_modified = now(), user_name = #{userName} WHERE id = #{id}")
public int udpateById(@Param("userName") String userName, @Param("id") Long id) ;
@Delete("DELETE FROM t_user WHERE id = #{id}")
public int udpateById(@Param("id") Long id) ;  
}

3、mybatis xml config:

<!-- mybatis 注解 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="mysqlBASE" /> <!--這里只需要配置你自己的數(shù)據(jù)源即可-->
</bean> 
  <bean id="userDAO" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.yuanmeng.userDAO" /> <!--mybatis接口-->
     <property name="sqlSessionFactory" ref="sqlSessionFactory" /> <!--sqlSession工廠-->
  </bean>

這樣,我們就完成了mybatis 使用注解的demo, 是不是覺得很簡(jiǎn)單 ~~

如果熟悉mybatis xml的話, 大多數(shù)情況下, 我們需要將數(shù)據(jù)庫(kù)表的字段名 與 class DO 映射起來(lái)。mybatis注解也提供了映射的功能, 語(yǔ)法大同小異。

@Select("SELECT * FROM tsp_template WHERE id = #{id}")
@Results(value = { @Result(property = "userName", column = "user_name", javaType = String.class, jdbcType = JdbcType.VARCHAR) }) 
public UserDO selectById(@Param("id") Long id);

當(dāng)然, 上述只是再不能簡(jiǎn)單的sql了。想想如果我們有這種需求, 更新用戶信息, 希望能更新指定的屬性值, 換而言之, 像xml 一樣動(dòng)態(tài)生成SQL 。 那我們就不能簡(jiǎn)單粗暴使用 @update 注解 。好在 強(qiáng)大的mybatis 也提供了動(dòng)態(tài)SQL的組裝。

動(dòng)態(tài)SQL

 對(duì)應(yīng)關(guān)系如下

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

四個(gè)provider注解標(biāo)識(shí) 使用了動(dòng)態(tài)SQL, 使用語(yǔ)法格式 :

@UpdateProvider(type = UserProvider.class, method = "updateSQL")

如何構(gòu)造動(dòng)態(tài)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();
}
}

本文提到的知識(shí)點(diǎn)比較基礎(chǔ), 如需深入了解見官網(wǎng)文檔or看下源碼。

總結(jié) :

  1、xml 和 注解 如何選擇 ? 因人而異, 每個(gè)人的擼碼各有各的習(xí)慣, xml 、注解各有優(yōu)缺點(diǎn), xml的缺點(diǎn) : 當(dāng)模型屬性有變更時(shí), 需要從DO改到DAO改到xml, 想想就蛋疼了~ xml也有優(yōu)點(diǎn) , SQL片段復(fù)用方便, 語(yǔ)法平易近人, 不像注解, 構(gòu)造個(gè)動(dòng)態(tài)語(yǔ)句, 還得建個(gè)類, 而且當(dāng)一段SQL被多處引用時(shí), 代碼就顯得冗余了, 這時(shí)必須借助 xml來(lái)抽取共同使用。吐槽了下mybatis注解, 那注解豈不是毫無(wú)用處。 no , mybatis 適合模型屬性經(jīng)常變更的場(chǎng)景, 因?yàn)榭梢越Y(jié)合反射, 正則匹配動(dòng)態(tài)構(gòu)造SQL(純粹瞎歪歪, 個(gè)人想法, 應(yīng)該可以實(shí)現(xiàn), 改天擼一發(fā))。可以說(shuō), mybatis的注解 優(yōu)點(diǎn) 很好彌補(bǔ)了 xml缺點(diǎn)。兩者互補(bǔ)~

以上所述是小編給大家介紹的Mybatis 開發(fā)注解快速入門,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java的Spring?AOP詳細(xì)講解

    Java的Spring?AOP詳細(xì)講解

    章主要為大家詳細(xì)介紹了Java的Spring?AOP,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • Mybatis實(shí)現(xiàn)自定義的typehandler三步曲

    Mybatis實(shí)現(xiàn)自定義的typehandler三步曲

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)自定義的typehandler三步曲的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07
  • java實(shí)戰(zhàn)項(xiàng)目之記賬軟件

    java實(shí)戰(zhàn)項(xiàng)目之記賬軟件

    這篇文章主要介紹了java實(shí)戰(zhàn)項(xiàng)目之記賬軟件,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • Java字符串拼接新方法 StringJoiner用法詳解

    Java字符串拼接新方法 StringJoiner用法詳解

    在本篇文章中小編給大家分享的是一篇關(guān)于Java字符串拼接新方法 StringJoiner用法詳解,需要的讀者們可以參考下。
    2019-09-09
  • springBoot整合redis做緩存具體操作步驟

    springBoot整合redis做緩存具體操作步驟

    緩存主要是將數(shù)據(jù)存在計(jì)算機(jī)的內(nèi)存當(dāng)中,以便于在使用的時(shí)候是可以實(shí)現(xiàn)快速讀取使用,它的快也是相對(duì)于硬盤讀取而言,這篇文章主要給大家介紹了關(guān)于springBoot整合redis做緩存的具體操作步驟,需要的朋友可以參考下
    2024-04-04
  • MyBatis中SQL片段復(fù)用使用方法詳解

    MyBatis中SQL片段復(fù)用使用方法詳解

    在使用 MyBatis 進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),常常會(huì)遇到一些 SQL 語(yǔ)句的部分內(nèi)容重復(fù)出現(xiàn)的情況,比如多個(gè)查詢語(yǔ)句都涉及相同的字段列表,這時(shí),MyBatis 的 SQL 片段復(fù)用功能就派上用場(chǎng)了,接下小編給大家介紹了MyBatis中SQL片段復(fù)用使用方法,需要的朋友可以參考下
    2024-12-12
  • Java命名規(guī)則詳細(xì)總結(jié)

    Java命名規(guī)則詳細(xì)總結(jié)

    Class名應(yīng)是首字母大寫的名詞。命名時(shí)應(yīng)該使其簡(jiǎn)潔而又具有描述性。異常類的命名,應(yīng)以Exception結(jié)尾。Interface的命名規(guī)則與Class相同
    2013-10-10
  • java啟動(dòng)參數(shù)之謎的排查過程

    java啟動(dòng)參數(shù)之謎的排查過程

    在日常操作中,相信很多人對(duì)Java啟動(dòng)參數(shù)存在疑惑,下面這篇文章主要給大家介紹了關(guān)于java啟動(dòng)參數(shù)之謎的排查過程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • Java圓柱體表面積和體積計(jì)算代碼實(shí)例

    Java圓柱體表面積和體積計(jì)算代碼實(shí)例

    這篇文章主要介紹了Java圓柱體表面積和體積計(jì)算代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Maven離線模式打包全過程

    Maven離線模式打包全過程

    這篇文章主要介紹了Maven離線模式打包全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04

最新評(píng)論

广南县| 泸水县| 通州区| 禹城市| 安新县| 裕民县| 宁陵县| 新绛县| 广东省| 昭平县| 万源市| 甘孜| 阳朔县| 如皋市| 娄底市| 双桥区| 丘北县| 都兰县| 水富县| 隆回县| 浠水县| 霞浦县| 怀化市| 九江市| 漳州市| 林西县| 布尔津县| 抚顺市| 延长县| 唐河县| 桐城市| 白银市| 安平县| 永丰县| 尤溪县| 永吉县| 通山县| 余庆县| 建昌县| 中方县| 曲靖市|