下面我就为大家详细讲解一下 MyBatis XML 方式的基本用法之多表查询功能的示例代码。
MyBatis多表查询
多表查询基本用法
MyBatis 支持操作多张表,通过 XML 映射关系可以实现多表联合查询,可以配合 Mapper.xml 和 Mapper 接口一同实现多表操作。
以下是实现 MyBatis 多表查询的基本步骤:
1.先创建对应的表和数据。
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
age INT
);
CREATE TABLE order (
id INT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(50),
user_id INT,
FOREIGN KEY user_id REFERENCES user(id)
);
INSERT INTO user (username, age) VALUES ('张三', 20);
INSERT INTO user (username, age) VALUES ('李四', 22);
INSERT INTO order (order_no, user_id) VALUES ('20190828001', 1);
INSERT INTO order (order_no, user_id) VALUES ('20190828002', 2);
2.创建对应的 JavaBean。
public class User {
private Integer id;
private String username;
private Integer age;
// getter and setter 方法
}
public class Order {
private Integer id;
private String orderNo;
private Integer userId;
// getter and setter 方法
}
3.创建对应的 Mapper.xml 文件。
<!-- 根据用户ID查询订单信息 -->
<select id="getOrderByUserId" parameterType="int" resultType="com.example.demo.entity.Order">
select o.id, o.order_no orderNo, o.user_id userId from `order` o where o.user_id = #{userId}
</select>
<!-- 根据用户ID查询用户信息,关联到该用户的订单信息 -->
<select id="getUserAndOrdersByUserId" parameterType="int" resultType="com.example.demo.entity.User">
select u.* from user u where u.id = #{userId};
select o.* from `order` o where o.user_id = #{userId};
</select>
4.创建对应的 Mapper 接口。
public interface UserMapper {
List<Order> getOrderByUserId(Integer userId);
User getUserAndOrdersByUserId(Integer userId);
}
5.执行查询操作。
public void testMultiTableQuery() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 根据用户ID查询订单信息
List<Order> orderList = userMapper.getOrderByUserId(1);
// 根据用户ID查询用户信息,关联到该用户的订单信息
User user = userMapper.getUserAndOrdersByUserId(1);
sqlSession.close();
}
以上示例代码中,Mapper.xml 文件中使用了两个查询语句:getOrderByUserId 和 getUserAndOrdersByUserId。其中 getOrderByUserId 是一个简单的多表查询示例,getUserAndOrdersByUserId 则是一个稍复杂的多表联合查询示例,查询到了该用户的订单信息。
使用MyBatis实现动态多表查询
MyBatis 还提供了动态 SQL 用于操作多表查询,使用这种方式可以根据不同情况动态生成 SQL 语句。
以下是一个使用 MyBatis 实现动态多表查询的示例代码:
- 创建一个动态查询的 Mapper 接口:
public interface UserMapper {
List<User> getUsersByCondition(@Param("username") String username, @Param("age") Integer age);
}
- 在 Mapper.xml 文件中创建一个动态 SQL 查询:
<select id="getUsersByCondition" resultType="com.example.demo.entity.User">
select * from user where 1 = 1
<if test="username != null and username != ''">
and username like concat('%', #{username}, '%')
</if>
<if test="age != null">
and age = #{age}
</if>
</select>
- 客户端代码调用 Mapper 接口:
public void testDynamicQuery() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 根据条件动态查询用户信息
List<User> userList = userMapper.getUsersByCondition("张三", 20);
sqlSession.close();
}
通过上述示例代码,我们看到了如何使用 MyBatis 实现动态的多表查询,通过动态 SQL 语言可以轻松实现、修改和扩展 SQL 语句,满足不同的查询需求。
以上就是 MyBatis XML 方式的基本用法之多表查询功能的完整攻略,希望对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis XML方式的基本用法之多表查询功能的示例代码 - Python技术站