zoukankan      html  css  js  c++  java
  • 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 可以混合使用。只要你愿意~~

  • 相关阅读:
    sizeof和strlen区别
    Reverse Words in a String
    删除字符串中重复的字符
    Reverse String
    数组中一个数字出现的次数超过了数组长度的一半,请找出这个数
    输出数组中大于等于左边所有数且小于等于右边所有数的元素
    java获取数据库里表的名字
    [转]C++编写Config类读取配置文件
    c# App.Config详解
    pitch yaw roll是什么
  • 原文地址:https://www.cnblogs.com/fengli9998/p/7382957.html
Copyright © 2011-2022 走看看