当前位置: 首页 > news >正文

郑州建设教育培训中心网站初一下电脑课书做网站

郑州建设教育培训中心网站,初一下电脑课书做网站,建筑企业公司简介怎么写,成都软件开发工资一般多少一对一映射 预置条件 在某网络购物系统中,一个用户只能拥有一个购物车,用户与购物车的关系可以设计为一对一关系 数据库表结构(唯一外键关联) 创建两个实体类和映射接口 package org.example.demo;import lombok.Data;import …

 一对一映射

预置条件

在某网络购物系统中,一个用户只能拥有一个购物车,用户与购物车的关系可以设计为一对一关系

数据库表结构(唯一外键关联) 

 

创建两个实体类和映射接口 

 

package org.example.demo;import lombok.Data;import java.util.List;@Data
public class User {private Integer userId;private String userName;private String password;private Cart cart;private List<Order> orderList;
}
package org.example.demo;import lombok.Data;@Data
public class Cart {private Integer cartId;private double price;
}
实现根据用户id查询出所有用户信息,包括该用户的购物车信息 
package org.example.mapper;import org.example.demo.User;import java.util.List;public interface UserMapper {User findUserAndCartByUserId(Integer userId);
}
 MyBatis中处理一对一关联关系的方法有四种
使用自动映射处理一对一关系

使用自动映射处理一对一关系,也就是通过别名自动将值匹配到对应的字段上 

<?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="org.example.mapper.UserMapper"><select id="findUserAndCartByUserId" resultType="com.mybatis.entity.User">select*from t_user uinner join t_cart c on u.user_id = c.user_idwhere u.user_id = #{userId};</select>
</mapper>

复杂的属性映射时,可以多层嵌套,比如将cart表中的cart_id字段映射到Cart.id属性上 

使用resultMap配置一对一映射

使用这种方式同自动映射方式相似之处为,Cart中的属性配置部分使用了”Cart.”前缀

<?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="org.example.mapper.UserMapper"> <resultMap id="userMap" type="org.example.demo.User"><id property="userId" column="user_id"/><result property="userName" column="user_name"/><result property="password" column="password"/><result property="cart.cartId" column="cart_id"/><result property="cart.price" column="price"/></resultMap>   <select id="findUserAndCartByUserId" resultMap="userMap">select*from t_user uinner join t_cart c on u.user_id = c.user_idwhere u.user_id = #{userId};</select>
</mapper>
使用association元素配置一对一映射

association元素用于和一个复杂的类型进行关联

association元素包含以下属性

property:对应实体类中的属性名,必填项

javaType:属性对应的java类型,可选项

resultMap:可以直接使用现有的resultMap,而不需要在这里配置,可选项

    <resultMap id="userMap" type="org.example.demo.User"><id property="userId" column="user_id"/><result property="userName" column="user_name"/><result property="password" column="password"/><association property="cart"><id property="cartId" column="cart_id"/><result property="price" column="price"/></association></resultMap><select id="selectUserById" resultMap="userMap">select * from t_user where user_id = #{userId};</select>
association元素的嵌套查询

association元素的嵌套查询常用的属性如下

select:另一个查询映射的statement id,MyBatis会额外执行这个查询获取嵌套对象

column:列名,将主查询中列的结果作为嵌套查询的参数,column=“{prop1=col1,prop2=col2}”,其中prop1和prop2将作为嵌套查询的参数

fetchType:数据加载方式,可选值为lazy和eager,分别为延迟加载和积极加载,会覆盖全局的lazyLoadingEnable配置

    <resultMap id="userMap" type="org.example.demo.User"><id property="userId" column="user_id"/><result property="userName" column="user_name"/><result property="password" column="password"/><association property="cart" column="user_id" select="findCartbyUserId"fetchType="lazy"/></resultMap><resultMap id="cartMap" type="org.example.demo.Cart"><id property="cartId" column="cart_id"/><result property="price" column="price"/></resultMap><select id="findUserAndCartByUserId" resultMap="userMap">select * from t_suer u where user_id = #{user_id};</select><select id="findCartbyUserId" resultMap="cartMap">select * from t_cart c where c.user_id = #{user_id};</select>

嵌套查询会多执行SQL,当查询N条数据时,就会出现N+1次查询问题

为了解决N+1次查询问题,可以设置延迟加载策略,将association元素的fetchType属性设置为lazy 

设置为延迟加载的对象,默认情况下,当调用该对象的equals、hashCode、toString、clone方法时,就会加载该对象的全部数据

对比四种方式

前面的三种方式都属于“关联的嵌套结果映射“,即通过一次SQL查询根据表或指定的属性映射到不同的对象中

最后一种方式属于“关联的嵌套查询”,利用简单的SQL语句,通过多次查询得到想要的结果,可实现延迟加载效果

 

 

 

http://www.yayakq.cn/news/907094/

相关文章:

  • 营销网站设计实验居然之家装修公司官网
  • asp.net网站开发第一步微信android平板版
  • 网站头部导航代码服饰网站模板
  • 重庆网站建设吧网站的建设求职简历
  • 建站公司咨询网站后台用esayui做
  • 免费发布卖车信息网站网站备案幕布照规范
  • 福田网站建设设计公司哪家好网站跳出率 查询
  • 网站建设企业站模板上海知名家装公司有哪些
  • 广西玉林网站建设正规公司织梦网站模板还原的文件在哪里
  • 酒店网站模板杭州市钱江新城投资集团有限公司征集网站建设合作单位的公告
  • iis6建设网站建设网站的要求
  • 新上线网站如何做搜索引擎王者荣耀官方网站
  • 宜春市住房和城乡建设局网站白城网页制作
  • p2p网上贷款网站建设方案.docx招标网站平台有哪些
  • 进什么网站接模具做做企业网站收费多少钱
  • 秦皇岛建网站云南网站建设崇左
  • 想做个网站要多少钱微信朋友圈推广怎么做网站
  • 网站建设的计划书哪些企业需要做网站
  • 四川城乡住房城乡建设厅网站首页银川网站建设网络
  • 广州木马网站建设公司怎么样搜索引擎和浏览器
  • 网站开发界面wordpress图文直播插件
  • 常州外贸集团 网站建设企业邮箱格式是什么样的
  • 申请了域名先做网站还是先备案网页设计 网站
  • 设计海报网站移动网站开发语言
  • wordpress怎么修改网站标题网站建设管理自查报告
  • 佛山网站建设及优化公司汽车销售公司的网站怎么做
  • 企业建设网站需要注意什么手续东莞网络科技有限公司
  • 网页设计工作室网站甘肃网站怎样备案
  • 设计网站都有哪些用asp做网站需要什么软件
  • 菏泽建设公司网站做网站 图片格式