mybatis(五): SQL 注解版

Mybatis 注解

  1. mybatis 注解在mybatis jar包中的E:org.apache.ibatis.annotations包中,所有注解类如下所示。

在这里插入图片描述

  1. 常用注解

    @Select用于查询sql。属性为String[]。@Select({"","")
    @Insert用于插入sql。属性为String[]。
    @Update用于修改sql。属性为String[]。
    @Delete用于删除sql。属性为String[]。
    @Results多个结果映射Result合集。参数为id和Result[]。
    @Result单个结果映射。属性有:id、column、property、javaType、jdbcType、type Handler、one、many。id属性是一个布尔值,表示是否用于主键映射。column数据库字段。property是Bean属性。javaTypeBean属性类型。jdbcType数据库字段属性。typeHandler类型处理器。 one 属性一对一,和xml配置中的相似。many属性是多对多,和XML配置的相似
    @ResultMap结果集映射。引入其他Results结果映射。
    @ResultType结果集映射。
    @Param输入参数设置。
    @Options设置参数项,主要用于update、insert中
    @One一对一(后续讲解)
    @Many多对多(后续讲解)
    @SelectProviderselect的动态查询。
    @InsertProviderinsert的动态插入
    @UpdateProviderupdate的动态修改
    @DeleteProviderdelete的动态删除
  2. 用法

    @Select

    注解只有一个String[]数组。如果数组中有多个值,会将多个值拼接成一个String。

    @Select(value = {"select id,name,password,age from tb_users"})
    List<User> getAllUser();
    
    @Select({"select id,name,password,age from tb_users","where id=2"})
    List<User> getUserByUserid();
    
    DEBUG [main] - ==>  Preparing: select id,name,password,age from tb_users 
    
    DEBUG [main] - ==>  Preparing: select id,name,password,age from tb_users where id=2 
    
    @Results和@Result

    ​ Results中可以包含多个Result注解。其中每个Result注解设置javaBean对象和数据库表映射关系。

    @Select({"select id,name,password,age from tb_users","where id=2"})
    @Results({
        @Result(id = true, property = "id", column = "id"),
        @Result(property = "name", column = "name"),
        @Result(property = "password", column = "password"),
        @Result(property = "age", column = "age")
        })
    List<User> getUserByUserid();
    
    @ResultMap

    ResultMap属性是String[],如下实例中,getUser3方法中的@ResultMap({“results”})引用getUserByUserid方法中的Results结果集

    @Select({"select id,user_name,password,age from tb_users2","where id=2"})
    @Results(id="results",value = {
        @Result(id = true, property = "id", column = "id"),
        @Result(property = "name", column = "user_name"),
        @Result(property = "password", column = "password"),
        @Result(property = "age", column = "age")
        })
    List<User> getUserByUserid();
    
    @Select(value = {"select id,user_name,password,age from tb_users2"})
    @ResultMap({"results"})
    List<User> getUser3();
    
    @ResultType

    ResultType属性为返回值的javaBean对象。与@ResultMap不可以同时使用

    @Select(value = {"select id,user_name,password,age from tb_users2"}) @ResultType(User.class)
    List<User> getUser4();
    
    @Param

    param设置参数值名称。@Param(“name”)和#{name}一致

    @Select("select id,user_name,password,age from tb_users2 where id = #{id} and user_name = #{name} ")
    User getUser5(@Param("id") Long id,@Param("name") String username);
    
    @Insert

    insert属性为string[]。如果数组中有多个值,会将多个值拼接成一个String。可以批量插入。

    @Insert("INSERT INTO tb_users2 (user_name, PASSWORD, age)VALUES(#{name},#{password},#{age})")
    int InsertUser(User user);
    
    @Insert({"INSERT INTO tb_users2 (user_name, PASSWORD, age)VALUES","(#{name},#{password},#{age})"})
    int InsertUser2(User user);
    
    @Options

    设置参数项,主要用于update、insert中。可以操作返回主键值

    useGeneratedKeyskeyPropertykeyColumn`使用(使用的是mysql数据库,支持自增)

    @Insert("INSERT INTO tb_users2 (user_name, PASSWORD, age)VALUES(#{name},#{password},#{age})")
    @Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
    int InsertUser3(User user);
    
    @SelectKey

    返回非自增主键。

    keyProperty指定主键属性名,before属性值true|false。resultType 返回值类型。statement属性写sql语句。statementType设置statement类型,默认是PREPARED的。可设置值有PREPARED|STATEMENT|CALLABLE

    @Insert("INSERT INTO tb_users2 (user_name, PASSWORD, age)VALUES(#{name},#{password},#{age})")
    @SelectKey(keyProperty = "id",before = false,resultType = Long.class,statement = "select LAST_INSERT_ID()",statementType = StatementType.PREPARED
        )
        int InsertUser4(User user);
    
    @SelectProvider、@InsertProvider、@UpdateProvider、@DeleteProvider

    与sql语句构造器类组合使用。

    type为构造器类。method为构造器类中的方法(注意:方法修饰符必须为public)。

    @SelectProvider(type= ProviderConfig.class,method = "getUser")
    List<User> getUserSelectProvider();
    
    /**
    	sql语句构造器类
     */
    public class ProviderConfig {  
    	/**
    	方法修饰符必须为public(和类反射的方法权限有关)	
    	方法返回值类型为String
    	*/
       public String getUser(){
            String sql = new SQL(){{
                SELECT("id,user_name,password,age");
                FROM("tb_users2");
            }}.toString();
            return sql;
        }
    
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值