MyBatis和MyBatis-Plus常用注解
MyBatis
MyBatis中涉及到的所有注解
(1)@Select
作用:标记查询语句。
@Select是MyBatis中的注解之一,用于标记查询语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Select注解时,需要在注解中指定SQL语句
试例:
@Select("SELECT * FROM users WHERE id = #{id}")User getUserById(@Param("id") Long id);
(2)@Insert
作用:标记插入语句。
@Insert是MyBatis中的注解之一,用于标记插入语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Insert注解时,需要在注解中指定SQL语句
试例:
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")int addUser(User user);
(3)@Update
作用:标记更新语句。
@Update是MyBatis中的注解之一,用于标记更新语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Update注解时,需要在注解中指定SQL语句,
试例:
@Update("UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id}")int updateUser(User user);
(4)@Delete
作用:标记删除语句。
@Delete是MyBatis中的注解之一,用于标记删除语句。该注解可以在接口方法上使用,也可以在XML文件中使用。使用@Delete注解时,需要在注解中指定SQL语句
试例:
@Delete("DELETE FROM users WHERE id = #{id}")int deleteUserById(@Param("id") Long id);
(5)@Results
作用:用于指定多个@Result注解。
@Results是MyBatis中的注解之一,用于标记结果集映射。该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@Results注解时,需要指定映射规则
试例:
@Select("SELECT * FROM users WHERE id = #{id}")@Results(id = "userResultMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), @Result(property = "age", column = "age")})User getUserById(@Param("id") Long id);
(6)@Result
作用:用于指定查询结果集的映射关系。
@Result是MyBatis中的注解之一,用于标记单个属性与结果集中的列之间的映射关系。该注解可以用于接口方法或XML文件中,通常与@Results注解一起使用。使用@Result注解时,需要指定映射规则
试例:
@Select("SELECT * FROM users WHERE id = #{id}")@Results(id = "userResultMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), @Result(property = "age", column = "age")})User getUserById(@Param("id") Long id);
(7)@ResultMap
作用:用于指定查询结果集的映射关系。
@ResultMap是MyBatis中的注解之一,用于标记结果集映射规则。该注解可以用于接口方法或XML文件中,通常与@Select注解一起使用。使用@ResultMap注解时,需要指定映射规则
试例:
@Select("SELECT * FROM users WHERE id = #{id}")@ResultMap("userResultMap")User getUserById(@Param("id") Long id);
(8)@Options
作用:用于指定插入语句的选项。
@Options是MyBatis中的注解之一,用于指定一些可选的配置项。该注解可以用于接口方法或XML文件中,通常与@Insert、@Update、@Delete等注解一起使用。使用@Options注解时,可以指定一些可选的配置项
试例:
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")@Options(useGeneratedKeys = true, keyProperty = "id")int insertUser(User user);
(9)@SelectKey
作用:用于指定查询语句的主键生成方式。
@SelectKey是MyBatis中的注解之一,用于在执行INSERT语句后获取自动生成的主键值。该注解可以用于接口方法或XML文件中,通常与@Insert注解一起使用。使用@SelectKey注解时,需要指定生成主键的SQL语句和将主键值赋给Java对象的哪个属性
试例:
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")@SelectKey(statement = "SELECT LAST_INSERT_ID()", keyProperty = "id", before = false, resultType = Long.class)int insertUser(User user);
(10)@Param
作用:用于指定方法参数名称。
@Param是MyBatis中的注解之一,用于为SQL语句中的参数指定参数名称。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@Param注解时,需要指定参数名称
试例:
@Select("SELECT * FROM users WHERE name = #{name} AND age = #{age}")List getUsersByNameAndAge(@Param("name") String name, @Param("age") Integer age);
(11)@One
作用:用于指定一对一关联关系。
@One是MyBatis中的注解之一,用于在一对一关联查询中指定查询结果的映射方式。该注解可以用于XML文件中,通常与和标签一起使用。使用@One注解时,需要指定查询结果映射的Java对象类型和查询结果映射的属性
试例:
上述代码中,@One注解用于指定查询结果的映射方式,这里使用了嵌套的标签实现了一对一关联查询。在departmentResultMap中,使用@One注解指定了查询结果映射的Java对象类型为User,查询结果映射的属性为manager,resultMap参数指定了查询结果映射的结果集映射规则为userResultMap。除了使用@One注解之外,还可以使用@Many注解来指定一对多关联查询的映射方式。总之,@One注解是MyBatis中用于在一对一关联查询中指定查询结果的映射方式的注解之一,可以方便地实现一对一关联查询的结果映射。
(12)@Many
作用:用于指定一对多关联关系。
@Many是MyBatis中的注解之一,用于在一对多关联查询中指定查询结果的映射方式。该注解可以用于XML文件中,通常与和标签一起使用。使用@Many注解时,需要指定查询结果映射的Java对象类型和查询结果映射的属性
试例:
上述代码中,@Many注解用于指定查询结果的映射方式,这里使用了嵌套的标签实现了一对多关联查询。在departmentResultMap中,使用@Many注解指定了查询结果映射的Java对象类型为User,查询结果映射的属性为members,ofType参数指定了集合中元素的类型为User,resultMap参数指定了查询结果映射的结果集映射规则为userResultMap。除了使用@Many注解之外,还可以使用@One注解来指定一对一关联查询的映射方式。总之,@Many注解是MyBatis中用于在一对多关联查询中指定查询结果的映射方式的注解之一,可以方便地实现一对多关联查询的结果映射。
(13)@ResultType
作用:用于指定查询结果集的类型。
@ResultType是MyBatis中的注解之一,用于指定查询结果的类型。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@ResultType注解时,需要指定查询结果的类型
试例:
@Select("SELECT name, age FROM users WHERE id = #{id}")@ResultType(User.class)User getUserById(Long id);
(14)@TypeDiscriminator
作用:用于指定类型鉴别器,用于根据查询结果集的不同类型映射到不同的Java对象。
@TypeDiscriminator是MyBatis中的注解之一,用于在自动映射时指定不同子类型的映射方式。该注解可以用于XML文件中,通常与和标签一起使用。使用@TypeDiscriminator注解时,需要指定类型列的名称和不同子类型的映射方式
试例:
上述代码中,@TypeDiscriminator注解用于指定不同子类型的映射方式。在vehicleResultMap中,使用@TypeDiscriminator注解指定了类型列的名称为type,javaType参数指定了类型列的Java类型为String,标签中的value属性分别对应不同的子类型(car、truck、bus),resultMap属性用于指定不同子类型的结果集映射规则。除了使用@TypeDiscriminator注解之外,还可以使用标签来指定不同子类型的映射方式。总之,@TypeDiscriminator注解是MyBatis中用于在自动映射时指定不同子类型的映射方式的注解之一,可以方便地实现自动映射不同子类型的结果集映射规则。
(15)@ConstructorArgs
作用:用于指定Java对象的构造方法参数。
@ConstructorArgs是MyBatis中的注解之一,用于指定查询结果映射到Java对象时使用的构造函数和构造函数参数。该注解可以用于XML文件中,通常与标签一起使用。使用@ConstructorArgs注解时,需要指定构造函数参数的映射关系
试例:
(16)@Arg
作用:用于指定Java对象的构造方法参数。
@Arg是MyBatis中的注解之一,用于指定查询结果映射到Java对象时构造函数或工厂方法的参数映射关系。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@Arg注解时,需要指定参数的映射关系
试例:
@Select("SELECT name, age FROM users WHERE id = #{id}")User getUserById(@Arg("name") String name, @Arg("age") int age);
(17)@Discriminator
作用:用于指定类型鉴别器的查询结果。
@Discriminator是MyBatis中的注解之一,用于在自动映射时指定不同子类型的映射方式。该注解可以用于接口方法或XML文件中,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@Discriminator注解时,需要指定类型列的名称和不同子类型的映射方式
试例:
@Select("SELECT * FROM vehicle WHERE type = #{type}")@Discriminator(column = "type", javaType = String.class, cases = { @Case(value = "car", type = Car.class), @Case(value = "truck", type = Truck.class), @Case(value = "bus", type = Bus.class)})List getVehiclesByType(String type);
(18)@CacheNamespace
作用:用于指定缓存的命名空间。
@CacheNamespace是MyBatis中的注解之一,用于指定Mapper接口中的查询结果是否进行缓存。该注解可以用于Mapper接口上,用于指定Mapper接口中所有方法默认的缓存配置。使用@CacheNamespace注解时,需要指定缓存配置的属性
试例:
@CacheNamespace( implementation = MyBatisRedisCache.class, eviction = MyBatisRedisCache.Eviction.LRU, flushInterval = 60000, size = 10000, readWrite = true, blocking = true)public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(Long id); // ...}
(19)@Flush
作用:用于在插入、更新或删除操作之后自动清空缓存。
@Flush是MyBatis中的注解之一,用于在Mapper接口中指定在执行方法前或方法后刷新缓存。该注解可以用于Mapper接口方法上,通常与@Select、@Insert、@Update、@Delete等注解一起使用。使用@Flush注解时,需要指定刷新缓存的时机
试例:
@Select("SELECT * FROM users WHERE id = #{id}")@Flush(flushCache = FetchType.AFTER)User getUserById(Long id);
(20)@MappedJdbcTypes
作用:用于指定Java对象属性与数据库列的映射关系。
@MappedJdbcTypes是MyBatis中的注解之一,用于将Java类型映射到JDBC类型。该注解可以用于JavaBean属性或ResultMap中,用于指定Java类型对应的JDBC类型。使用@MappedJdbcTypes注解时,需要指定Java类型和对应的JDBC类型
试例:
public class User { private Long id; @MappedJdbcTypes(JdbcType.VARCHAR) private String name; private Integer age; // ...}
(21)@MappedTypes
作用:用于指定Java对象与数据库类型的映射关系。
@MappedTypes是MyBatis中的注解之一,用于将Java类型映射到JDBC类型。该注解可以用于JavaBean属性或ResultMap中,用于指定Java类型对应的JDBC类型。使用@MappedTypes注解时,需要指定Java类型
试例:
@MappedTypes(User.class)public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(Long id); // ...}
(22)@SelectProvider
作用:用于指定动态生成SQL语句的提供者。
@SelectProvider是MyBatis中的注解之一,用于在Mapper接口中动态生成查询SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@SelectProvider注解时,需要指定Provider类和Provider方法
试例:
@SelectProvider(type = UserSqlProvider.class, method = "getUserByIdSql")User getUserById(Long id);
(23)@InsertProvider
作用:用于指定动态生成SQL语句的提供者。
@InsertProvider是MyBatis中的注解之一,用于在Mapper接口中动态生成插入SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@InsertProvider注解时,需要指定Provider类和Provider方法
试例:
@InsertProvider(type = UserSqlProvider.class, method = "insertUserSql")int insertUser(User user);
(24)@UpdateProvider
作用:用于指定动态生成SQL语句的提供者。
@UpdateProvider是MyBatis中的注解之一,用于在Mapper接口中动态生成更新SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@UpdateProvider注解时,需要指定Provider类和Provider方法
试例:
@UpdateProvider(type = UserSqlProvider.class, method = "updateUserSql")int updateUser(User user);
(25)@DeleteProvider
作用:用于指定动态生成SQL语句的提供者。
@DeleteProvider是MyBatis中的注解之一,用于在Mapper接口中动态生成删除SQL语句。该注解可以用于Mapper接口方法上,用于指定一个提供SQL语句的Provider类。使用@DeleteProvider注解时,需要指定Provider类和Provider方法
试例:
@DeleteProvider(type = UserSqlProvider.class, method = "deleteUserSql")int deleteUser(Long id);
MyBatis-Plus
MyBatis-Plus是MyBatis的增强工具包,相对于MyBatis,它提供了更多的注解和功能
(1)@TableName
作用:用于标记实体类对应的数据库表名。
@TableName是MyBatis-Plus中的注解之一,用于在实体类中指定对应的数据库表名。通过@TableName注解,可以将实体类与数据库中的表进行映射,从而简化数据访问层的开发。
使用@TableName注解时,需要在实体类上添加该注解,并指定对应的表名
试例:
@TableName("user")public class User { private Long id; private String name; private Integer age; // 省略getter和setter方法}
(2)@TableField
作用:用于标记实体类属性对应的数据库字段名。
@TableField是MyBatis-Plus中的注解之一,用于在实体类中指定字段与数据库表中字段的映射关系。通过@TableField注解,可以将实体类中的字段与数据库表中的字段进行映射,从而简化数据访问层的开发。
使用@TableField注解时,可以指定字段的属性,例如是否为主键、是否进行插入和更新时的策略等
试例:
public class User { @TableId(type = IdType.AUTO) private Long id; @TableField(value = "name", insertStrategy = FieldStrategy.NOT_EMPTY) private String userName; @TableField(value = "age") private Integer userAge; // 省略getter和setter方法}
(3)@TableId
作用:用于标记实体类属性对应的数据库主键。
@TableId是MyBatis-Plus中的注解之一,用于在实体类中指定主键与数据库表中主键的映射关系。通过@TableId注解,可以将实体类中的主键与数据库表中的主键进行映射,从而简化数据访问层的开发。
使用@TableId注解时,可以指定主键的属性,例如主键的类型、是否为自增、是否为全局唯一标识符等
试例:
public class User { @TableId(type = IdType.AUTO) private Long id; @TableField(value = "name") private String userName; @TableField(value = "age") private Integer userAge; // 省略getter和setter方法}
(4)@Version
作用:用于标记实体类属性对应的数据库乐观锁版本号。
@Version是MyBatis-Plus中的注解之一,用于在实体类中指定数据版本号的字段与数据库表中数据版本号字段的映射关系。通过@Version注解,可以将实体类中的数据版本号字段与数据库表中的数据版本号字段进行映射,从而简化数据访问层的开发。
使用@Version注解时,可以指定数据版本号字段的属性,例如是否为乐观锁、是否进行自动填充等
试例:
public class User { @TableId(type = IdType.AUTO) private Long id; @TableField(value = "name") private String userName; @TableField(value = "age") private Integer userAge; @Version @TableField(value = "version", fill = FieldFill.INSERT) private Integer version; // 省略getter和setter方法}
(5)@EnumValue
作用:用于标记枚举类型的数据库值。
@EnumValue是MyBatis-Plus中的注解之一,用于指定枚举类中的值与数据库表中字段的映射关系。通过@EnumValue注解,可以将枚举类中的值与数据库表中的字段进行映射,从而简化数据访问层的开发。
使用@EnumValue注解时,需要在枚举类中定义一个属性,用于指定枚举值在数据库表中对应的列值
试例:
public enum GenderEnum implements IEnum { MALE(1, "男"), FEMALE(2, "女"); @EnumValue private final Integer value; private final String desc; GenderEnum(Integer value, String desc) { this.value = value; this.desc = desc; } @Override public Integer getValue() { return value; }}
(6)@TableLogic
作用:用于标记逻辑删除字段。
@TableLogic是MyBatis-Plus中的注解之一,用于指定逻辑删除字段与数据库表中的逻辑删除字段的映射关系。通过@TableLogic注解,可以将实体类中的逻辑删除字段与数据库表中的逻辑删除字段进行映射,从而简化数据访问层的开发。
使用@TableLogic注解时,需要在实体类中定义一个逻辑删除字段,并在该字段上使用@TableLogic注解,指定逻辑删除字段在数据库表中对应的列名和删除标记
试例:
public class User { @TableId(type = IdType.AUTO) private Long id; @TableField(value = "name") private String userName; @TableField(value = "age") private Integer userAge; @TableLogic(value = "0", delval = "1") @TableField(value = "deleted") private Integer deleted; // 省略getter和setter方法}
(7)@SqlParser
作用:用于标记SQL解析器。
@SqlParser是MyBatis-Plus中的注解之一,用于在执行SQL语句时开启SQL解析器。通过@SqlParser注解,可以在执行SQL语句时,开启MyBatis-Plus自带的SQL解析器,实现SQL拦截和增强功能。
使用@SqlParser注解时,需要在Mapper接口的方法上添加注解,并指定使用的SQL解析器的类
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @SqlParser(using = MyLogicSqlParser.class) List selectAll();}
(8)@InterceptorIgnore
作用:用于标记忽略拦截器。
@InterceptorIgnore是MyBatis-Plus中的注解之一,用于指定在执行SQL语句时忽略拦截器的拦截。通过@InterceptorIgnore注解,可以在Mapper接口的方法上指定忽略哪些拦截器的拦截,从而灵活控制拦截器的使用。
使用@InterceptorIgnore注解时,需要在Mapper接口的方法上添加注解,并指定忽略的拦截器的类。
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @InterceptorIgnore(tenantLine = "true") List selectAll();}
(9)@KeySequence
作用:用于标记主键序列号。
@KeySequence是MyBatis-Plus中的注解之一,用于指定主键生成策略为数据库序列(sequence)。通过@KeySequence注解,可以将实体类中的主键与数据库序列进行映射,从而实现自动主键生成的功能。
使用@KeySequence注解时,需要在实体类中定义一个主键字段,并在该字段上使用@KeySequence注解,指定主键生成策略为数据库序列。
试例:
public class User { @TableId(type = IdType.INPUT) @KeySequence(value = "user_id_seq") private Long id; @TableField(value = "name") private String userName; @TableField(value = "age") private Integer userAge; // 省略getter和setter方法}
(10)@InsertBatch
作用:用于批量插入数据。
@InsertBatch是MyBatis-Plus中的注解之一,用于批量插入数据。通过@InsertBatch注解,可以将多个实体对象作为参数一次性插入到数据库中,从而提高数据插入的效率。
使用@InsertBatch注解时,需要在Mapper接口的方法上添加注解,并将实体对象列表作为参数传入。
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @InsertBatch int insertBatch(List userList);}
(11)@UpdateBatch
作用:用于批量更新数据。
@UpdateBatch是MyBatis-Plus中的注解之一,用于批量更新数据。通过@UpdateBatch注解,可以将多个实体对象作为参数一次性更新到数据库中,从而提高数据更新的效率。
使用@UpdateBatch注解时,需要在Mapper接口的方法上添加注解,并将实体对象列表作为参数传入。
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @UpdateBatch int updateBatch(List userList);}
(12)@DeleteBatch
作用:用于批量删除数据。
@DeleteBatch是MyBatis-Plus中的注解之一,用于批量删除数据。通过@DeleteBatch注解,可以将多个实体对象的主键作为参数一次性删除数据库中的数据,从而提高数据删除的效率。
使用@DeleteBatch注解时,需要在Mapper接口的方法上添加注解,并将主键列表作为参数传入。
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @DeleteBatch int deleteBatch(List idList);}
(13)@SqlParserConfig
作用:用于配置SQL解析器。
@SqlParserConfig是MyBatis-Plus中的注解之一,用于配置SQL解析器的参数。通过@SqlParserConfig注解,可以在Mapper接口或Mapper方法上指定SQL解析器的参数,如过滤SQL中的特定语句等。
使用@SqlParserConfig注解时,可以指定多个SQL解析器的参数,如filterParams、dialect等
试例:
@Mapper@SqlParserConfig(filterParams = true, dialect = "postgresql")public interface UserMapper extends BaseMapper { @Select("select * from user where id = #{id}") User selectById(Long id);}
(14)@SqlParserCustomize
作用:用于自定义SQL解析器。
@SqlParserCustomize是MyBatis-Plus中的注解之一,用于自定义SQL解析器的行为。通过@SqlParserCustomize注解,可以在Mapper接口或Mapper方法上自定义SQL解析器的行为,如使用自定义的SQL解析器实现特定的功能。
使用@SqlParserCustomize注解时,需要定义一个实现了ISqlParser接口的类,并将该类的Class对象作为参数传入注解中。
试例:
public class CustomSqlParser implements ISqlParser { // 实现ISqlParser接口的方法}@Mapper@SqlParserCustomize(parser = CustomSqlParser.class)public interface UserMapper extends BaseMapper { @Select("select * from user where id = #{id}") User selectById(Long id);}
(15)@SqlParserCount
作用:用于标记查询总数的SQL语句。
@SqlParserCount是MyBatis-Plus中的注解之一,用于指定SQL查询语句的总记录数的查询方式。通过@SqlParserCount注解,可以在Mapper接口或Mapper方法上指定查询总记录数的SQL语句或自定义的查询方式。
使用@SqlParserCount注解时,可以指定查询总记录数的SQL语句或自定义的查询方式。
试例:
@Mapper@SqlParserCount(selectCount = "select count(*) from user")public interface UserMapper extends BaseMapper { @Select("select * from user where id = #{id}") User selectById(Long id);}
(16)@SqlParserIgnore
作用:用于标记忽略SQL解析。
@SqlParserIgnore是MyBatis-Plus中的注解之一,用于忽略SQL解析器的解析,即不对该注解标记的SQL语句进行解析。通过@SqlParserIgnore注解,可以在Mapper接口或Mapper方法上忽略SQL解析器的解析。
使用@SqlParserIgnore注解时,可以在Mapper接口或Mapper方法上标记该注解,以忽略对该方法中的SQL语句进行解析
试例:
@Mapperpublic interface UserMapper extends BaseMapper { @SqlParserIgnore @Select("select * from user where id = #{id}") User selectUserById(Long id);}
(17)@SqlParserFilter
作用:用于标记SQL解析过滤器。
@SqlParserFilter是MyBatis-Plus中的注解之一,用于过滤不需要进行SQL解析的SQL语句。通过@SqlParserFilter注解,可以在Mapper接口或Mapper方法上过滤不需要进行SQL解析的SQL语句,从而提高SQL语句的执行效率。
使用@SqlParserFilter注解时,需要定义一个实现了ISqlParser接口的类,并将该类的Class对象作为参数传入注解中。
试例:
public class CustomSqlParser implements ISqlParser { // 实现ISqlParser接口的方法}@Mapper@SqlParserFilter(parser = CustomSqlParser.class, filter = {"selectUserById"})public interface UserMapper extends BaseMapper { @Select("select * from user where id = #{id}") User selectUserById(Long id); @Select("select * from user where username = #{username}") User selectUserByUsername(String username);}
(18)@SqlParserOrder
作用:用于标记SQL解析器的执行顺序。
@SqlParserOrder是MyBatis-Plus中的注解之一,用于指定SQL解析器的执行顺序。通过@SqlParserOrder注解,可以在Mapper接口或Mapper方法上指定SQL解析器的执行顺序。
使用@SqlParserOrder注解时,可以在Mapper接口或Mapper方法上标记该注解,并指定SQL解析器的执行顺序。
试例:
@Mapper@SqlParserOrder(SqlParserOrder.ORDER_AOP)public interface UserMapper extends BaseMapper { @Select("select * from user where id = #{id}") User selectUserById(Long id);}
如有不足,欢迎补充!
来源地址:https://blog.csdn.net/qq_46138492/article/details/129477550