快速普及
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)域模型 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
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、接口定義 :
1
2
3
4
5
6
7
8
9
10
|
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:
1
2
3
4
5
6
7
8
|
<!-- 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ǔ)法大同小異。
1
2
3
|
@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ǔ)法格式 :
1
|
@UpdateProvider (type = UserProvider. class , method = "updateSQL" ) |
如何構(gòu)造動(dòng)態(tài)SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
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ā))。可以說, mybatis的注解 優(yōu)點(diǎn) 很好彌補(bǔ)了 xml缺點(diǎn)。兩者互補(bǔ)~
以上所述是小編給大家介紹的Mybatis 開發(fā)注解快速入門,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/chenmo-xpw/p/6099951.html