美文网首页
MyBatis 注解方式的基本用法

MyBatis 注解方式的基本用法

作者: 一世梦魇 | 来源:发表于2018-08-20 03:44 被阅读0次

    什么是MyBatis的注解方式

    MyBatis的注解方式就是将SQL语句直接写在接口上。在MyBatis注解SQL中,最基本的就是@Select、@Insert、@Update和@Delete四种。

    MyBatis注解方式的优缺点

    • 优点

      对于需求比较简单的系统,效率高。

    • 缺点

      当SQL有变化时都需要重新编译代码,一般情况下不建议使用注解方式

    基本注解

    @Select 注解

    @Results(id = "BaseResultMap", value = {
                @Result(property = "id", column = "id", id = true),
                @Result(property = "username", column = "username"),
                @Result(property = "password", column = "password"),
                @Result(property = "nickname", column = "nickname"),
                @Result(property = "phone", column = "phone"),
                @Result(property = "email", column = "email")
        })
    @Select({"select id, username, password, nickname, phone, email from `db_user` where id = #{key}"})
    User selectUserByPrimaryKey(Long key);
    
    • @Select 注解

      查询相关的SQL写在@Select注解中,花括号里面的内容可以是字符串也可以是字符串数组。

    • @Results、@Result 注解

      @Results和@Result注解是结合起来用的,@Result注解包含在@Results注解的value属性中。

      • @Results 注解

        @Results 注解有两个属性,分别是idvalue。其中id属性对应的是XML配置中resultMap标签的id属性,这样只要在接口中写一次就可以公用一个resultMap了。而value属性对应的是XML配置中resultMap标签下的<id><result>标签,<id>标签用id=true属性来确定。

      • @Result 注解

        @Result 注解常用属性idcolumnpropertyid属性是用来确定是否是id的,布尔类型。column属性是对应数据库字段的,字符串类型。property属性是对应JavaBean对象属性的,字符串类型。

    @ResultMap("BaseResultMap")
    @Select({"select id, username, password, nickname, phone, email from `db_user`"})
    List<User> selectAllUser();
    
    • @ResultMap 注解

      @ResultMap 注解就一个作用,使用已经定义好的@Results或XML配置里已经写好的resultMap。里面的value属性即是@Results的id属性值或XML里resultMap的id属性值。

    @Insert 注解

    @Insert({"insert into `db_user`(username, password, nickname, phone, email) values (#{username}, #{password}, #{nickname}, #{phone}, #{email})"})
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int insertUser(User user);
    
    • @Insert 注解

      添加相关的SQL写在@Insert注解中,花括号里面的内容可以是字符串也可以是字符串数组。

    • @Options 注解

      当添加操作需要返回自增主键时可以使用@Options注释。添加属性useGeneratedKeys = truekeyProperty = "id"即可在数据添加后获取添加数据的ID值。

    @Delete 注解

    @Delete({"delete from `db_user` where id = #{key}"})
    int deleteUserByPrimaryKey(Long key);
    

    删除相关的SQL写在@Delete注解中,花括号里面的内容可以是字符串也可以是字符串数组。

    @Update 注解

    @Update({"update `db_user` set nickname = #{nickname} where id = #{id}"})
    int updateUserByPrimaryKey(User user);
    

    修改相关的SQL写在@Update注解中,花括号里面的内容可以是字符串也可以是字符串数组。

    Provider 注解

    首先创建UserMapper接口,定义接口方法。然后创建UserProvider类,在UserProvider类中定义与接口中方法对应的返回SQL语句的方法。

    Provider的注解中提供了两个必填的属性typemethodtype配置的是一个包含method属性指定方法的类,这个类必须有空的构造方法,这个方法的值就是要执行的SQL语句,并且method属性指定的方法的返回值必须是String类型。

    @InsertProvider

    • UserProvider类中的方法
    public String insertUser(User user) {
        return new SQL(){
            {
                INSERT_INTO("`db_user`");
                INTO_COLUMNS("username, password, nickname, phone, email");
                INTO_VALUES("#{username}, #{password}, #{nickname}, #{phone}, #{email}");
            }
        }.toString();
    }
    
    • UserMapper接口中的方法
    @InsertProvider(type = UserProvider.class, method = "insertUser")
    @Options(useGeneratedKeys = true)
    int insertUser(User user);
    

    @DeleteProvider

    • UserProvider类中的方法
    public String deleteUserByPrimaryKey(Long key) {
        return new SQL(){
            {
                DELETE_FROM("`db_user`");
                WHERE("id = #{key}");
            }
        }.toString();
    }
    
    • UserMapper接口中的方法
    @DeleteProvider(type = UserProvider.class, method = "deleteUserByPrimaryKey")
    int deleteUserByPrimaryKey(Long key);
    

    @UpdateProvider

    • UserProvider类中的方法
    public String updateUserByPrimaryKey(User user) {
        return new SQL(){
            {
                UPDATE("`db_user`");
                SET("nickname = #{nickname}","username = #{username}","password = #{password}");
                WHERE("id = #{id}");
            }
        }.toString();
    }
    
    • UserMapper接口中的方法
    @UpdateProvider(type = UserProvider.class, method = "updateUserByPrimaryKey")
    int updateUserByPrimaryKey(User user);
    

    @SelectProvider

    • UserProvider类中的方法(这里顺带展示了2中返回SQL的方法)
    public String selectUserByPrimaryKey(Long key) {
        return new SQL(){
            {
                SELECT("id, username, password, nickname, phone, email");
                FROM("`db_user`");
                WHERE("id = #{key}");
            }
        }.toString();
    }
    
    public String selectAllUser() {
        return "select id, username, password, nickname, phone, email from `db_user`";
    }
    
    • UserMapper接口中的方法
    @Results(id = "BaseResultMap", value = {
            @Result(property = "id", column = "id", id = true),
            @Result(property = "username", column = "username"),
            @Result(property = "password", column = "password"),
            @Result(property = "nickname", column = "nickname"),
            @Result(property = "phone", column = "phone"),
            @Result(property = "email", column = "email")
    })
    @SelectProvider(type = UserProvider.class, method = "selectUserByPrimaryKey")
    User selectUserByPrimaryKey(Long key);
    
    @SelectProvider(type = UserProvider.class, method = "selectAllUser")
    @ResultMap("BaseResultMap")
    List<User> selectAllUser();
    

    参考资料:MyBatis 从入门到精通 作者:刘增辉

    相关文章

      网友评论

          本文标题:MyBatis 注解方式的基本用法

          本文链接:https://www.haomeiwen.com/subject/kpaqvftx.html