Mybatis的关联查询。多对一,一对一映射

我们来看一个实例:

在数据库中创建两个表

一、创建表:     

    员工表:
    DROP TABLE IF EXISTS `tbl_employee`;

    CREATE TABLE `tbl_employee` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `user_name` varchar(255) DEFAULT NULL,
    `gender` char(1) DEFAULT NULL,
    `email` varchar(255) DEFAULT NULL,
    `d_id` int(11) DEFAULT NULL,
    PRIMARY KEY (`id`),
    KEY `fk_emp_dept` (`d_id`),
    CONSTRAINT `fk_emp_dept` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

    部门表:
    CREATE TABLE tbl_dept(
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    dept_name VARCHAR(255)
    )

二、mybatis动态代理创建相应的实体类、Mapper接口和Xml文件

  实体类:

public class tbl_dept {
    private int id;
    private String deptName;
  //自己添加get和set方法}
public class tbl_employee {
    private  int id;
    private String userName;
    private String gender;
    private String email;
    private int dId;
    private tbl_dept dept;//声明了一个tbl_dept 对象
//自己添加get和set方法 }

  mapper接口:

public interface Tbl_employeeMapper {
    public tbl_employee findTblEmployeeById(int id);

}

   1.xml 文件:使用association标签

 <resultMap type="com.neuedu.bean.tbl_employee" id="findTblEmployeeByIdMap">
        <id  column="id" property="id" />
        <result column="email" property="email" />
        <result column="gender" property="gender" />
        <result column="user_name" property="userName" />
        <result column="d_id" property="dId"/>     <!-- property 属性指定的POJO中关联的其它POJO在本POJO中的属性,JavaType指定的是关联的POJO的全类名-->      <!--id 用于指定主键,result用于指定普通的字段,column用于指定数据库字段,property用于指定POJO中的属性 -->
        <association property="dept" javaType="com.neuedu.bean.tbl_dept">
            <id column="id" property="id"/>
            <result column="dept_name" property="deptName"/>
        </association>
    </resultMap>
<select id="findTblEmployeeById" resultMap="findTblEmployeeByIdMap" parameterType="int">
        select e.id,e.email,e.gender,e.user_name,e.d_id,d.id did,d.dept_name
        from tbl_employee e ,tbl_dept d <!-- 这里使用了别名-->
        where  e.id=#{id} and d.id=e.id
    </select>

    2.xml文件使用级联查询

<resultMap type="com.neuedu.bean.tbl_employee" id="findTblEmployeeByIdMap">
        <id  column="id" property="id" />
        <result column="email" property="email" />
        <result column="gender" property="gender" />
        <result column="user_name" property="userName" />
        <result column="d_id" property="dId"/>
        <result column="did" property="dept.id"/>
        <result column="dept_name" property="dept.deptName"/>
    </resultMap>
<select id="findTblEmployeeById" resultMap="findTblEmployeeByIdMap" parameterType="int">
        select e.id,e.email,e.gender,e.user_name,e.d_id,d.id did,d.dept_name
        from tbl_employee e ,tbl_dept d
        where  e.id=#{id} and d.id=e.id
    </select>

    3.使用两个查询语句:

   <select id="selectDepartment" resultType="com.neuedu.bean.tbl_dept">
        select * from tbl_dept where id=#{id}
    </select>
    <resultMap type="com.neuedu.bean.tbl_employee" id="findTblEmployeeByIdMap">
        <id  column="id" property="id" />
        <result column="email" property="email" />
        <result column="gender" property="gender" />
        <result column="user_name" property="userName" />
        <!-- select指定上面的statement语句的id  column指定的是上面的查询语句的需要的参数   -->
        <association property="dept" select="selectDepartment" column="d_id"></association>
    </resultMap>

    <select id="findTblEmployeeById" resultMap="findTblEmployeeByIdMap" parameterType="int">
        select e.id,e.email,e.gender,e.user_name,e.d_id
        from tbl_employee e
        where  e.id=#{id}
    </select>
时间: 2024-10-10 07:24:13

Mybatis的关联查询。多对一,一对一映射的相关文章

MyBatis的关联查询

 MyBatis的关联查询 在关系型数据库中,我们经常要处理一对多,多对一和多对多的关系.   原文地址:https://www.cnblogs.com/liu13-B/p/11663195.html

SSM-MyBatis-15:Mybatis中关联查询(多表操作)

------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先简单提及一下关联查询的分类 1.一对多 1.1单条SQL操作的 1.2多条SQL操作的 2.多对一 2.1单条SQL操作的 2.1多条SQL操作的 3.多对多(类似一对多) 4.自关联(也有点类似一对多) 下面是具体实现,用真实代码带入进去(数据表和实体类和测试方法都给发出来,更多的要关注到xml中的使用) 我先把用到的数据库的脚本发一下,里面有测试数据,我折起来,需要使用的可以自行提取 /* SQLyo

Mybatis的关联查询(一对一,一对多)

一.一对一 举个例子: 实体类:User private Integer id; private String name; private Integer age; private String sex; get/set方法省略 Mapper.xml文件中定义查询语句 <mapper namespace=""> <select id="" resultType="User"> select  *  from user &l

MyBatis系列:(6)一对一映射

0.准备SQL语句(mysql) CREATE TABLE cards(     cid INT(5) PRIMARY KEY,     cnum VARCHAR(18) ); CREATE TABLE students(     sid INT(5) PRIMARY KEY,     sname VARCHAR(10),     scard_id INT(5),     CONSTRAINT students_fk FOREIGN KEY(scard_id) REFERENCES cards(

mybatis 的关联查询

1.三张表互相查询 2.嵌套查询 多次查询 原文地址:https://www.cnblogs.com/zbf-1998/p/12696968.html

【Mybatis】Mybatis关联查询一对一和一对多的实现

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主要讲了使用Mybatis实现关联查询,分为一对一和一对多两种情况,最后并对ResultMap进行一个简要说明. 一.创建表.分析 下面是两表,一个是顾客表,一个是车票表.一个顾客可以对应多张车票,但是一张车票只能对应一个顾客 t_customer:顾客表,一个顾客可以对应多张车票 t_ticket:车票表,一张车票只能对应一个顾客 1.创建数据表及插入初始数据 创建数据表 use te

Mybatis深入了解(六)----关联查询(高级映射)

一对一查询 resultType resultMap 一对多查询 resultType resultMap 多对多查询 一对一查询 resultType resultType:使用resultType实现非常简单,如果POJO中没有包括查询的列名,可以新建扩展类继承父类,并在子类中添加列名对应的属性,即可完成映射. package cn.itcast.ssm.po; /** * 订单的扩展类 * @author Administrator * */ //通过此类映射订单和用户查询的结果,让此类继

Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)

一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT NOT NULL AUTO_INCREMENT, username VARCHAR(32) NOT NULL COMMENT '用户名称', birthday DATE DEFAULT NULL COMMENT '生日', sex CHAR(1) DEFAULT NULL COMMENT '性别',

mybatis映射 一对一、一对多、多对多高级映射

1.数据库执行脚本 创建数据库表代码: 1 CREATE TABLE items ( 2 id INT NOT NULL AUTO_INCREMENT, 3 itemsname VARCHAR(32) NOT NULL COMMENT '商品名称', 4 price FLOAT(10,1) NOT NULL COMMENT '商品定价', 5 detail TEXT COMMENT '商品描述', 6 pic VARCHAR(64) DEFAULT NULL COMMENT '商品图片', 7