当前位置:实例文章 » JAVA Web实例» [文章]Mybatis:传参+提交事务(自动or手动)+sql多表关联查询(两种方法)

Mybatis:传参+提交事务(自动or手动)+sql多表关联查询(两种方法)

发布人:shili8 发布时间:2025-01-13 05:17 阅读次数:0

**MyBatis:传参 + 提交事务 ( 自动或手动 ) + SQL 多表关联查询**

### 一、前言在实际的开发中,经常会遇到需要进行多表关联查询的情况。同时,还需要将这些数据写入数据库中,这就涉及到了事务的提交问题。在这种情况下,MyBatis 的使用变得尤为重要。

本文将详细介绍如何使用 MyBatis 进行传参、提交事务 ( 自动或手动 ) 以及 SQL 多表关联查询。

### 二、传参在进行多表关联查询时,我们需要传递多个参数到 SQL 中。下面是示例代码:

xml<!-- mybatis-config.xml -->
<configuration>
 <settings>
 <!-- 配置使用 JDBC 的方式 -->
 <setting name="useJDBCCommentedFormat" value="true"/>
 </settings>

 <!-- 配置数据源 -->
 <environments default="development">
 <environment id="development">
 <transactionManager type="JDBC"/>
 <dataSource type="POOLED">
 <property name="driver" value="${jdbc.driver}"/>
 <property name="url" value="${jdbc.url}"/>
 <property name="username" value="${jdbc.username}"/>
 <property name="password" value="${jdbc.password}"/>
 </dataSource>
 </environment>
 </environments>

 <!-- 配置映射 -->
 <mappers>
 <mapper resource="com/example/mybatis/mapper/UserMapper.xml"/>
 </mappers>
</configuration>


xml<!-- UserMapper.xml -->
<mapper namespace="com.example.mybatis.mapper.UserMapper">
 <!-- 定义一个方法,传递两个参数 -->
 <select id="findUserByIdAndName" parameterType="map">
 SELECT * FROM user WHERE id = #{id} AND name = #{name}
 </select>
</mapper>


java// User.javapublic class User {
 private int id;
 private String name;

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }
}


java// UserMapper.javapublic interface UserMapper {
 List findUserByIdAndName(Map param);
}


java// Test.javapublic class Test {
 @Test public void testFindUserByIdAndName() throws IOException {
 // 创建一个 SqlSession 对象 SqlSession sqlSession = MybatisUtil.getSqlSession();

 // 使用 UserMapper 的 findUserByIdAndName 方法进行查询 List users = sqlSession.selectList("com.example.mybatis.mapper.UserMapper.findUserByIdAndName", Map.of("id",1, "name", "张三"));

 // 关闭 SqlSession 对象 sqlSession.close();

 // 打印结果 System.out.println(users);
 }
}


### 三、提交事务 ( 自动或手动 )

在进行多表关联查询时,我们需要将这些数据写入数据库中,这就涉及到了事务的提交问题。在 MyBatis 中,我们可以使用 `@Transactional` 注解来自动提交事务。

java// UserMapper.javapublic interface UserMapper {
 @Transactional void saveUser(User user);
}


或者,我们也可以手动进行事务的提交:

java// Test.javapublic class Test {
 @Test public void testSaveUser() throws IOException {
 // 创建一个 SqlSession 对象 SqlSession sqlSession = MybatisUtil.getSqlSession();

 // 使用 UserMapper 的 saveUser 方法进行保存 User user = new User();
 user.setId(1);
 user.setName("张三");
 sqlSession.insert("com.example.mybatis.mapper.UserMapper.saveUser", user);

 // 手动提交事务 sqlSession.commit();

 // 关闭 SqlSession 对象 sqlSession.close();

 // 打印结果 System.out.println(user);
 }
}


### 四、SQL 多表关联查询 (两种方法 )

在进行多表关联查询时,我们可以使用 `JOIN` 关键字来实现。

xml<!-- UserMapper.xml -->
<mapper namespace="com.example.mybatis.mapper.UserMapper">
 <!-- 定义一个方法,使用 JOIN 进行多表关联查询 -->
 <select id="findUserAndOrder" resultType="map">
 SELECT u.id, u.name, o.order_id, o.order_name FROM user u LEFT JOIN order o ON u.id = o.user_id </select>
</mapper>


或者,我们也可以使用 `@Select` 注解来实现:

java// UserMapper.javapublic interface UserMapper {
 @Select("SELECT u.id, u.name, o.order_id, o.order_name FROM user u LEFT JOIN order o ON u.id = o.user_id")
 List> findUserAndOrder();
}


### 五、结论在本文中,我们详细介绍了如何使用 MyBatis 进行传参、提交事务 ( 自动或手动 ) 以及 SQL 多表关联查询。通过阅读本文,开发者可以更好地理解 MyBatis 的使用方法,并能够应用到实际的开发中。

其他信息

其他资源

Top