目录
1.准备实体类
一对多写集合,用户实体User的集合List<User>作为分组实体类Groups的属性,并写出对应的get、set方法,不要在toString方法重写。
2.查询方式一:通过两条简单sql语句查询
resultMap 如果返回值中有其他对象的属性时使用
属性 id id的值=selecct标签内resultMap的值
属性type 查询结果的返回类型
子标签:
id 表中的主键
属性column 数据表中的字段名
属性property 实体类中的属性名
result:其他属性
属性column 数据表中的字段名
属性property 实体类中的属性名方式一:发送多次sql语句,每张表进行单独查询,通过select属性向对方映射文件
中进行查询
collection——集合映射标签 出现在“一”方属性column 数据表中关联的外键名
属性property 实体类中的另一个表的实体类作为集合属性的属性名
属性select: 需要指定“命名空间.id”去查询关联对象
属性ofType: 查询结束之后的返回类型
3.实例展示
(1)问题描述
通过分组id,查出该该分组信息(Groups表),以及该组的所有用户信息(User表)。
(2)数据库表关系:
(3)代码实现:
Groups实体类关键部分展示:
public class Groups { private int gid; private String gname; private List<User> users; public List<User> getUsers() { return users; } public void setUsers(List<User> users) { this.users = users; } }
GroupsDao方法:
//方式一——通过两条sql语句查询 Groups getGroupById(int gid);
GroupsMapper文件:
<mapper namespace="com.zx.dao.GroupsDao"> <!--方式一--> <select id="getGroupById" resultMap="groupResult"> select * from groups where gid=#{gid} </select> <resultMap id="groupResult" type="com.zx.pojo.Groups"> <id column="gid" property="gid"></id> <result column="gname" property="gname"></result> <!--collection集合映射 column为查询关联表的外键 property查询关联表的实体类在该实体类中的属性名。 --> <collection column="gid" property="users" select="com.zx.dao.UserDao.getUserByGid" ofType="com.zx.pojo.User"> </collection> </resultMap> </mapper>
UserDao层方法:
//通过gid查询用户 List<User> getUserByGid(int gid);
UserMapper文件
<mapper namespace="com.zx.dao.UserDao"> <select id="getUserByGid" resultType="com.zx.pojo.User"> select * from user where gid=#{gid} </select> </mapper>
运行测试:
public class GroupDaoTest { @Test public void getGroupByIdTest(){ SqlSession sqlSession = MybatisUtil.getSqlSession(); GroupsDao groupsDao = sqlSession.getMapper(GroupsDao.class); Groups group = groupsDao.getGroupById(2); System.out.println(group); System.out.println(group.getUsers()); } }
运行结果: