使用Mybatis实现多表查询之多对一实例(含代码及解释)

多对一查询例子

项目目录结构(maven):

使用Mybatis实现多表查询之多对一实例(含代码及解释)

多对一查询灵魂之处解析:

使用Mybatis实现多表查询之多对一实例(含代码及解释)

创建表t_dept:(一方)

CREATE TABLE `t_dept` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

 

INSERT INTO `t_dept` VALUES ('1', '学术部');

INSERT INTO `t_dept` VALUES ('2', '销售部');

创建表t_user:(多方,本来应该是员工对应部门,但是部门的表之前用过了,这里用user代替)

CREATE TABLE `t_user` (

  `id` int(11) NOT NULL AUTO_INCREMENT,

  `name` varchar(20) DEFAULT NULL,

  `dept_id` int(11) NOT NULL,

  PRIMARY KEY (`id`),

  KEY `dept_id` (`dept_id`),

  CONSTRAINT `t_user_ibfk_1` FOREIGN KEY (`dept_id`) REFERENCES `t_dept` (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

 

INSERT INTO `t_user` VALUES ('1', '熊落落', '1');

INSERT INTO `t_user` VALUES ('2', '*鹏', '2');

INSERT INTO `t_user` VALUES ('3', '崔美娟', '1');

创建实体类User:

package com.xiongluoluo.bean;

import lombok.*;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private int id;
    private String name;
    private Department department;
}

创建实体类Department:

package com.xiongluoluo.bean;

import lombok.*;

import java.util.List;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Department {
    private int id;
    private String name;
    private List<User> list;
}

创建UserMapper:

package com.xiongluoluo.mapper;

import com.xiongluoluo.bean.User;

import java.util.List;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
public interface UserMapper {
    public List<User> findAllUser();
}

创建UserService:

package com.xiongluoluo.service;

import com.xiongluoluo.bean.User;

import java.util.List;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
public interface UserService {
    public List<User> getAllUser();
}

创建UserServiceImpl:

package com.xiongluoluo.service.impl;

import com.xiongluoluo.bean.User;
import com.xiongluoluo.mapper.UserMapper;
import com.xiongluoluo.service.UserService;
import com.xiongluoluo.utils.MybatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
public class UserServiceImpl implements UserService{

    public List<User> getAllUser() {
        SqlSession sqlSession = MybatisUtil.getSqlSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> list = userMapper.findAllUser();
        return list;
    }
}

创建测试类:

package com.xiongluoluo.test;

import com.xiongluoluo.bean.User;
import com.xiongluoluo.service.UserService;
import com.xiongluoluo.service.impl.UserServiceImpl;
import org.junit.Test;

import java.util.List;

/**
 * Created by Administrator on 2019/12/19 0019.
 */
public class MybatisTest {
    @Test
    public void testFindAllUser(){
        UserService userService = new UserServiceImpl();
        List<User> list = userService.getAllUser();
        for(User u : list){
            System.out.println(u);
        }
    }
}

mybatis-config.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"></properties>
    <typeAliases>
        <package name="com.xiongluoluo.bean"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driverClassName}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/xiongluoluo/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.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.xiongluoluo.mapper.UserMapper">

    <resultMap id="myResultMap" type="User">
        <id property="id" column="id"/>
        <result property="name" column="name"/>

        //这是多对一查询的灵魂之处
        <association property="department" column="dept_id" javaType="Department">
            <id property="id" column="did"/>
            <result property="name" column="name"/>
        </association>
    </resultMap>


    <select id="findAllUser" resultMap="myResultMap">
        select u.id,u.name,d.id did,d.name from t_user u left join t_dept d on u.dept_id = d.id
    </select>
</mapper>


db.properties文件:

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test2
username=root
password=1234