mybatis实验总结2

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.	}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值