MyBatis 是一款优秀的持久层框架,它通过提供数据访问对象(DAO)和数据访问层(DAL)的抽象,简化了数据库交互的复杂性。利用注解如 @Select
、@Insert
、@Update
、@Delete
,MyBatis 支持定制化 SQL、存储过程以及高级映射,使得开发者能够灵活地处理数据库操作。其核心特性包括动态 SQL 构建、强大的数据映射以及插件扩展机制,这些都极大地提升了开发效率和数据访问的性能。MyBatis 的易用性和灵活性使其成为企业级应用开发中的热门选择,特别是在需要细粒度控制 SQL 语句的场景下。通过注解如 @Results
、@Result
、@One
、@Many
,MyBatis 进一步简化了结果集的映射和关联对象的处理,使得开发者可以更加专注于业务逻辑的实现。
肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注
欢迎 点赞,关注,评论。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
- 28个验证注解,通过业务案例让你精通Java数据校验(收藏篇)
- Java 8函数式编程全攻略:43种函数式业务代码实战案例解析(收藏版)
- 69 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)
- 24 个Spring bean 全部注解:真实业务使用案例说明(必须收藏)
- MySQL索引完全手册:真实业务图文讲解17种索引运用技巧(必须收藏)
- 一个项目代码讲清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO
mybatis 架构图
- 核心组件 包括 MyBatis 框架、SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapped Statements、Result Maps 和动态 SQL 元素。
- 集成 包括插件和拦截器,它们扩展了 MyBatis 的功能。
- 数据访问 包括数据源和数据库,展示了 MyBatis 如何连接和访问数据库。
- 事务管理 展示了事务管理组件,它与 SqlSession 相关联。
1. 基本SQL操作注解
0. 主键生成和检索
@SelectKey
- 注解作用介绍
用于在插入或更新操作后获取由数据库自动生成的主键值。
- 注解属性介绍
statement
: 指定用于获取主键值的 SQL 语句。keyProperty
: 指定主键值应设置到哪个属性。before
: 指定是否在插入或更新操作之前执行 SQL 语句。resultType
: 指定返回结果的类型。
- 注解业务案例
public interface UserMapper {
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
@SelectKey(statement="SELECT 0", keyProperty="id", before=false, resultType=Long.class)
void insertUser(User user);
}
1.1. @Select
- 注解作用介绍
用于执行查询操作。
- 注解属性介绍
value
: 指定查询的SQL语句。
- 注解业务案例
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
User selectUserById(@Param("id") int userId);
}
1.2. @Insert
- 注解作用介绍
用于执行插入操作。
- 注解属性介绍
value
: 指定插入的SQL语句。
- 注解业务案例
public interface UserMapper {
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
int insertUser(User user);
}
1.3. @Update
- 注解作用介绍
用于执行更新操作。
- 注解属性介绍
value
: 指定更新的SQL语句。
- 注解业务案例
public interface UserMapper {
@Update("UPDATE users SET name = #{name} WHERE id = #{id}")
int updateUser(@Param("id") int userId, @Param("name") String newName);
}
1.4. @Delete
- 注解作用介绍
用于执行删除操作。
- 注解属性介绍
value
: 指定删除的SQL语句。
- 注解业务案例
public interface UserMapper {
@Delete("DELETE FROM users WHERE id = #{id}")
int deleteUser(@Param("id") int userId);
}
2. 结果映射注解
2.1. @Results
- 注解作用介绍
用于指定复杂的结果集映射。
- 注解属性介绍
id
: 指定结果映射的ID。value
: 包含的@Result
注解数组。
- 注解业务案例
public interface UserMapper {
@Results({
@Result(property = "id", column = "user_id"),
@Result(property = "name", column = "name")
})
@Select("SELECT user_id, name FROM users WHERE id = #{id}")
User selectUserWithResults(@Param("id") int id);
}
2.2. @Result
- 注解作用介绍
用于指定单个字段的结果集映射。
- 注解属性介绍
property
: Java对象的属性名。column
: 数据库列名。
- 注解业务案例
public class User {
private int id;
private String name;
// 省略getter和setter方法
}
2.3. @ResultMap
- 注解作用介绍
用于引用已定义的结果映射。
- 注解属性介绍
value
: 结果映射的名称。
- 注解业务案例
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
@ResultMap("userResultMap")
User selectUserWithResultMap(@Param("id") int id);
}
2.4. @TypeDiscriminator
- 注解作用介绍
用于在结果集中根据某个字段的值来区分不同的类型,实现多态查询。
- 注解属性介绍
column
: 指定用于区分类型的列名。javaType
: 指定列的 Java 类型。jdbcType
: 指定列的 JDBC 类型。cases
: 指定具体的类型映射关系。
- 注解业务案例
public interface VehicleMapper {
@Select("SELECT type, name FROM vehicles")
@Results({
@Result(property="type", column="type", @TypeDiscriminator(column="type", javaType=String.class, cases={
@Case(value="CAR", type=Car.class),
@Case(value="TRUCK", type=Truck.class)
}))
})
List<Vehicle> selectVehicles();
}
3. 关联映射注解
3.1. @One
- 注解作用介绍
用于指定一对一关联的结果映射。
- 注解属性介绍
select
: 指定关联对象的查询语句。
- 注解业务案例
public interface UserMapper {
@Results({
@Result(property = "address", column = "address_id", select = "selectAddress")
})
@Select("SELECT * FROM users WHERE id = #{id}")
User selectUserWithAddress(@Param("id") int id);
}
3.2. @Many
- 注解作用介绍
用于指定一对多关联的结果映射。
- 注解属性介绍
select
: 指定关联集合的查询语句。
- 注解业务案例
public interface UserMapper {
@Results({
@Result(property = "posts", column = "id", select = "selectPostsByUserId")
})
@Select("SELECT * FROM users WHERE id = #{id}")
User selectUserWithPosts(@Param("id") int id);
}
4. 高级映射注解
4.1. @MapKey
- 注解作用介绍
用于指定Map的键值字段。
- 注解属性介绍
value
: 指定作为Map键的字段。
- 注解业务案例
public interface UserMapper {
@Select("SELECT name, count FROM user_count")
@MapKey("name")
Map<String, Integer> selectUserCount();
}
5. 动态SQL注解
5.1.@SelectProvider
- 注解作用介绍
@SelectProvider
用于动态生成查询SQL语句。
- 注解业务案例
public interface UserMapper {
@SelectProvider(type=UserSqlProvider.class, method="selectUsers")
List<User> selectUsers(UserSpecification specification);
}
5.2.@InsertProvider
- 注解作用介绍
@InsertProvider
用于动态生成插入SQL语句。
- 注解业务案例
public interface UserMapper {
@InsertProvider(type=UserSqlProvider.class, method="insertUser")
int insertUser(User user);
}
5.3.@UpdateProvider
- 注解作用介绍
@UpdateProvider
用于动态生成更新SQL语句。
- 注解业务案例
public interface UserMapper {
@UpdateProvider(type=UserSqlProvider.class, method="updateUser")
int updateUser(User user);
}
5.4.@DeleteProvider
- 注解作用介绍
@DeleteProvider
用于动态生成删除SQL语句。
- 注解业务案例
public interface UserMapper {
@DeleteProvider(type=UserSqlProvider.class, method="deleteUser")
int deleteUser(User user);
}
6. 参数绑定注解
6.1. @Param
- 注解作用介绍
用于指定方法参数的名称,以便在SQL语句中使用。
- 注解属性介绍
value
: 参数的名称。
- 注解业务案例
public interface UserMapper {
@Select("SELECT * FROM users WHERE name = #{userName}")
List<User> findUsersByName(@Param("userName") String name);
}
6.2 @ConstructorArgs
- 注解作用介绍
用于指定使用构造方法参数进行结果映射,允许将查询结果直接映射到对象的构造方法。
- 注解属性介绍
value
: 指定构造方法参数的数组。
- 注解业务案例
public class User {
private final int id;
private final String name;
public User(@Param("id") int id, @Param("name") String name) {
this.id = id;
this.name = name;
}
}
public interface UserMapper {
@Select("SELECT id, name FROM users WHERE id = #{id}")
@ConstructorArgs({
@Arg(column="id", javaType=int.class),
@Arg(column="name", javaType=String.class)
})
User selectUserById(@Param("id") int id);
}
7. 配置注解
7.1. @Options
- 注解作用介绍
用于指定一些配置选项,如执行超时时间、刷新缓存等。
- 注解属性介绍
useCache
: 是否使用缓存。flushCache
: 是否刷新缓存。timeout
: 执行超时时间。
- 注解业务案例
public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{id}")
@Options(useCache=true, flushCache=FlushCachePolicy.TRUE, timeout=1000)
User getUserWithOptions(@Param("id") int id);
}
7.2. @CacheNamespace
- 注解作用介绍
用于配置命名空间级别的缓存选项。
- 注解属性介绍
value
: 缓存命名空间的名称。eviction
: 缓存逐出策略。size
: 缓存大小。readOnly
: 是否只读。
- 注解业务案例
@CacheNamespace(eviction=Eviction.LRU, size=100, readOnly=true)
public interface UserMapper {
// 映射语句
}
7.3. @Flush
- 注解作用介绍
用于指定在插入、更新或删除操作后是否刷新缓存。
- 注解属性介绍
flushCache
: 是否刷新缓存。
- 注解业务案例
public interface UserMapper {
@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")
@Flush(flushCache=FlushCachePolicy.TRUE)
int insertUser(User user);
}
8. 类型映射注解
8.1. @MappedJdbcTypes
- 注解作用介绍
用于指定Java类型到JDBC类型的映射。
- 注解属性介绍
value
: 映射的JDBC类型。
- 注解业务案例
public class User {
@MappedJdbcTypes(JdbcType.VARCHAR)
private String name;
}
8.2. @MappedTypes
- 注解作用介绍
用于指定Java类型与数据库类型的映射关系。
- 注解属性介绍
value
: 映射的Java类型。
- 注解业务案例
@MappedTypes(User.class)
public interface
标签:name,23,int,id,interface,Mybatis,注解,public
From: https://blog.csdn.net/alises1314/article/details/142107755