目录
1.准备实体类:
多对一写对象,Groups实体类作为用户User实体类的属性,并写出对应的get、set方法,不要在toString方法重写
2.查询方法一:通过两条sql语句查询。
resultMap 如果返回值中有其他对象的属性时使用
属性 id id的值=selecct标签内resultMap的值
属性type 查询结果的返回类型
子标签:
id 表中的主键
属性column 数据表中的字段名
属性property 实体类中的属性名
result:其他属性
属性column 数据表中的字段名
属性property 实体类中的属性名方式一:发送多次sql语句,每张表进行单独查询,通过select属性向对方映射文件
中进行查询
association——关联标签 出现在“多”方
属性column 数据表中的外键名
属性property 实体类中的另一个表的实体类作为属性的属性名
属性select 需要指定“命名空间.id”去查询关联对象
属性javaType 查询结束之后的返回类型
<mapper namespace="com.zx.dao.UserDao">
<!--resultType返回单个对象的属性
resultMap返回关联对象的属性
id属性值 = select标签内resultMap的值。
type属性值 方法返回值的类型。
子标签:
id 主键标识(column——表中的字段,property——实体类中对应的属性)
result 普通属性(column——表中的字段,property——实体类中对应的属性)
-->
<select id="getUserById" resultMap="userResult">
select * from user where id=#{id}
</select>
<resultMap id="userResult" type="com.zx.pojo.User">
<id column="id" property="id"></id>
<result column="uname" property="uname"></result>
<result column="pwd" property="pwd"></result>
<result column="age" property="age"></result>
<!--association关联映射标签
column属性——表中的字段(外键)
property属性——user表中groups属性名。
select属性——查询被关联的一方,值为“namespace.id”
javaType属性——查询被关联一方查询的返回值类型。
-->
<association column="gid" property="groups" select="com.zx.dao.GroupsDao.getGroupById" javaType="com.zx.pojo.Groups">
</association>
</resultMap>
</mapper>
3.实例展示:
问题描述:通过用户id查询用户信息,以及用户对应的分组信息。
用户表与分组表关系:
(1)UserDao层——UserDao.java:
package com.zx.dao;
import com.zx.pojo.User;
public interface UserDao {
/*
多对一
*/
//查询指定id的用户信息以及分组信息
User getUserById(int id);
}
(2)UserDao的映射文件——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.zx.dao.UserDao">
<!--resultType返回单个对象的属性
resultMap返回关联对象的属性
id属性值 对应select标签内resultMap的值。
type属性值 方法返回值的类型。
子标签:
id 主键标识(column——表中的字段,property——实体类中对应的属性)
result 普通属性(column——表中的字段,property——实体类中对应的属性)
-->
<select id="getUserById" resultMap="userResult">
select * from user where id=#{id}
</select>
<resultMap id="userResult" type="com.zx.pojo.User">
<id column="id" property="id"></id>
<result column="uname" property="uname"></result>
<result column="pwd" property="pwd"></result>
<result column="age" property="age"></result>
<!--association关联映射标签
column属性——表中的字段(外键)
property属性——user表中groups属性名。
select属性——查询被关联的一方,值为“namespace.id”
javaType属性——查询被关联一方查询的返回值类型。
-->
<association column="gid" property="groups" select="com.zx.dao.GroupsDao.getGroupById" javaType="com.zx.pojo.Groups">
</association>
</resultMap>
</mapper>
(3)GroupsDao层——GroupsDao.java:
package com.zx.dao;
import com.zx.pojo.Groups;
public interface GroupsDao {
Groups getGroupById(int gid);
}
(4)GroupsDao对应的映射文件——GroupsMapper
<?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.zx.dao.GroupsDao">
<select id="getGroupById" resultType="com.zx.pojo.Groups">
select * from groups where gid=#{gid}
</select>
</mapper>
(5)mybatis-config.xml中的映射路径(sql语句路径):
<mappers>
<mapper resource="com/zx/dao/UserMapper.xml"></mapper>
<mapper resource="com/zx/dao/GroupsMapper.xml"></mapper>
</mappers>
(6)运行测试:
@Test
public void getUserById(){
SqlSession sqlSession = MybatisUtil.getSqlSession();
UserDao userDao = sqlSession.getMapper(UserDao.class);
User user = userDao.getUserById(7);
System.out.println(user);
System.out.println(user.getGroups());
}
测试结果: