mybatis快速入门(五)

今天写写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

时间: 2024-10-07 00:07:58

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

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

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示: 2.添加相应的jar包 [mybat

尚硅谷-mybatis快速入门

1. Mybatis介绍(ibatis) MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. JDBC--->dbutils(自动封装)--->MyBatis--->Hibernate 2. mybatis快速入

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

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

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

[转]MyBatis学习总结(一)——MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通jav

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

一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备开发环境 1.创建测试项目,普通java项目或者是JavaWeb项目均可,如下图所示: 2.添加相应

mybatis介绍和mybatis快速入门

1.mybatis介绍 mybatis是支持普通sql查询,存储过程和该机映射的持久层(把java对象存储到数据库中)框架.几乎消除jdbc代码和手动设置参数以及对结果集的检索封装.mybatis可以使用映射文件xml,接口dao来操作实体类bean. 2.mybatis快速入门 1.建立数据库表users create database mybatis; use mybatis; CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAM

MyBatis快速入门经典

简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis.MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java

mybatis快速入门(六)

前面mybatis的入门程序基本上都写完了,就看大家的灵活运用了,今天来吧前面的整合一下封装一个公共的BaseDao 只需要把前面的改造下然后创建一个BaseDao的接口,其它的继承BaseDao接口就可以了就可以了,这个是最简单了,不废话了直接贴代码了 1.首先创建一个BaseDao package cn.my.dao; import java.util.List; /** * 将公用方法提取出来 * @author Administrator * * @param <T> */ publi