您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
05-mybatis的多表操作-一对多配置实现
发布时间:2025-02-02 10:13:58编辑:雪饮阅读()
-
在上篇中的User.java中新增orderList属性并生成getter与setter以及重新生成toString
package sp28.domain;
import java.util.Date;
import java.util.List;
public class User {
private int id;
private String username;
private String password;
private Date birthday;
private List<Order> orderList;
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday=" + birthday +
", orderList=" + orderList +
'}';
}
}
然后在UserMapper.java中新增findAll用来查询所有(包含每个用户的订单列表)
package sp28.dao;
import sp28.domain.User;
import java.util.List;
public interface UserMapper {
public List<User> findAll();
}
然后在UserMapper.xml中去实现findAll及结果集映射
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="sp28.dao.UserMapper">
<resultMap id="userMap" type="user">
<!--
column:数据表的字段名称
property:实体的属性名称
-->
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="password" column="password"/>
<result property="birthday" column="birthday"/>
<!--
配置集合信息
property:集合名称
ofType: 集合中元素的数据类型
-->
<collection property="orderList" ofType="order">
<!--封装order的数据-->
<id property="id" column="oid"/>
<result column="ordertime" property="ordertime"/>
<result column="total" property="total"/>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
select *,o.id oid from user u,orders o where u.id=o.uid
</select>
</mapper>
然后新增测试方法来测试
@Test
public void test2() throws IOException {
InputStream resourceAsStream= Resources.getResourceAsStream("sqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper mapper=sqlSession.getMapper(UserMapper.class);
List<User> userList=mapper.findAll();
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
这里实际上select *,o.id oid from user u,orders o where u.id=o.uid查询出来user的记录会重复。
在数据库中观感不是很好,但用上面的结果集映射后,就能形成不重复的user记录为主导,每个user的orderList来归档属于自己的order。
而且这样有个弊端就是,只能查询到包含有订单的用户。
关键字词:mybatis
相关文章
- 04-mybatis的多表操作-一对一的配置实现2
- 03-mybatis的多表操作-一对一的配置实现
- 02-mybatis的多表操作-订单环境代码实现
- 06-mybatis核心配置文件深入-plugins分页助手的分页相
- 05-mybatis核心配置文件深入-plugins分页助手的代码实
- 04-mybatis核心配置文件深入-plugins标签介绍和查询全
- 03-mybatis核心配置文件深入-自定义DateTypeHandler实
- 02-mybatis核心配置文件深入-typeHandler测试环境搭建
- 04-mybatis映射文件深入-动态sql-sql片段的抽取
- 03-mybatis映射文件深入-动态sql-foreach