快速普及
1、mybatis是什麼
mybatis是一個支援普通SQL查詢,預存程序和進階映射的優秀持久層架構。
MyBatis消除了幾乎所有的JDBC代碼和參數的手工設定以及對結果集的檢索封裝。MyBatis可以使用簡單的XML或註解用於配置和原始映射,將介面和Java的POJO(Plain Old Java Objects,普通的Java對象)映射成資料庫中的記錄。
Mybatis實現了介面綁定,使用更加方便。
對象關係映射的改進,效率更高
MyBatis採用功能強大的基於OGNL的運算式來消除其他元素。
2、功能架構
3、執行流程
原理詳解:
MyBatis應用程式根據XML設定檔建立SqlSessionFactory,SqlSessionFactory在根據配置,配置來源於兩個地方,一處是設定檔,一處是Java代碼的註解,擷取一個SqlSession。SqlSession包含了執行sql所需要的所有方法,可以通過SqlSession執行個體直接運行映射的sql語句,完成對資料的增刪改查和事務提交等,用完之後關閉SqlSession。
下面看下本文介紹重點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、領域模型 :
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" /> <!--這裡只需要配置你自己的資料來源即可--></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, 是不是覺得很簡單 ~~
如果熟悉mybatis xml的話, 大多數情況下, 我們需要將資料庫表的欄位名 與 class DO 映射起來。mybatis註解也提供了映射的功能, 文法大同小異。
@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);
當然, 上述只是再不能簡單的sql了。想想如果我們有這種需求, 更新使用者資訊, 希望能更新指定的屬性值, 換而言之, 像xml 一樣動態產生SQL 。 那我們就不能簡單粗暴使用 @update 註解 。好在 強大的mybatis 也提供了動態SQL的組裝。
動態SQL
對應關係如下
@Insert :@InsertProvider
@Select :@SelectProvider
@Update :@UpdateProvider
@Delete :@DeleteProvider
四個provider註解標識 使用了動態SQL, 使用文法格式 :
@UpdateProvider(type = UserProvider.class, method = "updateSQL")
如何構造動態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();}}
本文提到的知識點比較基礎, 如需深入瞭解見官網文檔or看下源碼。
總結 :
1、xml 和 註解 如何選擇 ? 因人而異, 每個人的擼碼各有各的習慣, xml 、註解各有優缺點, xml的缺點 : 當模型屬性有變更時, 需要從DO改到DAO改到xml, 想想就蛋疼了~ xml也有優點 , SQL片段複用方便, 文法平易近人, 不像註解, 構造個動態語句, 還得建個類, 而且當一段SQL被多處引用時, 代碼就顯得冗餘了, 這時必須藉助 xml來抽取共同使用。吐槽了下mybatis註解, 那註解豈不是毫無用處。 no , mybatis 適合模型屬性經常變更的情境, 因為可以結合反射, 正則匹配動態構造SQL(純粹瞎歪歪, 個人想法, 應該可以實現, 改天擼一發)。可以說, mybatis的註解 優點 很好彌補了 xml缺點。兩者互補~
以上所述是小編給大家介紹的Mybatis 開發註解快速入門,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!