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

简介: db.properties 1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/order 3 jdbc.

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

相关文章
|
2月前
|
Java 数据库连接 数据库
mybatis查询数据,返回的对象少了一个字段
mybatis查询数据,返回的对象少了一个字段
143 8
|
7天前
|
SQL 安全 Java
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
MyBatis-Plus 提供了一套强大的条件构造器(Wrapper),用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写繁琐的 SQL 语句,从而提高开发效率并减少 SQL 注入的风险。
10 1
MyBatis-Plus条件构造器:构建安全、高效的数据库查询
|
12天前
|
SQL Java 数据库连接
mybatis如何仅仅查询某个表的几个字段
【10月更文挑战第19天】mybatis如何仅仅查询某个表的几个字段
18 1
|
2月前
|
SQL XML Java
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
文章介绍了MyBatis中高级查询的一对多和多对一映射处理,包括创建数据库表、抽象对应的实体类、使用resultMap中的association和collection标签进行映射处理,以及如何实现级联查询和分步查询。此外,还补充了延迟加载的设置和用法。
mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用
|
4月前
|
Java 数据库连接 mybatis
Mybatis查询传递单个参数和传递多个参数用法
Mybatis查询传递单个参数和传递多个参数用法
63 11
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MybatisPlus-标准CRUD制作,新增boolean save(T t),删除 ~ delete(int id),修改 ~ update(T t),根据id查询,T getById....
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MyBatisPlus如何根据id批量查询?Required request parameter ‘id‘ for method 解决方法是看青戈大佬MybatisPlus的教程
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
MybatisPlus介绍新增用户,根据id查询,引入MybatisPlus的起步依赖,增删改查最简单的写法
|
5月前
|
Java 数据库连接 mybatis
Mybatis基于注解的一对一和一对多查询
Mybatis基于注解的一对一和一对多查询
|
6月前
|
SQL Java 数据库连接
MyBatis 查询数据库
MyBatis 查询数据库