db.properties

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

SqlMapConfig.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 加载数据库连接参数配置文件 -->
<properties resource="db.properties" /> <!--
全局配置参数
比如 二级缓存 延迟加载...等
此全局参数会影响mybatis运行的性能,要谨慎配置
-->
<!-- <settings> -->
<!-- <setting name="" value=""/> -->
<!-- </settings> --> <!-- 定义别名 -->
<typeAliases>
<!-- 单个别名定义
type:pojo的路径
alias:别名的名称
-->
<!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
<!-- 批量别名定义
name:指定包名,将包下边的所有pojo定义别名 ,别名为类名(首字母大写或小写都行)
-->
<package name="com.mybatis.bean"/>
</typeAliases> <!-- 和spring整合后 environments配置将废除 -->
<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> <!-- 配置mapper映射文件 -->
<mappers>
<!-- resource方式
在UserMapper.xml,定义namespace为mapper接口的地址,映射文件通过namespace找到对应的mapper接口文件
-->
<!-- <mapper resource="sqlmap/UserMapper.xml" /> -->
<!-- class方式
class:指定 mapper接口的地址
遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
-->
<!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!--
批量mapper扫描
遵循规则:将mapper.xml和mapper.java文件放在一个目录 且文件名相同
主要以这样的方式为主来加载mapper
-->
<package name="com.mybatis.mapper"/> </mappers>
</configuration>

OrderMapper.xml

 <?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="com.mybatis.mapper.OrderMapper" > <!--
********
1 对 1 查询建议使用 resultType
********
--> <!-- type 为主类,即A类包含了B类作为属性,则type就写A类 -->
<resultMap type="Orders" id="orderUserResultMap">
<!--
id 和 result 这两个标签是映射到 Orders 中去的
如果有多个字段决定id唯一,则写多个id标签
-->
<id column="id" property="id"/>
<result column="order_number" property="order_number"/>
<result column="user_id" property="user_id"/> <!--
用于映射单个关联对象
property: 将关联信息映射到哪个属性
javaType: 属性映射的类型
-->
<association property="user" javaType="com.mybatis.bean.User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
</association>
</resultMap> <!--
extends: 继承上一个resultMap, 公用相同属性
-->
<resultMap type="Orders" id="orderUserDetailResultMap" extends="orderUserResultMap"> <!--
collection: 用于映射集合对象
property: 将集合信息映射到哪个属性
ofType: 这个集合对象的类型,也就是<>泛型
-->
<collection property="orderdetails" ofType="com.mybatis.bean.Orderdetail">
<id column="order_detail_id" property="id"/>
<result column="item_id" property="item_id"/>
<result column="item_num" property="item_num"/>
<result column="item_price" property="item_price"/>
</collection> </resultMap> <!--
1 对 1 查询
-->
<select id="findOrderUserList" resultType="OrderUserCustom">
select
o.id,
o.order_number,
o.user_id,
u.username,
u.birthday
from
orders o
inner join
user u
on
o.user_id = u.id
</select> <select id="findOrderUserListByResultMap" resultMap="orderUserResultMap">
select
o.id,
o.order_number,
o.user_id,
u.username,
u.birthday
from
orders o
inner join
user u
on
o.user_id = u.id
</select> <!--
1 对 多 查询
-->
<select id="findOrderItemsList" resultMap="orderUserDetailResultMap">
select
o.id,
o.order_number,
o.user_id,
u.username,
u.birthday,
od.item_id,
od.item_num,
od.item_price,
od.id as order_detail_id
from
orders o
inner join
user u
on
o.user_id = u.id
left join
orderdetail od
on
o.id = od.orders_id
</select>
</mapper>

OrderMapper.java

 package com.mybatis.mapper;

 import java.util.List;

 import com.mybatis.bean.OrderUserCustom;
import com.mybatis.bean.Orders; public interface OrderMapper { public List<OrderUserCustom> findOrderUserList() throws Exception; public List<Orders> findOrderUserListByResultMap() throws Exception; public List<Orders> findOrderItemsList() throws Exception; }

Items.java

 package com.mybatis.bean;

 /**
* 商品信息
*
* @author Thinkpad
*
*/
public class Items {
private int id;// 商品id
private String item_name;// 商品名称
private Float item_price;// 商品价格
private String item_detail;// 商品明细 public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getItem_name() {
return item_name;
} public void setItem_name(String item_name) {
this.item_name = item_name;
} public Float getItem_price() {
return item_price;
} public void setItem_price(Float item_price) {
this.item_price = item_price;
} public String getItem_detail() {
return item_detail;
} public void setItem_detail(String item_detail) {
this.item_detail = item_detail;
} }

Orderdetail.java

 package com.mybatis.bean;

 /**
* 订单明细
*
* @author Thinkpad
*
*/
public class Orderdetail {
private int id;// 主键
private int orders_id;// 订单id
private int item_id;// 商品id
private int item_num;// 商品数量
private Float item_price;// 商品价格 // 商品信息
private Items items;// 明细对应的商品信息 public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getOrders_id() {
return orders_id;
} public void setOrders_id(int orders_id) {
this.orders_id = orders_id;
} public int getItem_id() {
return item_id;
} public void setItem_id(int item_id) {
this.item_id = item_id;
} public int getItem_num() {
return item_num;
} public void setItem_num(int item_num) {
this.item_num = item_num;
} public Float getItem_price() {
return item_price;
} public void setItem_price(Float item_price) {
this.item_price = item_price;
} public Items getItems() {
return items;
} public void setItems(Items items) {
this.items = items;
} }

Orders.java

 package com.mybatis.bean;

 import java.util.List;

 /**
* 订单信息
*
* @author Thinkpad
*
*/
public class Orders {
private int id;// 订单id
private int user_id;// 用户id
private String order_number;// 订单号 private User user;// 用户信息 private List<Orderdetail> orderdetails;// 订单明细信息 public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getUser_id() {
return user_id;
} public void setUser_id(int user_id) {
this.user_id = user_id;
} public String getOrder_number() {
return order_number;
} public void setOrder_number(String order_number) {
this.order_number = order_number;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} public List<Orderdetail> getOrderdetails() {
return orderdetails;
} public void setOrderdetails(List<Orderdetail> orderdetails) {
this.orderdetails = orderdetails;
} }

OrdersCustom.java

 package com.mybatis.bean;

 public class OrdersCustom extends User {

     private String user_id;// 用户id
private String order_number;// 订单号 public String getUser_id() {
return user_id;
} public void setUser_id(String user_id) {
this.user_id = user_id;
} public String getOrder_number() {
return order_number;
} public void setOrder_number(String order_number) {
this.order_number = order_number;
} }

OrderUserCustom.java

 package com.mybatis.bean;

 import java.util.Date;

 public class OrderUserCustom extends Orders {

     private String username;
private Date birthday;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
} }

User.java

 package com.mybatis.bean;

 import java.util.Date;
import java.util.List; public class User implements java.io.Serializable {
private int id;
private int[] ids;// 存储多个id
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 出生日期
private String address;// 地址
private String detail;// 详细信息
private Float score;// 成绩 // 订单信息
private List<Orders> orders; 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 getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public Date getBirthday() {
return birthday;
} public void setBirthday(Date birthday) {
this.birthday = birthday;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} public String getDetail() {
return detail;
} public void setDetail(String detail) {
this.detail = detail;
} public Float getScore() {
return score;
} public void setScore(Float score) {
this.score = score;
} @Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address
+ ", detail=" + detail + ", score=" + score + "]";
} public List<Orders> getOrders() {
return orders;
} public void setOrders(List<Orders> orders) {
this.orders = orders;
} public int[] getIds() {
return ids;
} public void setIds(int[] ids) {
this.ids = ids;
} }

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

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

  1. JAVA入门[9]-mybatis多表关联查询

    概要 本节要实现的是多表关联查询的简单demo.场景是根据id查询某商品分类信息,并展示该分类下的商品列表. 一.Mysql测试数据 新建表Category(商品分类)和Product(商品),并插入 ...

  2. MyBatis学习总结(三)——多表关联查询与动态SQL

    在上一章中我们学习了<MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射>,这一章主要是介绍一对一关联查询.一对多关联查询与动态SQL等内容. 一.多表关联查询 表与 ...

  3. mybatis多表关联查询之resultMap单个对象

    resultMap的n+1方式实现多表查询(多对一) 实体类 创建班级类(Clazz)和学生类(Student),并在Student中添加一个Clazz类型的属性,用于表示学生的班级信息. mappe ...

  4. Spring Boot入门系列(十七)整合Mybatis,创建自定义mapper 实现多表关联查询!

    之前讲了Springboot整合Mybatis,介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.mybatis 插件自动生成的mappe ...

  5. 三、mybatis多表关联查询和分布查询

    前言 mybatis多表关联查询和懒查询,这篇文章通过一对一和一对多的实例来展示多表查询.不过需要掌握数据输出的这方面的知识.之前整理过了mybatis入门案例和mybatis数据输出,多表查询是在前 ...

  6. MyBatis 中两表关联查询MYSQL (14)

    MyBatis 中两表关联查询MYSQL 1.创建数据库表语句 2.插入测试数据 3.pom文件内容 <?xml version="1.0" encoding="U ...

  7. MyBatis 多表关联查询

    多表关联查询 一对多 单条SQL实现. //根据部门编号查询出部门和部门成员姓名public dept selectAll() thorws Excatipon; //接口的抽象方法 下面是对应接口的 ...

  8. Mybatis多表关联查询字段值覆盖问题

    一.错误展示 1.首先向大家展示多表关联查询的返回结果集 <resultMap id="specialdayAndWorktimeMap type="com.hierway. ...

  9. 多表关联查询_resultMap_集合对象

    多表关联查询_resultMap_集合对象_N+1方式实现 package com.bjsxt.mapper; import java.util.List; import com.bjsxt.pojo ...

  10. Mybatis学习系列(五)关联查询

    前面几节的示例基本都是一些单表查询,实际项目中,经常用到关联表的查询,比如一对一,一对多等情况.在Java实体对象中,一对一和一对多可是使用包装对象解决,属性使用List或者Set来实现,在mybat ...

随机推荐

  1. USACO humble

    用set构造,优先队列和堆也能够 /* ID:kevin_s1 PROG:humble LANG:C++ */ #include <iostream> #include <cstdi ...

  2. 【iOS】网络操作与AFNetworking

    众所周知.苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来非常不方便. 不仅要做区分各种请求设置各种不同的參数,并且还要常常在多线程里操作,同一时候还要对请求与返回的 ...

  3. hibernate4.3.10环境搭建

    1.首先还是引入所须要的包 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFC ...

  4. C#.NET常见问题(FAQ)-如何把资源嵌入到项目中

    首先把图像的资源添加到项目中,   选择资源文件(常规),修改一下这个资源的名字(比如叫做ButtonPic)   我们假定已经把图像放到了项目的某个文件夹下(比如Pic文件夹下,注意不是bin目录下 ...

  5. 强大的json工具:fastJson

    fastJson   FastJSON是一个很好的java开源json工具类库,相比其他同类的json类库,它的速度的确是fast,最快!但是文档做得不好,在应用前不得不亲测一些功能.   实际上其他 ...

  6. jQuery(一)引入

    一.jQuery简介 jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多) 二.安装 2.1.下载 下载地址:http://jq ...

  7. How to Analyze Java Thread Dumps

    When there is an obstacle, or when a Java based Web application is running much slower than expected ...

  8. permission denied make_sock could not bind to address 81问题解决

    在apache中绑定非http标准端口时,一直出现如下的错误提示: [root@localhost ~]# /etc/init.d/httpd start Starting httpd: (13)Pe ...

  9. MONyog_5.6.9.0 key激活|监控MYSQL

    SQLyog与MONyog是一家公司对mysql推出的商业化软件,可能大家对SQLyog很熟悉,MONyog是对mysql-server服务的监控. 脚本执行时长.安全性.等的监控! key:a668 ...

  10. Java实现可视化迷宫

    代码地址如下:http://www.demodashi.com/demo/14547.html 需求 使用深度优先算法求解迷宫路径,使用Java实现求解过程的可视化,可单步运行,形象直观. 演示效果 ...