Mybatis使用resultType实现一对一查询

引入mybatis相关jar,本示例是基于3.2.7版本,引入相关数据库驱动jar

创建两张数据库表

user表

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) NOT NULL COMMENT ‘用户姓名‘,
  `birthday` date DEFAULT NULL COMMENT ‘出生日期‘,
  `sex` char(1) DEFAULT NULL COMMENT ‘性别‘,
  `address` varchar(256) DEFAULT NULL COMMENT ‘住址‘,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=35 DEFAULT CHARSET=utf8

orders表

CREATE TABLE `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL COMMENT ‘下单用户id号‘,
  `number` varchar(32) NOT NULL COMMENT ‘用户订单号‘,
  `createtime` datetime NOT NULL COMMENT ‘创建订单的时间‘,
  `note` varchar(100) DEFAULT NULL COMMENT ‘备注信息‘,
  PRIMARY KEY (`id`),
  KEY `FK_orders_1` (`user_id`),
  CONSTRAINT `FK_orders_id` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

创建user的javabean对象

import java.util.Date;

public class User {
    private int id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    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 Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", birthday=" + birthday + ", sex=" + sex + ", address="
                + address + "]";
    }

}

创建user的扩展类匹配输出结果

import cn.zqq.bean.User;

public class UserCustom extends User{
    private String number;
    private Date craetetime;
    private String note;
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public Date getCraetetime() {
        return craetetime;
    }
    public void setCraetetime(Date craetetime) {
        this.craetetime = craetetime;
    }
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }

    @Override
    public String toString() {
        return "UserCustom [number=" + number + ", craetetime=" + craetetime + ", note=" + note +"id=" + super.getId() + ", username=" + super.getUsername() + ", birthday=" + super.getBirthday() + ", sex=" + super.getSex() + ", address="
                + super.getAddress() + "]";
    }
}

编写SqlMapConfig.xml使其在classpath中,数据库相关配置以mysql为例

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="****" />
            </dataSource>
        </environment>
    </environments>

    <mappers>
       //基于包的扫描对相应的mapper.xml的读取
        <package name="对应的包名"/>
    </mappers>
</configuration>

编写UserCustomOrder.xml(mapper.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">//namespace的名字和对应的接口全类名相同
<mapper namespace="cn.zqq.one2one.UserCustomOrder">
    <select id="findAllInfoUserOrders" resultType="包名.UserCustom">
        SELECT * FROM USER,orders WHERE user.id=orders.user_id;
    </select>
</mapper>

编写对应的UserCustomOrder.java类名和mapper.xml的具体名字对应,

import java.util.List;

public interface UserCustomOrder {
    public List<UserCustom> findAllInfoUserOrders()throws Exception;
}

编写测试类

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;
public class TestOne2One {

    SqlSession sqlSession = null;

    @Before
    public void beforesourse() throws IOException{    //加载配置文件
        String resource = "SqlMapConfig.xml";    //获取相关文件的流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //得到sqlSession工厂
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);    //得到sqlSession
        sqlSession = sqlSessionFactory.openSession();
    }

    @Test
    public void findAllInfoUserOrders() throws Exception {        //使用mapper代理获得实例结果
        UserCustomOrder order = sqlSession.getMapper(UserCustomOrder.class);
        List<UserCustom> userOrders = order.findAllInfoUserOrders();
        for (UserCustom userCustom : userOrders) {
            System.out.println(userCustom);
        }    sqlSession.close();  } }

运行上边的程序便可得到结果,简单应用,正在学习中

时间: 2024-08-16 11:05:10

Mybatis使用resultType实现一对一查询的相关文章

mybatis学习笔记(10)-一对一查询

mybatis学习笔记(10)-一对一查询 mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实现一对一查询小结 本文使用两种方式(resultType和resultMap)实现一对一查询,查询订单信息,关联查询创建订单的用户信息 resultType实现 sql语句 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询使用内连接?还是外连接? 因为orders表中有一个外键(user_id),通过外键关联查询

Mybatis使用resultMap实现一对一查询

数据库设计,部分源文件请参照resulttype那篇随笔,不再次累赘. 创建Orders.java把User.java作为属性加入 import java.util.Date; import cn.zqq.bean.User; public class Orders{ private String number; private Date craetetime; private String note; private User user; public User getUser() { ret

MyBatis Review——使用resultType和resultMap实现一对一查询

例如: 查询订单信息,关联查询创建订单的用户信息. 查询语句: SELECT orders.*, USER .username ,USER .sex, USER .address FROM orders, USER WHERE orders.user_id = USER .id 查询结果: 1,使用resultType接受输出结果 用户信息: 订单信息: 用于接收结果的pojo: 为了将查询结果映射到pojo中,pojo必须包括所有查询列名.在原始orders对象不能接受所有查询字段的时候,定义

Mybatis实现一对一查询 对ResultType和ResultMap分析

实现一对一查询: ResultMap:使用ResultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加 列名对应的属性,即可完成映射. 如果没有查询结果的特殊要求建议使用ResultMap. ResultMap:需要单独定义ResultMap,实现有点麻烦,如果对查询结果又特殊要求,使用ResultMap 可以完成将关联查询映射pojo的属性中. (ResultMap可以实现延迟加载,而ResultMap无法实现延迟加载) 原文地址:https://www.cnblogs.c

【MyBatis学习08】高级映射之一对一查询

从这一篇博文开始,将总结一下mybatis中的几个高级映射,即一对一.一对多.多对多查询,这篇先总结一下mybatis中的一对一查询. 为了模拟这些需求,事先要建立几个表,不同的表之间将对应上面提到的不同的映射,为此,我建立4个表,如下: DROP TABLE IF EXISTS `items`; DROP TABLE IF EXISTS `orders`; DROP TABLE IF EXISTS `user`; DROP TABLE IF EXISTS `orderdetail`; /*it

mybatis0202 一对一查询 resultType实现

一对一查询 查询订单信息和用户信息 创建po类 基础的单表的 po(数据库类)类:Items.java, Orderdetail.java, Orders.java, User.java 一对一查询映射的pojo(工具类,用于sql语句接收返回的对象) 创建pojo包括 订单信息和用户信息,resultType才可以完成映射. 创建OrderCustom作为自定义pojo,继承sql查询列多的po类. 接口:OrdersMapperCustom.java package cn.itcast.my

20Mybatis_订单商品数据模型_一对一查询——resultType和resultMap两种方式以及两种方式的总结

上一篇文章分析了数据模型,这篇文章就给出一个需求,这个需求是一对一查询,并完成这个需求. -------------------------------------------------------------------------------------------------------------------------------------------- 需求: 查询订单信息,关联查询创建订单的用户信息. 记住:用Mybatis开发的顺序就是 1.写sql语句 2.创建pojo类来

第八节:mybatis关联查询之一对一查询

一对一也就是 A 表的一条记录对应 B 表的一条记录,下面的测试数据中,从employee 表来看,一个员工对应一个部门,是一对一关系,如果从部门角度来看,则是一对多的关系,一个部门对应多个员工,本节主要研究一对一的关系. 1,数据表建立 新建数据表department,有两个字段,插入两条数据如下: id dept_name 1 CIA 2 FSB 新建数据表employee,有三个字段,其中dept_id是外键,关联department表的主键id.插入数据如下: id last_name

Mybatis多表查询之一对一查询的多种实现-XML配置

Mybatis 中对于多表查询提供了非常强大的实现方式,主要是通过resultMap的结果映射对于多表查询后的返回值进行封装,让我们来看一下官网上对于resultMap的解释:resultMap 元素是 MyBatis 中最重要最强大的元素.它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作.实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码.R