mybatis 注解快速上手


一、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被多處引用時, annotation 顯得無能為力了~重復寫相同的SQL片段, 代碼就顯得冗余了, 這時必須借助 xml來抽取共同使用。吐槽了下mybatis注解, 那注解豈不是毫無用處? no , mybatis 適合模型屬性經常變更的場景, 因為可以結合反射, 正則匹配動態構造SQL(純粹瞎歪歪, 個人想法, 應該可以實現, 改天擼一發)。可以說, mybatis的注解 優點 很好彌補了 xml缺點。兩者互補~

  2、古人語 : 熊和魚掌不可得兼 ~ 而mybatis注解 和 xml 可以混合使用。只要你願意~~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM