Mybatis 注解
- mybatis 注解在mybatis jar包中的E:org.apache.ibatis.annotations包中,所有注解类如下所示。
-
常用注解
@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 多对多(后续讲解) @SelectProvider select的动态查询。 @InsertProvider insert的动态插入 @UpdateProvider update的动态修改 @DeleteProvider delete的动态删除 -
用法
@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中。可以操作返回主键值
useGeneratedKeys
、
keyProperty、
keyColumn`使用(使用的是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; } }