使用Mybatis实现多表查询之多对一实例(含代码及解释)
多对一查询例子
项目目录结构(maven):
多对一查询灵魂之处解析:
创建表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