zoukankan      html  css  js  c++  java
  • Java_Mybatis_注解代理写法

    Mybatis的开发方式其实有3种:

    1. 原始Dao开发(就是把mapper接口、映射文件和实现类都一并开发)

    2. xml代理(就是只实现mapper接口和映射文件)

    3.注解代理(就是只实现mapper接口,把映射文件的内容通过注解来写)


    注解开发也分3种:

    1.静态SQL

    2.动态SQL

    3.多表关联

    主要注解有:

    静态:

    @Insert:相当于<insert>标签,实现新增

    @Update: 相当于<update>标签,实现更新

    @Delete: 相当于<delete>标签,实现删除

    @Select: 相当于<select>标签,实现查询

    @SelectKey:相当于<selectKey>标签,实现主键返回

    动态:

    @InsertProvider: 相当于<insert>标签,实现新增

    @UpdateProvider: 相当于<update>标签,实现更新

    @DeleteProvider: 相当于<delete>标签,实现删除

    @SelectProvider: 相当于<select>标签,实现查询

    多表关联:

    @Results: 相当于<resultMap>标签,需要和@Result注解一起使用。

    @Result: 相当于<result>和<id>标签,实现结果集中某一列的数据映射

    * column 数据库的列名

    * property 需要装配的属性名

    * one 需要使用的@One 注解(@Result(one=@One()))

    * many 需要使用的@Many 注解(@Result(many=@many()))

    @One: 相当于<association>标签,实现一对一关系映射

    @Many:相当于<collection>标签,实现一对多关系映射

    @One和@Many注解的属性:

    * select 属性:代表将要执行的 sql 语句

    * fetchType 属性:代表加载方式,一般如果要延迟加载都设置为 LAZY 的值

    使用格式:
    1.@Results({@Result(),@Result()})或@Results(@Result())
    2.@Result(column=" ",property="",one=@One(select=""))

    具体例子:

    public interface AnnotationUserMapper {
        // 查询
        @Select("SELECT * FROM user WHERE id = #{id}")
        public User findUserById(int id);
    
        // 模糊查询用户列表
        @Select("SELECT * FROM user WHERE username LIKE '%${value}%'")
        public List<User> findUserList(String username);
    
        // 添加并实现主键返回
        @Insert("INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})")
        @SelectKey(before=false,statement="SELECT LAST_INSERT_ID()",keyProperty="id",resultType=int.class)
        public void insertUser(User user);
    
        // 动态SQL
        @SelectProvider(type=UserSqlBuilder.class,method="getDynamicSQL")
        public List<User> dynamicSQL(UserQueryVO vo);
        
        // 使用Results注解完成结果映射
        @Results({
            @Result(column="id",property="id"),
            @Result(column="username",property="username"),
            @Result(column="sex",property="sex"),
            @Result(column="address",property="address")
        })
        @Select("SELECT * FROM user WHERE id = #{id}")
        public User findUserByIdWithResultMap(int id);

    // 演示延迟加载 @Results({ @Result(column="id",property="id"), @Result(column="user_id",property="user_id"), @Result(column="number",property="number"), @Result(column="note",property="note"), @Result(property="user",javaType=User.class,column="user_id",
              one=@One(select="com.kkb.mybatis.anno.AnnotationUserMapper.findUserById",fetchType=FetchType.LAZY)) }) @Select("SELECT * FROM orders") public List<OrdersExt> lazyLoading(); class UserSqlBuilder { public String getDynamicSQL(final UserQueryVO vo) { return new SQL() { { SELECT("*"); FROM("user"); User user = vo.getUser(); if (user != null) { if(user.getUsername() != null && !user.equals("")) { WHERE("username like '%"+user.getUsername()+"%'"); } } ORDER_BY("id"); } }.toString(); } } }
  • 相关阅读:
    利用Python进行数据分析-Pandas(第六部分-数据聚合与分组运算)
    利用Python进行数据分析-Pandas(第五部分-数据规整:聚合、合并和重塑)
    利用Python进行数据分析-Pandas(第四部分-数据清洗和准备)
    使用VBA从工作表中读图片,以及给工作表中写文件
    利用Python进行数据分析-Pandas(第三部分)
    利用Python进行数据分析-Pandas(第二部分)
    Shape.Type属性名称及对应值列表
    利用Python进行数据分析-Pandas(第一部分)
    下载文件
    github访问很慢的解决办法
  • 原文地址:https://www.cnblogs.com/amiezhang/p/9632711.html
Copyright © 2011-2022 走看看