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 { ListfindUserByIdAndName(Map param); }
java// Test.javapublic class Test { @Test public void testFindUserByIdAndName() throws IOException { // 创建一个 SqlSession 对象 SqlSession sqlSession = MybatisUtil.getSqlSession(); // 使用 UserMapper 的 findUserByIdAndName 方法进行查询 Listusers = 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
### 五、结论在本文中,我们详细介绍了如何使用 MyBatis 进行传参、提交事务 ( 自动或手动 ) 以及 SQL 多表关联查询。通过阅读本文,开发者可以更好地理解 MyBatis 的使用方法,并能够应用到实际的开发中。