今天写写user表和orders表的mybatis的高级映射,一对一映射和一对多映射

1.创建一个orders.java文件

1.1一对一映射,一条订单对应一个用户

package cn.my.mybatis.entity;

import java.util.Date;

public class Orders {

    private int id;
private int user_id;
private String number;
private Date createtime;
private String note;
private User user;//对应一个用户
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 getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Orders [id=" + id + ", user_id=" + user_id + ", number=" + number + ", createtime=" + createtime
+ ", note=" + note + ", user=" + user + "]";
}
}

1.2创建一个OrdersDaoMapper.java接口

新增一个查询方法

package cn.my.dao;

import java.util.List;

import cn.my.mybatis.entity.Orders;

public interface OrdersDaoMapper {

public List<Orders> findAll();
}

1.3.创建一个ordersMapper.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="cn.my.dao.OrdersDaoMapper"> <!-- 映射一对一 和前面的用户字段取别名类似-->
<resultMap type="cn.my.mybatis.entity.Orders" id="oneOnone">
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/> <!-- 重点在这里,映射一对一的 -->
<association property="user" javaType="cn.my.mybatis.entity.User">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="birthday" property="birthday"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap> <select id="findAll" resultMap="oneOnone">
SELECT a.*,b.username,b.birthday,b.sex,b.address FROM `orders` a,`user` b WHERE a.user_id=b.id
</select>
</mapper>

1.4.创建一个TestOrdersMapper.java文件

创建一个findAll的测试方法

package cn.my.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test; import cn.my.dao.OrdersDaoMapper;
import cn.my.mybatis.entity.Orders; public class TestOrdersMapper {
private SqlSessionFactory factory;
@Before
public void setUp() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
factory = new SqlSessionFactoryBuilder().build(inputStream);
} @Test
public void testFindAll(){
SqlSession session = factory.openSession();
OrdersDaoMapper dao = session.getMapper(OrdersDaoMapper.class);//获取mybatis的动态代码实现接口对象
List<Orders> list = dao.findAll();
session.close();
for (Orders orders : list) {
System.out.println(orders);
}
}
}

以上都弄好了,最后记住一点很重要的,SqlMapConfig.xml需要引入<mapper resource="mapper/OrdersMapper.xml"/>

    <mappers>
<mapper resource="User.xml"/>
<mapper resource="mapper/UserMapper.xml"/>
<mapper resource="mapper/OrdersMapper.xml"/>
</mappers>

运行结果:

Orders [id=3, user_id=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=User [id=1, username=王五, sex=2, birthday=null, address=null]]
Orders [id=4, user_id=1, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null, user=User [id=1, username=王五, sex=2, birthday=null, address=null]]
Orders [id=5, user_id=10, number=1000012, createtime=Thu Feb 12 16:13:23 CST 2015, note=null, user=User [id=10, username=张三, sex=1, birthday=Thu Jul 10 00:00:00 CST 2014, address=北京市]]

2.一对多的映射,一个订单对应一个用户,一个订单对应多个详细

2.1创建一个Ordersdetail.java文件

package cn.my.mybatis.entity;

public class Ordersdetail {

    private int id;
private int items_id;
private int items_num;
private int orders_id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getItems_id() {
return items_id;
}
public void setItems_id(int items_id) {
this.items_id = items_id;
}
public int getItems_num() {
return items_num;
}
public void setItems_num(int items_num) {
this.items_num = items_num;
}
public int getOrders_id() {
return orders_id;
}
public void setOrders_id(int orders_id) {
this.orders_id = orders_id;
}
@Override
public String toString() {
return "Ordersdetail [id=" + id + ", items_id=" + items_id + ", items_num=" + items_num + ", orders_id="
+ orders_id + "]";
}
}

2.2在ordersMapper.xml里面添加映射代码

<!-- extends="oneOnone"这里需要注意的是继承了上面的id名称为oneOnone的resultMap,
因为这里也包含了一对一映射,所以不需要在写了直接继承过来就好了 -->
<resultMap type="cn.my.mybatis.entity.Orders" id="DetialAll" extends="oneOnone">
<!-- 这里就是映射list集合 -->
<collection property="detailList" ofType="cn.my.mybatis.entity.Ordersdetail">
<id column="ordersdetail_id" property="id"/>
<result column="items_id" property="items_id"/>
<result column="items_num" property="items_num"/>
<result column="orders_id" property="orders_id"/>
</collection>
</resultMap>
<!-- 一对多的映射,一个订单对应一个用户,一个订单对应多个详细 -->
<select id="findDetialAll" resultMap="DetialAll">
SELECT a.*,b.username,b.birthday,b.sex,b.address,c.id ordersdetail_id,c.items_id,items_num
FROM `orders` a,`user` b,`orderdetail` c
WHERE a.user_id=b.id AND a.id=c.orders_id
</select>

2.3在OrdersDaoMapper.java添加接口方法

public List<Orders> findDetialAll();

2.4TestOrdersMapper.java中添加测试方法

 @Test
public void testfindDetialAll(){
SqlSession session = factory.openSession();
OrdersDaoMapper dao = session.getMapper(OrdersDaoMapper.class);//获取mybatis的动态代码实现接口对象
List<Orders> list = dao.findDetialAll();
session.close();
for (Orders orders : list) {
System.out.println(orders);
}
}

测试结果:

Orders [

    id=3, user_id=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null,

      user=User [

            id=1, username=王五, sex=2, birthday=null, address=null

           ],

      detailList=[

            Ordersdetail [id=1, items_id=1, items_num=1, orders_id=0],

            Ordersdetail [id=2, items_id=2, items_num=3, orders_id=0]

          ]

  ]
Orders [id=4, user_id=1, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null, user=User [id=1, username=王五, sex=2, birthday=null, address=null], detailList=[Ordersdetail [id=3, items_id=3, items_num=4, orders_id=0], Ordersdetail [id=4, items_id=2, items_num=3, orders_id=0]]]

这个mybatis高级映射就写完了,有时间我会继续往下写的,如果需要加群一起研究的可以q我,939705214,也可以添加群号581591235,也可以添加微信群号

mybatis快速入门(五)的更多相关文章

  1. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  2. MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  3. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  4. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  5. MyBatis学习总结(一)——MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  6. 【转】MyBatis学习总结(一)——MyBatis快速入门

    [转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC ...

  7. MyBatis学习总结-MyBatis快速入门的系列教程

    MyBatis学习总结-MyBatis快速入门的系列教程 [MyBatis]MyBatis 使用教程 [MyBatis]MyBatis XML配置 [MyBatis]MyBatis XML映射文件 [ ...

  8. MyBatis学习笔记(一)——MyBatis快速入门

    转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优 ...

  9. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

随机推荐

  1. web前端笔记整理一---HTML

    一 HTML标签1 页面及标记 1 HTML 文件结构 拓展名 .html或者.htm <!DOCTYPE html>// 声明 <html> html 主体 <head ...

  2. 利用CoreAnimation实现一个时间的进度条

    (个人原创,转载请注明出处 http://www.cnblogs.com/pretty-guy/p/7460334.html) 在iOS中实现进度条通常都是通过不停的设置progress来完成的,这样 ...

  3. Django编写RESTful API(三):基于类的视图

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章中,主要讲的是请求和响应,项目里面views.py中的视图函数都是基于函数的,并且我们介绍了@api_view这个很有用的装 ...

  4. Ubuntu16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano

    title: Ubuntu 16.04+CUDA8.0+CUNN5.1+caffe+tensorflow+Theano categories: 深度学习 tags: [深度学习框架搭建] --- 前言 ...

  5. postman 第4节 切换环境和设置读取变量(转)

    postman提供了environment管理功能,想要在多个环境中测试,比如在测试环境.灰度环境.生产环境等,只需要用同样的接口,切换下环境即可,非常方便.具体步骤: 切换环境 1.点击界面右上角的 ...

  6. app端性能测试笔记

     IOS不清楚,我就说说android平台吧 1.按不同维度  APP级性能.代码级性能      app这一级   GT啊  emmage都可以检测 2.代码级性能的话  有可以分几块 函数性能UI ...

  7. Linux io Model

    socket阻塞与非阻塞,同步与异步 作者:huangguisu 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调 ...

  8. 搞java的都土鳖

    spring不就几个破框架让人们下载使用吗,但是官网什么都有,就是没有下载链接.java程序员被那些垃圾框架强奸的体无完肤,还乐在其中,还什么SSH,哇哦!java好像跟企业干上了,什么企业bean, ...

  9. 汇编指令-bic(位清除)、orr(位或)(3)

    1. bic  (Bit Clear)位清除指令bic指令的格式为:bic{条件}{S}  Rd,Rn,operand bic指令将Rn 的值与操作数operand2 的反码按位逻辑"与&q ...

  10. 201521123100 《Java程序设计》第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖 ...