JDBC式插入和selectKey方式插入
-
JDBC式插入
实现机制:使用 JDBC 的方式直接执行 SQL 插入语句,不依赖 MyBatis 的特定功能。
代码示例:在 Provider 类中直接拼接 SQL 语句进行插入操作。
获取自增主键:通过数据库的自增机制,数据库会自动分配一个唯一的主键值。可以通过配置 @Options(useGeneratedKeys = true, keyProperty = "id") 将该值映射到对象属性 id 中。
-
selectKey方式插入
实现机制:利用 MyBatis 提供的动态 SQL 语句生成功能,结合 SELECT LAST_INSERT_ID() 来获取插入后的自增主键。
代码示例:在 Provider 类中使用 MyBatis 提供的 SQL 构建方法,同时结合 SELECT LAST_INSERT_ID() 来进行插入操作。
获取自增主键:通过 @SelectKey 注解配置了查询语句来获取自增主键的值,并通过 keyProperty 将其映射到对象属性 id 中。
-
JDBC式插入与selectKey方式插入
JDBC式插入适用于不依赖 MyBatis 特定功能,希望保持直接与数据库交互的情况。
selectKey方式插入适用于需要利用 MyBatis 提供的动态 SQL 语句生成功能,同时需要获取插入后的自增主键值的情况。
-
Param注解的使用方法
Param注解通常用于指定方法参数的名称,以便在XML映射文件中引用它们。
@Param("paramName") 将方法参数命名为 "paramName"。
接口文档
1. public interface YourMapper {
2. void yourMethod(@Param("paramName") String paramValue);
3. }
在相应的XML映射文件中,使用该名称来引用这个参数。
XML文档
1. <update id="yourMethod" parameterType="java.lang.String">
2. UPDATE your_table SET column_name = #{paramName}
3. </update>
-
控制事务rollback() 和 commit()的方法
-
rollback()方法
rollback() 方法用于取消当前事务的更改,将数据库状态回滚到事务开始之前的状态。
如果在一个事务中发生了错误或者某种情况需要取消事务,则可以调用 rollback() 方法。
1. try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
2. // ...
3. sqlSession.rollback(); // 取消事务
4. }
-
commit()方法
commit() 方法用于将当前事务的更改持久化到数据库中。
如果事务的所有操作都成功完成,你可以调用 commit() 来提交更改,将它们永久保存到数据库中。
1. try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
2. // ...
3. sqlSession.commit(); // 提交事务
4. }
-
rollback() 和 commit()的方法区别
rollback() 取消当前事务的更改,使得数据库回滚到事务开始前的状态。
commit() 将当前事务的更改持久化到数据库中,使得它们成为永久的。
在 MyBatis 中,如果你没有显式地调用 commit() 方法,事务会自动回滚。这是因为 MyBatis 默认将事务设置为自动提交(autoCommit)为 false,所以如果你没有提交事务,它会自动回滚。
-
引用相同 @Results 配置
-
在 Mapper 接口中使用 @Results 注解创建一个结果映射配置
-
1. @Results(id = "userResultMap", value = { 2. @Result(property = "id", column = "user_id"), 3. @Result(property = "username", column = "username"), 4. @Result(property = "email", column = "email") 5. }) 6. List<User> getUserList();
-
在XML 映射文件中,使用 <resultMap> 元素来引用上述的 @Results 配置
-
1. <select id="getUserList" resultMap="userResultMap"> 2. SELECT * FROM users 3. </select>
-
配置结果映射@Results 注解和 XML 中的 <result> 元素
-
@Results 注解
@Results 是 MyBatis 中的注解,用于在 Java 代码中配置结果映射。
适用范围:@Results 注解通常用于方法级别,用于指定某个方法的结果映射配置。
1. @Results({
2. @Result(property = "id", column = "user_id"),
3. @Result(property = "username", column = "username"),
4. @Result(property = "email", column = "email")
5. })
6. List<User> getUserList();
-
<result> 元素
<result> 元素是在 MyBatis 的 XML 映射文件中使用的元素,用于配置结果映射。
适用范围:<result> 元素通常用于 XML 映射文件中的 <resultMap> 元素内,用于定义结果映射。
1. <result property="id" column="user_id" />
2. <result property="username" column="username" />
3. <result property="email" column="email" />
-
区别和联系
-
区别
语法:@Results 是一个 Java 注解,可以直接应用于方法,使用注解的方式配置结果映射。<result> 是 XML 中的一个元素,用于在 XML 映射文件中配置结果映射。
适用场景:@Results 注解通常用于简单的结果映射配置,或者在 Java 代码中动态生成映射配置时使用。<result> 元素通常用于 XML 映射文件中,可以提供更灵活的配置选项,适用于复杂的结果映射。
-
联系
可以在一个 <resultMap> 元素中同时使用 @Results 注解和 <result> 元素,以达到更灵活的结果映射配置。
1. <resultMap id="userResultMap" type="User">
2. <!-- 使用 @Results 注解 -->
3. @Results({
4. @Result(property = "id", column = "user_id"),
5. @Result(property = "username", column = "username"),
6. @Result(property = "email", column = "email")
7. })
8. <!-- 使用 <result> 元素 -->
9. <result property="id" column="user_id" />
10. <result property="username" column="username" />
11. <result property="email" column="email" />
12. </resultMap>
-
三种方式配置 SQL 查询语句
-
XML 方式
- 特点:使用 XML 文件来定义 SQL 映射关系和查询语句。XML 文件中包含了 SQL 语句、参数映射、结果映射等信息。
- 优点:可以将 SQL 语句和映射关系单独存放,便于管理和维护。适用于复杂的 SQL 语句和映射配置。
-
1. <!-- Mapper XML 文件中定义查询语句 --> 2. <select id="getUserById" parameterType="int" resultType="User"> 3. SELECT * FROM users WHERE user_id = #{id} 4. </select>
-
注解方式
- 特点:在 Java 接口的方法上使用注解来定义 SQL 查询语句。直接将 SQL 语句嵌入到 Java 代码中。
- 优点:简单、直观,适用于简单的查询操作。代码紧凑,不需要额外的 XML 文件。
-
1. @Select("SELECT * FROM users WHERE user_id = #{id}") 2. User getUserById(int id);
-
Provider 注解方式
- 特点:Provider 注解方式是一种注解方式的扩展,允许开发者通过 Java 代码来生成 SQL 语句。提供了更高的灵活性,可以根据条件动态生成 SQL 语句。
- 优点:可以在 Java 代码中动态生成复杂的 SQL 查询语句,适用于动态条件查询等场景。
- 区别和联系
- 配置方式:XML 方式使用 XML 文件配置,注解方式直接在 Java 接口中使用注解,Provider 注解方式在 Java 代码中通过 Provider 类生成 SQL 语句。
- 适用场景:XML 方式适用于复杂的 SQL 语句和映射配置,便于管理和维护。注解方式适用于简单的查询操作,代码简洁。Provider 注解方式适用于动态生成 SQL 语句的场景,提供了更高的灵活性。
- 灵活性:Provider 注解方式提供了最高的灵活性,可以根据条件动态生成 SQL 语句,适用于动态条件查询等场景。
-
1. public class UserProvider { 2. public String getUserById(int id) { 3. return "SELECT * FROM users WHERE user_id = #{id}"; 4. } 5. }