mybatis(五): SQL 注解版

时间:2025-03-17 08:05:37

用法

@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;
    }

}