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(); } } }
  • 相关阅读:
    总结PHP缓存技术的多种方法
    超赞的Linux软件分享(持续更新)
    Android与IOS的优缺点比较 对 Android 与 IOS 比较是个个人的问题。 就好比我来说,我两个都用。我深知这两个平台的优缺点。所以,我决定分享我关于这两个移动平台的观点。另外,然后谈谈我对新的 Ubuntu 移动平台的印象和它的优势。 IOS 的优点 虽然这些天我是个十足的 Android 用户,但我必须承认 IOS 在某些方面做的是不错。首先,苹果公司在他们的设备更新方面有更
    简单说说JavaBean的使用
    mysql 压缩版安装
    分布式网站部署
    shiro启用注解方式
    ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务解决
    windows 下设置nginx负载均衡
    windows mysql 主从热备
  • 原文地址:https://www.cnblogs.com/amiezhang/p/9632711.html
Copyright © 2011-2022 走看看