mybatis级联,一对多(1)
2017-08-09 05:45
274 查看
宽为限 紧用功 工夫到 滞塞通
今天看了mybatis级联的第二种骚操作,顿时感觉之前被坑了,就先看一下它的一对一是怎么搞的吧
再回看一下之前的那种 mybatis级联,一对一
是不是觉得这种配置非常简单粗暴
OrdersCustomMapper.java 接口文件
测试文件是这样滴
当然你也可以改一下SQL改为指定id查询,这就不是一个集合了,不知道的乍一看可能还会以为是一对多啥的…
OK,接下来我们看看这次的主题 一对多,这里就直接上这种骚操作了
先看OrdersCustomMapper.java 接口文件
嗯,定义一个查询方法。
接下来再看XML配置
注意:
看这个,orderdetail_id 它是在
还是简单介绍一下 一对多 在xml里是怎么配置的吧! 来,这里是这一句
这种级联的方式主要是通过SQL直接查询的,这里并不是通过对象直接点出来的那种。之前一对一的那种方式本人愚笨,一对多的暂时还没搞清楚。不过我还是会回来的
那再看看测试类吧
运行效果:
今天看了mybatis级联的第二种骚操作,顿时感觉之前被坑了,就先看一下它的一对一是怎么搞的吧
<!-- ############ 一对一 ############## --> <resultMap type="test.mybatis.one2many.po.Orders" id="OrdersUserResultMap"> <!-- 配置映射的订单信息 --> <!-- id:查询列中的唯一标识,订单信息中的唯一标识,如果多列组成唯一标识(如:一般数据库设计中的字典表 使用联合主键),就需要配置多个id column:订单信息的唯一标识 列 property:订单信息的唯一标识列所映射到orders中的那个属性(假如:数据库中orders表中的主键为orders_id,而实体属性名称为ordersId, 则这个配置应为<id column="orders_id" property="ordersId"/>,类似hibernate实体映射文件配置)。 --> <id column="id" property="id" /> <result column="user_id" property="userid" /> <result column="number" property="number" /> <result column="createtime" property="createTime" /> <result column="note" property="note" /> <!-- 配置映射的关联用户信息 --> <!--association:用于映射关联查询单个对象的信息 property:要将关联查询的用户信息映射到Orders中那个属性 --> <association property="user" javaType="test.mybatis.one2many.po.User"> <!-- id:关联查询用户的唯一标识 column:指定唯一标识用户信息的列 property:映射到user的那个属性 --> <id column="user_id" property="id" /> <result column="username" property="username" /> <result column="sex" property="sex" /> <result column="address" property="address" /> </association> </resultMap> <select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap"> SELECT t1.*, t2.username, t2.sex, t2.address FROM orders t1, t_user t2 WHERE t1.user_id=t2 d060 .id </select>
再回看一下之前的那种 mybatis级联,一对一
是不是觉得这种配置非常简单粗暴
OrdersCustomMapper.java 接口文件
/** * 查询订单关联查询用户信息,使用reslutMap * @return */ public List<Orders> findOrdersUserResultMap();
测试文件是这样滴
sqlSession = SqlSessionFactoryUtil.openSqlSession(); // 创建代理对象 OrdersCustomMapper oc = sqlSession.getMapper(OrdersCustomMapper.class); List<Orders> list2 = oc.findOrdersUserResultMap(); System.out.println(list2.get(0).getUser().getUsername());
当然你也可以改一下SQL改为指定id查询,这就不是一个集合了,不知道的乍一看可能还会以为是一对多啥的…
OK,接下来我们看看这次的主题 一对多,这里就直接上这种骚操作了
先看OrdersCustomMapper.java 接口文件
/** * 查询订单(关联用户)以及订单明细(一对多) * @return */ public List<OrderDetail> findOrdersAndOrderDetailResultMap();
嗯,定义一个查询方法。
接下来再看XML配置
<!-- ################ 一对多 ###################### --> <select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap"> SELECT t1.*, t2.username, t2.sex, t2.address, t3.id orderdetail_id, t3.items_id, t3.items_num, t3.orders_id FROM orders t1, t_user t2, orderdetail t3 WHERE t1.user_id = t2.id AND t3.orders_id=t1.id </select> <resultMap type="test.mybatis.one2many.po.Orders" id="ordersAndOrderDetailResultMap" extends="OrdersUserResultMap"> <!-- 订单信息 --> <!-- 关联用户信息 --> <!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <!-- 关联订单明细信息 一个订单关联查询出了多条订单明细,要使用collection映射 collection:对关联查询到的多条记录映射到集合中 property:将关联查询到的多条记录映射到orders类的那个属性 ofType:指定映射的集合属性中pojo的类型 --> <collection property="orderdetails" ofType="test.mybatis.one2many.po.OrderDetail"> <!-- id:唯一标识 property:要将订单明细的唯一标识映射到test.mybatis.one2many.po.OrderDetail的那个属性 --> <id column="orderdetail_id" property="id" /> <result column="items_id" property="itemsId" /> <result column="items_num" property="itemsNum" /> <result column="orders_id" property="ordersId" /> </collection> </resultMap>
注意:
看这个,orderdetail_id 它是在
<select id="findOrdersAndOrderDetailResultMap" resultMap="ordersAndOrderDetailResultMap">这里定义的 t3.id orderdetail_id这是个别名,所以数据库里别翻了。
还是简单介绍一下 一对多 在xml里是怎么配置的吧! 来,这里是这一句
<collection property="orderdetails" ofType="test.mybatis.one2many.po.OrderDetail">没错,就这个collection属性,一对一的是这个属性 association 使用时别混淆了。其实也很好记,Java 中Collection这个不就是集合框架的父类。
这种级联的方式主要是通过SQL直接查询的,这里并不是通过对象直接点出来的那种。之前一对一的那种方式本人愚笨,一对多的暂时还没搞清楚。不过我还是会回来的
那再看看测试类吧
sqlSession = SqlSessionFactoryUtil.openSqlSession(); // 创建代理对象 OrdersCustomMapper oc = sqlSession.getMapper(OrdersCustomMapper.class); List<OrderDetail> list3 = oc.findOrdersAndOrderDetailResultMap(); System.out.println(list3);
运行效果:
站在巨人的肩膀上
本篇博客参考的文章 mybatis入门基础(六)—-高级映射(一对一,一对多,多对多)相关文章推荐
- Mybatis一对一及一对多级联
- mybatis ---- 级联查询 一对多 (集合映射)
- Mybatis 级联查询 (一对多 )
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)
- Mybatis 一对一、一对多、多对多关联之级联添加
- MyBatis学习总结——实现级联表查询(一对一,一对多)
- mybatis ---- 级联查询 一对多 (集合映射)
- mybatis ---- 级联查询 一对多 (集合映射)mybatis中:returned more than one row, where no more than one was expected
- myBatis级联一对一,一对多及批量操作
- mybatis级联,一对多(2)
- MyBatis代码实例系列-04:MyBatis多表映射实例(一对多、多对一和多对多)
- mybatis 一对多 collection的使用
- MyBatis框架的 resultMap(自连接,一对多,多对多)映射
- mybatis用注解实现 一对一,一对多,多对多哟
- Hibernate一对多级联操作
- hibernate 一对多 级联 保存修改 删除
- mybatis一对多