欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > SSM(一对多和多对多)

SSM(一对多和多对多)

2024/10/24 16:14:47 来源:https://blog.csdn.net/m0_74304371/article/details/143205191  浏览:    关键词:SSM(一对多和多对多)

一对多:

背景:

一个用户有多个订单,订单的用户只有一个人。

属性:

首先是在User实体类里面封装一个Order(订单类)的集合。

 userMapper接口:

    /*** 查看该用户的全部订单* 一对多的关系 因此返回的是 List类型* @return*/List<User>findAllWithOrders();

userMapper.xml:

在之前一对一的时候,用的是association,但是咱们这个是一对多的关系,返回的是集合,用的是collection标签。里面的属性和之前的association里面是一样的。

<?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.findyou.mapper.UserMapper"><resultMap id="userMap" type="com.findyou.entity.User"><!--这个是属性是集合的 其他对象--><id column="id" property="id"/><result column="username" property="username"/><!--这里是一对多 属性是集合类别的 因此 用的是 collection --><collection property="ordersList" ofType="Orders"><id column="oid" property="id"/><result column="ordertime" property="ordertime"/><result column="total" property="total"/></collection></resultMap><select id="findAllWithOrders" resultMap="userMap">select u.*, o.id oid, ordertime, total, uid from user u left join orders o on u.id = o.uid;</select></mapper>

测试类:

    /*** 一对多的查询*/@Testpublic void test02() {InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException e) {throw new RuntimeException(e);}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession(); /*默认的是手动的提交 如果里面的参数是true的话 就为自动提交了*/// 这个是获取mapper对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.findAllWithOrders();for (User user : userList) {System.out.println(user);}sqlSession.close();}

运行的结果:

多对多:

 背景:

一个用户可能有多个职位,每个职位可能对应多个用户。

多对多可以拆分为两个一对多的。

属性:

首先是在User实体类里面封装一个occupation(职称类)的集合。

userMapper接口:

    /*** 查找用户的职业 一个用户对应多个职业* @return*/List<User> findAllWithOccupation();

 userMapper.xml:

    <resultMap id="occupationMap" type="com.findyou.entity.User"><!--这个是属性是集合的 其他对象--><id column="id" property="id"/><result column="username" property="username"/><collection property="occupationList" ofType="Occupation"><id column="oid" property="id"/><result column="name" property="name"/><result column="d" property="desc"/></collection></resultMap><select id="findAllWithOccupation" resultMap="occupationMap">select u.*, oc.id oid, name, oc.desc d from user u left join user_occupation uo on u.id = uo.useridleft join occupation oc on oc.id = uo.occupation_id;</select>

测试类:

    /*** 多对多的查询* 可以分为两个1对多的 因此这个写法 和上面的是类似的*/@Testpublic void test03() {InputStream inputStream = null;try {inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");} catch (IOException e) {throw new RuntimeException(e);}SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = sqlSessionFactory.openSession(); /*默认的是手动的提交 如果里面的参数是true的话 就为自动提交了*/// 这个是获取mapper对象UserMapper userMapper = sqlSession.getMapper(UserMapper.class);List<User> userList = userMapper.findAllWithOccupation();for (User user : userList) {System.out.println(user);}sqlSession.close();}

运行结果:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com