mybatis 一二事(3) - 多表关联查询

db.properties

1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/order
3 jdbc.username=root
4 jdbc.password=root

SqlMapConfig.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4 "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 <configuration>
 6     <!-- 加载数据库连接参数配置文件 -->
 7     <properties resource="db.properties" />
 8
 9     <!--
10         全局配置参数
11         比如 二级缓存 延迟加载...等
12         此全局参数会影响mybatis运行的性能,要谨慎配置
13      -->
14 <!--     <settings> -->
15 <!--     <setting name="" value=""/> -->
16 <!--     </settings> -->
17
18     <!-- 定义别名 -->
19     <typeAliases>
20         <!-- 单个别名定义
21         type:pojo的路径
22         alias:别名的名称
23         -->
24         <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
25         <!-- 批量别名定义
26         name:指定包名,将包下边的所有pojo定义别名 ,别名为类名(首字母大写或小写都行)
27          -->
28         <package name="com.mybatis.bean"/>
29     </typeAliases>
30
31     <!-- 和spring整合后 environments配置将废除 -->
32     <environments default="development">
33         <environment id="development">
34             <transactionManager type="JDBC" />
35             <dataSource type="POOLED">
36                 <property name="driver" value="${jdbc.driver}"/>
37                 <property name="url" value="${jdbc.url}"/>
38                 <property name="username" value="${jdbc.username}"/>
39                 <property name="password" value="${jdbc.password}"/>
40             </dataSource>
41         </environment>
42     </environments>
43
44     <!-- 配置mapper映射文件 -->
45     <mappers>
46         <!-- resource方式
47         在UserMapper.xml,定义namespace为mapper接口的地址,映射文件通过namespace找到对应的mapper接口文件
48          -->
49         <!-- <mapper resource="sqlmap/UserMapper.xml" /> -->
50         <!-- class方式
51         class:指定 mapper接口的地址
52         遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
53          -->
54         <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->
55
56         <!--
57             批量mapper扫描
58             遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
59             主要以这样的方式为主来加载mapper
60           -->
61         <package name="com.mybatis.mapper"/>
62
63
64     </mappers>
65 </configuration>

OrderMapper.xml

  1 <?xml version="1.0" encoding="UTF-8" ?>
  2 <!DOCTYPE mapper
  3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5
  6 <mapper namespace="com.mybatis.mapper.OrderMapper" >
  7
  8     <!--
  9         ********
 10         1 对 1 查询建议使用 resultType
 11         ********
 12      -->
 13
 14     <!-- type 为主类,即A类包含了B类作为属性,则type就写A类 -->
 15     <resultMap type="Orders" id="orderUserResultMap">
 16         <!--
 17             id 和 result 这两个标签是映射到 Orders 中去的
 18             如果有多个字段决定id唯一,则写多个id标签
 19         -->
 20         <id column="id" property="id"/>
 21         <result column="order_number" property="order_number"/>
 22         <result column="user_id" property="user_id"/>
 23
 24         <!--
 25             用于映射单个关联对象
 26             property: 将关联信息映射到哪个属性
 27             javaType: 属性映射的类型
 28          -->
 29         <association property="user" javaType="com.mybatis.bean.User">
 30             <id column="user_id" property="id"/>
 31             <result column="username" property="username"/>
 32             <result column="birthday" property="birthday"/>
 33         </association>
 34     </resultMap>
 35
 36
 37     <!--
 38         extends: 继承上一个resultMap, 公用相同属性
 39      -->
 40     <resultMap type="Orders" id="orderUserDetailResultMap" extends="orderUserResultMap">
 41
 42         <!--
 43             collection: 用于映射集合对象
 44             property: 将集合信息映射到哪个属性
 45             ofType: 这个集合对象的类型,也就是<>泛型
 46          -->
 47         <collection property="orderdetails" ofType="com.mybatis.bean.Orderdetail">
 48             <id column="order_detail_id" property="id"/>
 49             <result column="item_id" property="item_id"/>
 50             <result column="item_num" property="item_num"/>
 51             <result column="item_price" property="item_price"/>
 52         </collection>
 53
 54     </resultMap>
 55
 56     <!--
 57         1 对 1 查询
 58      -->
 59     <select id="findOrderUserList" resultType="OrderUserCustom">
 60         select
 61             o.id,
 62             o.order_number,
 63             o.user_id,
 64             u.username,
 65             u.birthday
 66         from
 67             orders o
 68         inner join
 69             user u
 70         on
 71             o.user_id = u.id
 72     </select>
 73
 74     <select id="findOrderUserListByResultMap" resultMap="orderUserResultMap">
 75         select
 76             o.id,
 77             o.order_number,
 78             o.user_id,
 79             u.username,
 80             u.birthday
 81         from
 82             orders o
 83         inner join
 84             user u
 85         on
 86             o.user_id = u.id
 87     </select>
 88
 89     <!--
 90         1 对 多 查询
 91      -->
 92      <select id="findOrderItemsList" resultMap="orderUserDetailResultMap">
 93          select
 94                 o.id,
 95                 o.order_number,
 96                 o.user_id,
 97                 u.username,
 98                 u.birthday,
 99                 od.item_id,
100                 od.item_num,
101                 od.item_price,
102                 od.id as order_detail_id
103             from
104                 orders o
105             inner join
106                 user u
107             on
108                 o.user_id = u.id
109             left join
110                 orderdetail od
111             on
112                 o.id = od.orders_id
113     </select>
114 </mapper>

OrderMapper.java

 1 package com.mybatis.mapper;
 2
 3 import java.util.List;
 4
 5 import com.mybatis.bean.OrderUserCustom;
 6 import com.mybatis.bean.Orders;
 7
 8 public interface OrderMapper {
 9
10     public List<OrderUserCustom> findOrderUserList() throws Exception;
11
12     public List<Orders> findOrderUserListByResultMap() throws Exception;
13
14     public List<Orders> findOrderItemsList() throws Exception;
15
16 }

Items.java

 1 package com.mybatis.bean;
 2
 3 /**
 4  * 商品信息
 5  *
 6  * @author Thinkpad
 7  *
 8  */
 9 public class Items {
10     private int id;// 商品id
11     private String item_name;// 商品名称
12     private Float item_price;// 商品价格
13     private String item_detail;// 商品明细
14
15     public int getId() {
16         return id;
17     }
18
19     public void setId(int id) {
20         this.id = id;
21     }
22
23     public String getItem_name() {
24         return item_name;
25     }
26
27     public void setItem_name(String item_name) {
28         this.item_name = item_name;
29     }
30
31     public Float getItem_price() {
32         return item_price;
33     }
34
35     public void setItem_price(Float item_price) {
36         this.item_price = item_price;
37     }
38
39     public String getItem_detail() {
40         return item_detail;
41     }
42
43     public void setItem_detail(String item_detail) {
44         this.item_detail = item_detail;
45     }
46
47 }

Orderdetail.java

 1 package com.mybatis.bean;
 2
 3 /**
 4  * 订单明细
 5  *
 6  * @author Thinkpad
 7  *
 8  */
 9 public class Orderdetail {
10     private int id;// 主键
11     private int orders_id;// 订单id
12     private int item_id;// 商品id
13     private int item_num;// 商品数量
14     private Float item_price;// 商品价格
15
16     // 商品信息
17     private Items items;// 明细对应的商品信息
18
19     public int getId() {
20         return id;
21     }
22
23     public void setId(int id) {
24         this.id = id;
25     }
26
27     public int getOrders_id() {
28         return orders_id;
29     }
30
31     public void setOrders_id(int orders_id) {
32         this.orders_id = orders_id;
33     }
34
35     public int getItem_id() {
36         return item_id;
37     }
38
39     public void setItem_id(int item_id) {
40         this.item_id = item_id;
41     }
42
43     public int getItem_num() {
44         return item_num;
45     }
46
47     public void setItem_num(int item_num) {
48         this.item_num = item_num;
49     }
50
51     public Float getItem_price() {
52         return item_price;
53     }
54
55     public void setItem_price(Float item_price) {
56         this.item_price = item_price;
57     }
58
59     public Items getItems() {
60         return items;
61     }
62
63     public void setItems(Items items) {
64         this.items = items;
65     }
66
67 }

Orders.java

 1 package com.mybatis.bean;
 2
 3 import java.util.List;
 4
 5 /**
 6  * 订单信息
 7  *
 8  * @author Thinkpad
 9  *
10  */
11 public class Orders {
12     private int id;// 订单id
13     private int user_id;// 用户id
14     private String order_number;// 订单号
15
16     private User user;// 用户信息
17
18     private List<Orderdetail> orderdetails;// 订单明细信息
19
20     public int getId() {
21         return id;
22     }
23
24     public void setId(int id) {
25         this.id = id;
26     }
27
28     public int getUser_id() {
29         return user_id;
30     }
31
32     public void setUser_id(int user_id) {
33         this.user_id = user_id;
34     }
35
36     public String getOrder_number() {
37         return order_number;
38     }
39
40     public void setOrder_number(String order_number) {
41         this.order_number = order_number;
42     }
43
44     public User getUser() {
45         return user;
46     }
47
48     public void setUser(User user) {
49         this.user = user;
50     }
51
52     public List<Orderdetail> getOrderdetails() {
53         return orderdetails;
54     }
55
56     public void setOrderdetails(List<Orderdetail> orderdetails) {
57         this.orderdetails = orderdetails;
58     }
59
60 }

OrdersCustom.java

 1 package com.mybatis.bean;
 2
 3 public class OrdersCustom extends User {
 4
 5     private String user_id;// 用户id
 6     private String order_number;// 订单号
 7
 8     public String getUser_id() {
 9         return user_id;
10     }
11
12     public void setUser_id(String user_id) {
13         this.user_id = user_id;
14     }
15
16     public String getOrder_number() {
17         return order_number;
18     }
19
20     public void setOrder_number(String order_number) {
21         this.order_number = order_number;
22     }
23
24 }

OrderUserCustom.java

 1 package com.mybatis.bean;
 2
 3 import java.util.Date;
 4
 5 public class OrderUserCustom extends Orders {
 6
 7     private String username;
 8     private Date birthday;
 9     public String getUsername() {
10         return username;
11     }
12     public void setUsername(String username) {
13         this.username = username;
14     }
15     public Date getBirthday() {
16         return birthday;
17     }
18     public void setBirthday(Date birthday) {
19         this.birthday = birthday;
20     }
21
22 }

User.java

 1 package com.mybatis.bean;
 2
 3 import java.util.Date;
 4 import java.util.List;
 5
 6 public class User implements java.io.Serializable {
 7     private int id;
 8     private int[] ids;// 存储多个id
 9     private String username;// 用户姓名
10     private String sex;// 性别
11     private Date birthday;// 出生日期
12     private String address;// 地址
13     private String detail;// 详细信息
14     private Float score;// 成绩
15
16     // 订单信息
17     private List<Orders> orders;
18
19     public int getId() {
20         return id;
21     }
22
23     public void setId(int id) {
24         this.id = id;
25     }
26
27     public String getUsername() {
28         return username;
29     }
30
31     public void setUsername(String username) {
32         this.username = username;
33     }
34
35     public String getSex() {
36         return sex;
37     }
38
39     public void setSex(String sex) {
40         this.sex = sex;
41     }
42
43     public Date getBirthday() {
44         return birthday;
45     }
46
47     public void setBirthday(Date birthday) {
48         this.birthday = birthday;
49     }
50
51     public String getAddress() {
52         return address;
53     }
54
55     public void setAddress(String address) {
56         this.address = address;
57     }
58
59     public String getDetail() {
60         return detail;
61     }
62
63     public void setDetail(String detail) {
64         this.detail = detail;
65     }
66
67     public Float getScore() {
68         return score;
69     }
70
71     public void setScore(Float score) {
72         this.score = score;
73     }
74
75     @Override
76     public String toString() {
77         return "User [id=" + id + ", username=" + username + ", sex=" + sex
78                 + ", birthday=" + birthday + ", address=" + address
79                 + ", detail=" + detail + ", score=" + score + "]";
80     }
81
82     public List<Orders> getOrders() {
83         return orders;
84     }
85
86     public void setOrders(List<Orders> orders) {
87         this.orders = orders;
88     }
89
90     public int[] getIds() {
91         return ids;
92     }
93
94     public void setIds(int[] ids) {
95         this.ids = ids;
96     }
97
98 }

github地址:https://github.com/leechenxiang/mybatis003-order-reference-query

时间: 2024-08-07 18:07:58

mybatis 一二事(3) - 多表关联查询的相关文章

mybatis多表关联查询

mybatis多表关联查询 一:在一个对象(User )中建立另一个对象属性(userExtend): public class User implements Serializable{ private static final long serialVersionUID = 1L; /** ID */ private String id; /** 用户名 */ private String username; /** 登录密码 */ private String password; /**

Hibernate-多表关联查询结果的处理方法

Hibernate多表查询结果处理 (2014-07-06 20:45:40) 转载▼ 标签: hibernate 多表查询 结果集处理 分类: Java 如果我们在Hibernate中需要查询多个表的不同字段,那么如何来获取Hibernate多表查询的结果呢?有两种方式: 1. 对各个字段分别转化成对应类型,如下: Java代码: Query q = session.createQuery(" select members, classInfo.className " + "

RDIFramework.NET 中多表关联查询分页实例

RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为指导思想,作为异质系统整合与互操作性.分布式应用提供了可行的解决方案. 分页非常的常见,基本任何项目都会涉及到分页,这没什么好谈的,大多数我们分页对单表的分页比较多,对多表的分页我们可以通过视图来实现,当然还有其他的方式,在这儿,我以一个实例展示下使用我们的RDIFramework.NET来实现多表

Mybatis深入了解(六)----关联查询(高级映射)

一对一查询 resultType resultMap 一对多查询 resultType resultMap 多对多查询 一对一查询 resultType resultType:使用resultType实现非常简单,如果POJO中没有包括查询的列名,可以新建扩展类继承父类,并在子类中添加列名对应的属性,即可完成映射. package cn.itcast.ssm.po; /** * 订单的扩展类 * @author Administrator * */ //通过此类映射订单和用户查询的结果,让此类继

MySQL多表关联查询与存储过程

1.多表关联查询 --  **************关联查询(多表查询)**************** -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 1.1 交叉连接查询(不推荐.产生笛卡尔乘积现象:4 * 4=16,有些是重复记录) SELECT empName,deptName FROM employee,dept; -- 需求:查询员工及其所在部门(显示员工姓名,部门名称) -- 多表查询规则:1)确定查询哪些表   2)确定查询哪些字段   3)表与表之间连接条件

图解SQL多表关联查询

图解SQL多表关联查询 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习  内连接 左连接 右连接 全外连接

Yii2中多表关联查询(join、joinwith) with是不执行sql的

Yii2中多表关联查询(join.joinwith) 我们用实例来说明这一部分 表结构 现在有客户表.订单表.图书表.作者表, 客户表Customer (id customer_name) 订单表Order (id order_name customer_id book_id) 图书表 (id book_name author_id) 作者表 (id author_name) 模型定义 下面是这4个个模型的定义,只写出其中的关联 Customer class Customer extends \

mark---[mysql多表关联查询的优化方法]

对于一个网站来说,数据库的结构至关重要.即要利于存储(入库不阻塞),又要利于查询(查询不锁表).网站数据库优化经验是一个积累的过程.下面就对多表关联查询的优化方法,举例说明. 现在社区分享类网站很火,就拿方维购物分享网站举例说明吧.也是对二次开发方维购物分享网站的一点总结,高手可以飞过. 购物分享的关键表有:分享表.图片表.文件表.评论表.标签表.分类表等. 围绕分享的表就么多,哇,那也不少啊.当我们查看一个图片的详细信息时,就要显示以上表里的信息.显示图片所属的分类.给图片打的标签.图片的评论

SQL两表关联查询&批量修改字段值

SQL关联查询&修改字段,正确范例如下: --批量修改报告单位名称&更新时间 --tt和tp两表关联查询,将符合条件的tt表中的principal字段更新到tp表的ruperson字段 merge into nhis34.t_publicplaces tp using standard.t_organization tt on (tt.orgcode = tp.r_orgcode and tp.create_time > '2015-05-07 00:00:00') when mat

oracle02--多表关联查询

1. 多表(关联)查询 多表查询也称之为关联查询.多表关联查询等,主要是指通过多个表的关联来获取数据的一种方式. 1.1. 多表映射关系 一对多:A表的一行数据,对应B表中的多条.如:一个部门可以对应多个员工. 多对一:B表中的多条对应A表的一行数据.如:多个员工对应一个部门. 多对多:学生和选修课表----学生和课程对应表. 一对一:人员基本信息和人员信息扩展表. 1.2. 笛卡尔集 笛卡尔集对于我们数据库的数据查询结果的影响: 1. 数据冗余.---笛卡尔集并不是我们所需要的数据. 2. 效