1  订单商品数据模型

以订单商品数据为模型,来对mybaits高级关系映射进行学习。

aaarticlea/png;base64,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" alt="" />

aaarticlea/png;base64,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" alt="" />

1.1     数据模型分析思路

1、每张表记录的数据内容

分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程。

2、每张表重要的字段设置

非空字段、外键字段

3、数据库级别表与表之间的关系

外键关系

4、表与表之间的业务关系

在分析表与表之间的业务关系时一定要建立 在某个业务意义基础上去分析。

1.2     数据模型分析

用户表user:

记录了购买商品的用户信息

订单表:orders

记录了用户所创建的订单(购买商品的订单)

订单明细表:orderdetail:

记录了订单的详细信息即购买商品的信息

商品表:items

记录了商品信息

表与表之间的业务关系:

在分析表与表之间的业务关系时需要建立 在某个业务意义基础上去分析。

先分析数据级别之间有关系的表之间的业务关系:

usre和orders:

user---->orders:一个用户可以创建多个订单,一对多

orders--->user:一个订单只由一个用户创建,一对一

orders和orderdetail:

orders---》orderdetail:一个订单可以包括 多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系

orderdetail--> orders:一个订单明细只能包括在一个订单中,一对一

orderdetail和itesm:

orderdetail---》itesms:一个订单明细只对应一个商品信息,一对一

items--> orderdetail:一个商品可以包括在多个订单明细 ,一对多

再分析数据库级别没有关系的表之间是否有业务关系:

orders和items:

orders和items之间可以通过orderdetail表建立 关系。

sqlMapConfig.xml配置

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 加载属性文件 -->
<properties resource="db.properties">
<!--properties中还可以配置一些属性名和属性值 -->
<!-- <property name="jdbc.driver" value=""/> -->
</properties> <!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制由mybatis-->
<transactionManager type="JDBC" />
<!-- 数据库连接池,由mybatis管理-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 加载 映射文件 -->
<mappers> <!--通过resource方法一次加载一个映射文件 -->
<!-- <mapper resource="mapper/UserMapper.xml"/> --> <!-- 通过mapper接口加载单个 映射文件
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> --> <!-- 批量加载mapper
指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
上边规范的前提是:使用的是mapper代理方法
-->
<package name="cn.itcast.mapper"/> </mappers> </configuration>

1       一对一查询

1.1     需求

查询订单信息,关联查询创建订单的用户信息

1.2     resultType

1.2.1     sql语句

确定查询的主表:订单表

确定查询的关联表:用户表

关联查询使用内链接?还是外链接?

由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内链接。

 select
orders.*,
user.username,
user.sex,
user.address
from
orders,
user
where orders.user_id=user.id

1.2.2     创建pojo

将上边sql查询的结果映射到pojo中,pojo中必须包括所有查询列名。

原始的Orders.java不能映射全部字段,需要新创建的pojo。

创建 一个pojo继承包括查询字段较多的po类。

 //通过此类映射订单和用户查询结果,让此类继承包括 字段较多的pojo类
public class OrdersCustom extends Orders { //添加用戶属性
/* user.username,
user.sex,
user.address */ private String username; private String sex; private String address;

1.2.3     mapper.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="cn.itcast.mapper.OrdersMapperCustom">
<select id="findOrdersUser" resultType="cn.itcast.po.OrdersCustom">
select
orders.*,
user.username,
user.sex,
user.address
from
orders,
user
where orders.user_id=user.id
</select> </mapper>

1.2.4     mapper.java

 public interface OrdersMapperCustom {

     //查询订单管理查询的用户信息
public List<OrdersCustom> findOrdersUser() throws Exception; }

1.3     resultMap

1.3.1     sql语句

同resultType实现的sql

1.3.2     使用resultMap映射的思路

使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

1.3.3     需要Orders类中添加user属性

 public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note; private User user;

1.3.4     mapper.xml

1.3.4.1              定义resultMap

 <!-- 订单查询关联用户的resultMap
将整个查询的结果映射到cn.itcast.mybatis.po.Orders中
-->
<resultMap type="cn.itcast.po.Orders" id="OrdersUserResultMap">
<!-- 配置映射的订单信息 -->
<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
column:订单信息的唯 一标识 列
property:订单信息的唯 一标识 列所映射到Orders中哪个属性
-->
<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="cn.itcast.po.User">
<!-- id:关联查询用户的唯 一标识
column:指定唯 一标识用户信息的列
javaType:映射到user的哪个属性
-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> </association>
</resultMap>

1.3.4.2              statement定义

 <!-- 查询订单关联查询用户信息,使用resultmap -->
<select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address
FROM
orders,
USER
WHERE orders.user_id = user.id
</select>

1.3.5     mapper.java

 //查询订单关联查询用户使用resultMap
public List<Orders> findOrdersUserResultMap()throws Exception;

1.4     resultType和resultMap实现一对一查询小结

实现一对一查询:

resultType:使用resultType实现较为简单,如果pojo中没有包括查询出来的列名,需要增加列名对应的属性,即可完成映射。

如果没有查询结果的特殊要求建议使用resultType。

resultMap:需要单独定义resultMap,实现有点麻烦,如果对查询结果有特殊的要求,使用resultMap可以完成将关联查询映射pojo的属性中。

resultMap可以实现延迟加载,resultType无法实现延迟加载。

2       一对多查询

2.1     需求

查询订单及订单明细的信息。

2.2     sql语句

确定主查询表:订单表

确定关联查询表:订单明细表

在一对一查询基础上添加订单明细表关联即可。

 select
orders.*,
user.username,
user.sex,
user.address ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
from
orders,
user,
orderdetail
where orders.user_id=user.id and orders.id=orderdetail.orders_id

2.3     分析

使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复。

要求:

对orders映射不能出现重复记录。

在orders.java类中添加List<orderDetail> orderDetails属性。

最终会将订单信息映射到orders中,订单所对应的订单明细映射到orders中的orderDetails属性中。

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAA9cAAABpCAIAAAC/PUfmAAAgAElEQVR4nO1d/28kSXWvv6gjJaNIWSESUC5RklNCZiASGgYFkZgQIF5iRgnSiQyNISBxk/XecDGxUDaR1rKWJL54EysaWHAMaOf2RjfCx51tzGHvisMDucQbLreGXKDzQ3+r7vrSNT3dPa/rvaePrJlyTdX7vFfd9ema6h72ULAbN26Mp5MUPvlPL1zdeGHpc998z9rz73ryuXd+5tm3f+ru2z6xn8IH1r8qfrYa3LhxQ+RCRkZGRkZGRkZGBtBY6r1UgtcFJMTJyMjIyMjIyMhqYbap8PF0spA4kpGRkZGRkZGRkZkbu5G0hSvp+YU4GRkZGRkZGRkZGXBjX/zH2wQCgUAgEAgEAqFKMI+MjIyMjIyMjIyMrFqrhwp/5ZVXFu3CYgwJcSQ0a2rWZMcaIioDQhCIG/ObNURAGUXVQxYEVGTNLQoLqXDQhoQ4Epo1NWuyYw0RlQEhCMSN+c0aIqCMouohCwIqsuZGKrwehoQ4Epo1NWuyYw0RlQEhCMSN+c0aIqCMouohCwIqsuZGKrwehoQ4Epo1NWuyYw0RlQEhCMSN+c0aIqCMouohCwIqsuZGKrwehoQ4Epo1NWuyYw0RlQEhCMSN+c0aIqCMouohCwIqsuZWpgr/2U//Y/RX51/64/9+6Yszf/bk2pUr106E4jKy+DPvp8+cPrl2uPSN6ex+Fm7VEFf0snCjoxSyWZMda4ioDAjBmd0Qz0swzlSlxHOe+VFls4ZrnvCafxbtbM5bhUEAa7XJeEmnnawxULwK/8/nb7z67IfeeO3Z6Vfe8/A7e7M5V+GQvfPKFz7z0h/sfe/fVl985wuvav0s3BZFHMbcJloppyQ92ei/UGMCx/JnB1hsrZ/5gBAkFa6xGeZHcytQhWf+S1WhLrN5qWf+KoNQnymsNvqtkEjOPgYKVuEPX7z1w713vfHw7x9+62Ov3n3iuzff8cpz/zzD56s6br8+vfWxb73977731NrJRz7/0of/8rnfGZ09U2wXsxmp8MLNUIWTZRmp8LoYEIKkwlU27/yosmpU+Kx9AZ/NqxljFQQBxsGiMSgZzzQ71sLPv/JnP/mvrR9//4kfTz//8JtPPHrwsZMv/Ea2cyfXrrDQKjluv/Dtlc0Hn//Ugw//7YMnnzr508+efuTjo8ey/eRexy6nKYT/vnLt2hJjbGlX02Au4mHLLGhddO/k2pUrS0tX/ApBH2HNoDzubybPyzFFfndDlmzpWtKrdPT5QMryocnW0pIuYrK+sJnRIPT4QPkF+hQswFRE8h/a8WsZ7bh+RUNLSjCDjre7lDiKCvAkww3JmUf0jbFw2dXoqJcmbm4rfN6ZbX70hGNKGRCzaSizfvK9bCQbrIXXYzbXnp3Ux2zGGKsyCOUTySkzyiCbtNky7hV8HBU+BgpW4a8++9T/vPzpR2d/dPngw49OO4++3Zp84leUtQN3d5f4aamS43bn/trnvvvER09/v3f6vqun7/jg6eOrd96U5Sf3+uTaldDl3aWlXW93KRp+cQW1jJ2PeNzy7hJLnRbj3q9cO+Fm2KhmesKd0fNyTEozDrEXDOjwreAz/7Hon/G/ZPVTL1QR0/eFw4wGITeY44NDn4LKzUiFz3Ro86+DOHDmf7TCoaXIlJaOFyWssMRknK4DF8Szn1CiP+pTmUonrnwis9ts86N4TKUDIgZQczI3qO8phmI0krNVeH1mc83ZSTeBasdYlUEom0humVEG2aTNlvFij6MSxkBhKvzyBy+cf+kD070//NHxux6dPH758jtfP2o97/7Cy19Tf+MmHtXlH7dnrx08dfi+T7/47qsnrfeePvYnp2/74OnjH/3yz42O1d9oSDz0l2m5VDHegkWyjO0QeYnLLkkVJaLW5GvGV7DGnpdjGTQ9IQUpn1OFIndpfWlkJOpc+CwyyzMIxSADCKPZWvgsh7b0dWooVji0pAQz6HDFRR338tO1KiyewXlM7nkyU+m3pRHJZfnnx+h15tibdazqT4yeImV6FV6j2VxzdlIds5ljrMogVEBET0rZeAlkQytAv815HJUwBopR4T86vv29Z9796MH669/53UfHv/r84M0vPPlrL/V//cGz2lNi5cftvR/u9F9o3zj97PtOf/Pdp29eufNLn9x/y6e+/tbnXv7XbD8lHob5EN2ukQqfyfNybGYVLvrMf81tcmowV+GVRwOaFaPCAYTRcEeK53mmh7b8DJ4cihUOLfV5Uk2H+3+pKlwZlplKJL2VqMWLmnfmmh+j1ybqYdaxqj8xSlMGRoXPO5trzk4ZddRjbOEqvFgielKVq/Bi9Nucx1FgRY6BYlT494fv//H3b/zo4BcfvfTY5K/fcvjVW2+8/tr/PXot42PxZVngI3/gS92d0669+N7NB2u/d/Lz7zl988qX3/TVg63L/33t8g0DP/lFoyvXTk6uLSXOT9y3Dwlq6gbnIC6b+NPuZU784Ydm9LwcM9qRkjx3qHyOIxmHRajP/zfjhCL7LDIzX0KW7EjRpKBy02/YyHNoa8/gGQdjCTGRr4Xr6Xhe+EW24uvkgtwQjlDx7CeUZB31CWq7qcSVRSSH5Zwfpd+kJwIiBlBzMjeo7wknRo+rb6LCazGbZ04Q6gk0Y4xVGYQqiHCvzWVGGWQ9z8ud8WKPoxLGQDEq/Adf+dBPfvDJ149/6/mn33ry9W3Tj0Uswtvwglvl1O7OaU8dv/+zD/586fSxj9z55X9/8R/MP3gSfkcRehjfOMhFWvF9q7S5OYiLIiDtnkaFs5TfM3pejmV+he3fnXki+1e8M02IpF945dqJWD/+rz5isr6wmekSchyo+AymT0HFpr9rMM+hLXudHooVDi31jhQ1HX7KKei6QOqG5AgVz36pkhP9UZ/KlJC4cojksJzzoyccU6mAiAHUn8wz63O1gis2MR0ZKhz8bM75rzw7aa+cdWOsyiBUQ4R7bSozyiDred4c+q3Q46j4MVCMCn/wtc8dbba++TdvO7un/WogrxWVxWeOrv3FN37743uPj07+pZAGyzYgjx4r25DQrKlZkx1riKgMCEEgbsxvRREpe36sl6GdzXmz5hgxMcq41Mr87cwSrOZDNr54mnWxpubETQ0JzZqaNdmxhojKgBAE4sb8Zg2REowmNc+iIOQnYmLAyBZrBYwBUuGgDQlxJDRratZkxxoiKgNCEIgb85s1REAZRdVDFgRUZM2NVHg9DAlxJDRratZkxxoiKgNCEIgb85s1REAZRdVDFgRUZM2NVHg9DAlxJDRratZkxxoiKgNCEIgb85s1REAZRdVDFgRUZM0tVuHj6QQ+Hj58uHAfiDjRxAlrsmMNEeAEgbhBRGCCoootCKjI5ggLqXDQQEIcCc2awprsWEMEOEEgbhARmKCoYgsCKrI5wkIqHDSQEEdCs6awJjvWEAFOEIgbRAQmKKrYgoCKbI6wkAoHDSTEkdCsKazJjjVEgBME4gYRgQmKKrYgoCKbIyykwkEDCXEkNGuKrOzceXq/3b53q5jujlfbw6tP318AEdZjKmRWiOrAzhQQNywZMASKKgWByM4fFhCTx3h07jCPReicqdy1F2fNxvm2Ok9qDJrXu9vR60ATtNbmKjFpuUjoaI66/VDq9N0d35mNoKR1O+nwRqO7F72OBZKzNUoHLd2CpBdt/RC3O6wXd2rgTGeQTdDUmag1PdkyszOdDA+utu/dGt9fXx62lw/uBOX315f314f+36iyppBv83i1nSqphAiPTFUNRHbPQPCo60RDZFccVNXF2coBQ0jDn9NzTmo2IffMXkegImsWEANZC2MuGZ07gYuHKw2PMa+5KXfXSmy7lyzXCWt712E9xkKtvHaTNe+G5TcHuUtMWi4WOpqbrY1gMAw2mLM1mtzuML9kz3UiUbvnOj3GC+LBhqCYI0haEHrJqB+W9zutvqDC087Eje9sNQSVLHatdUbWmo5sudmZ3nL9lcj768v7q+5+uCo5j6ia3nl6v+0eV0wkAQtV+N2WfwiPp4Nmz1k5WpAblg4YAgdOeeDWZLln9joCFVlTbF6EUvZwpXG5MpKHBdpc4qtwpbvWYnTu5Bu+R10n0MqDZrRQHRTmKzFpuWD6Zvn1RSenOEfdhAJOvNUIU3ULcS/Z9fdcp+/uyFpQtcw1Ner2JYvWYtdhibx+5NjiVHi0DOlro+PVYKfBXKJqMjy4Gq+SVkMkCQtVeIydleuLU+GWDhhCGpsXpMnG0zlm9joCFdnZcNZkF6l9BBBV+FrHv4BO+zrGkMViVXjwOl+JScsF0zfKb6BrecWZVJ9pFa7a1KFuId2Isn4gweX1pe3sbDVSG2AEVS02FZWk6ydb05EtNzux+gm10da9tns8r6gaR+KsKiIpqEQ25E3hpgTLuZA2dMPWAUNIg1S4D1TCFBVZU/gryzpZC2X+iOBrcVQ7UsZTUuHZ29/DvRmGKjz9wWCXCGN9t6tW4fEOEG19XwRzEPvVOqMlaFI590cKzo4oqhLKKbeokhaWSWRscHcmX1PzdoEwuo2k5O0oejdsGjAEHUiF+0AlTFGRnQ1nTfUWDyjzRwR/d5HjHkrdtRa0I0VXgReXhjtSIpjuMFFLWO0Oltl2pMRbzNUE9c7oW5PtOy8zOxJRNZ0MD666B/Ve2tQL69qq8CokuN4NWwcMIQ1S4T5QCVNUZGfEWke5uAxi/th2L0PZjfHuzPG0EBVe5N2ZmS0Xi6xnpCSUpepeyYTwjW5hHHX7sgebpFuQb7zO6nFqpML33BZ3CSHs8xa71pZIWtOSLTc7qW2+Qfktd9hu768Po1vxppMx/3AM8Nt8LVThR12nEgme4YalA4aQBqlwH6iEKSqyBth2L8L1b/Br4cHdtSGawmKh3Vnk6c90+RE8yaTHWM9XyYU9qdCg5SKhoRntDOH2PUueG8hX29hMPOxPsfacaEHWi65+DJkKTzuz2eqlnEmo6nTXEmd4XS5vTUO2xOwkH3nBaSNebA3bbR9iyXB1K/V2OoHwyAuNsM7coLJAaAjyR3TZDytEOGAIHLhnpMw+qdmE3DN7HYGKrCn8a9EsWQtl/tADbRaREEdCs6YwevxzgT0CePyzfSocjhtWDhgCRZWCQGTzhQXK/GHoLjYgIY6EZk2B4acQNbdmRjdomtSBnSkgbtgwYAgUVQoCkS0kLIufOWZyFxuQEEdCs6awJjvWEAFOEIgbRAQmKKrYgoCKbI6wkAoHDSTEkdCsKazJjjVEgBME4gYRgQmKKrYgoCKbIyykwkEDCXEkNGsKa7JjDRHgBIG4QURggqKKLQioyOYIC3tIRkZGRkZGRkZGRlaVBSp84RcEM100YAMS4kho1hTWZMcaIsAJAnGDiMAERRVbEFCRzREWUuGggYQ4Epo1hTXZsYYIcIJA3CAiMEFRxRYEVGRzhIVUOGggIY6EZk1hTXasIQKcIBA3iAhMUFSxBQEV2RxhIRUOGkiII6FZU1iTHWuIACcIxA0iAhMUVWxBQEU2R1hIhYMGEuJIaNYUWdmx5EdYMn+OB/hP9hhkCogblgwYAkWVgkBk5w8LiMljPDp3mMcidM5U7tqLs2bjfFudJzUGzevd7eh1oAlaa3OVmLRcJHQ0R91+KHX67o7vzEZQ0rqddHij0d2LXscCydkapYOWbkHSi7Z+iNsd1os7NXCmM8gmaOpM1JqebJnZiX6Q/P768rC9fHAnKL+/vry/PvT/RpU1hXybAH6QPFNVA5HdMxA86jrRENkVB1V1cbZywBA4nDW52dxxD5FGlVM1CILAJR2jfpsrLDDmktG5E7h4uNLwGPOam3J3rcS2e8mYx2ZX4du7DusxFmrltZuseTcsvznIXWLScrHQ0dxsbQSDYbDBnK3R5HaH+SV7rhOJ2j3X6TFeEA82BMUcQdKC0EtG/bC832n1BRWediZufGerIahksWutM7LWdGTLzc70luuvRN5fX95fdffDVcl5RNX0ztP7bfe4YiIJWKjC77b8Q3g8HTR7zsrRgtywdMAQOJw1E7P55coIZVQ3L0IZc9a0Pggx2cOVhu1kiw4LtLkE63E7OnfyrYUfdZ1AKw+a0UJ1UJivxKTlgumb5dcXnZziHHUTCjjxViNM1S3EvWTX33Odvrsja0HVMtfUqNuXLFqLXYcl8vqRY4tT4dEypK+NjleDnQZziarJ8OBqvEpaDZEkLFThMXZWri9OhVs6YAhSrHXQranJgEqYnjXZReoLc3vJFhMWQHOJf8QywdcxhiwWq8KD1/lKTFoumL5RfgNdyyvOpPpMq3DVpg51C+lGlPUDCS6vL21nZ6uR2gAjqGqxqagkXT/Zmo5sudmJ1U+ojbbutd3jeUXVOBJnVRFJQSWyIW8KNyVYzoW0oRu2DhiCBMGWDDwCVB0HYXK3MQj+EipK/TZfWKDMHxGQXj2TCs+oE+3NMFTh6Q8Gu0QY67tdtQqPd4Bo6/simIPYr9YZLUGTyrk/UnB2RFGVUE65RZW0sEwiY4O7M/mamrcLhNFtJCVvR9G7YdOAIegQ7YpGIUA1kGxHsToICLbfFB0WKPNHBH+TdOpuBvuzSDtSdBV4cWm4IyWC6Q4TtYTV7mCZbUdKvMVcTVDvjL412b7zMrMjEVXTyfDgqntQ76VNvbCurQqvQoLr3bB1wBAS2LwI785EvjIql+B2B2Gtg28Vdb6wgJg/tt3LUHZjvDtzPC1EhRd5d2Zmy8Ui6xkpCWWpulcyIXyjWxhH3b7swSbpFuQbr7N6nBqp8D23xV1CCPu8xa61JZLWtGTLzU5qm29Qfssdttv768PoVrzpZMw/HAP8Nl8LVfhR16lEgme4YemAIcRQr4Ljiuro3FFIcPuCsO1ehExpLXzmsICYP4KHhIRoCouFdmeRpz/T5UfwJJMeYz1fJRf2pEKDlouEhma0M4Tb9yx5biBfbWMz8bA/xdpzogVZL7r6MWQqPO3MZquXciahqtNdS5zhdbm8NQ3ZErOTfOQFp414sTVst32IJcPVrdTb6QTCIy80wjpzg8oCoSHIH9FlP6wQ4YAhxEg9d5h5rHGOMKopVWP51/vxtx/o9Nv8YYEyf+iBNotIiCOhWVMYPf65wB4BPP7ZPhUOxw0rBwyBokpBILL5wgJl/jB0FxuQEEdCs6bA8FOImlszoxs0TerAzhQQN2wYMASKKgWByBYSlsXPHDO5iw1IiCOhWVNYkx1riAAnCMQNIgITFFVsQUBFNkdYSIWDBhLiSGjWFNZkxxoiwAkCcYOIwARFFVsQUJHNERZS4aCBhDgSmjWFNdmxhghwgkDcICIwQVHFFgRUZHOEhT0kIyMjIyMjIyMjI6vKAhW+8AuCmS4asAEJcSQ0awprsmMNEeAEgbhBRGCCoootCKjI5ggLqXDQQEIcCc2awprsWEMEOEEgbhARmKCoYgsCKrI5wkIqHDSQEEdCs6awJjvWEAFOEIgbRAQmKKrYgoCKbI6wkAoHDSTEkdCsKazJjjVEgBME4gYRgQmKKrYgoCKbIyykwkEDCXEkNGuKrOxY8iMsmT/HA/wnewwyBcQNSwYMgaJKQSCy84cFxOQRYa3jMeaxzpnKXXtx1mycbwvlBsQHzevd7eh1oAlaa3OViC2rSoqBjuao2w+lTt/d8d3YCEpat5PubTS6e9HrWCA5W6N00NItSHrR1ufb7wykeZE7I1YWu85wJsDtDuvFXaR6rCo70Q+S319fHraXD+4E5ffXl/fXh/7fqLKmkG8TwA+SZ6pqILJ7BoJHXSc6HnaVg6qCOFs5YAgxRucO81gEjLO5j7MmviCsdTwmKBlbyRYVFkhzyeYFtiHrY9u9ZEySpEzi27sO6zEWKuO1m6x5Nyy/OchdIrYsLSkQOpqbrY1N//Vggzlbo8ntDvNL9lwnErV7rtNjvCodbKQ1egxJC0IvxvV3thrp+mlntJUlXWudiVzqd1r9sAuBflXZmd5y/ZXI++vL+6vufrgqOY+omt55er/tHldMJAELVfjdln+Yj6eDZs9ZOVqQG5YOGEKM0bkTzOCHKw2PMa+5iTKqmxch8cOVxuXKyP4grHU8p3PhkAqfMSxg5pLRucO8ZucCoQoP6OdbCz/qOoEyHjSjxeygMF+J2LK6pCCY5deXsJy8HnX7vO5MvNWocHULcS/m9RUdSWpylUfdvkRei12HJcn6e67Td3e09KvKTrQM6Wuj49Vgp8FcomoyPLgar5JWQyQJC1V4jJ2V64tT4ZYOGIIMvgpHIUC1OGuyi+T3zBYGYdu9dNxDqZKxj2yxYQEylxyuNDzWOQuWw0mFmxOXqvDgdb4SsWV1SUEwym+gMnnVm1TAaRWu2tShbiHdiL7+zlZD3BWjaidZWarCxa6jEq5+IMHF+otQ4bH6CbXR1r22ezyvqBpH4qwqIimoRDbkTeGmBEs7ik3csHXAEFIINpcK6hNZVP3rEPuDEGjNqVzJWEa28LCAmD+23ctgpJIKn5U4FhUe7c0wVOHpDwZ7Nhjru121Co93gJjVnyg3jWid0RLUV/bVPIeoFxgqPKGccosqaWGZRMYGd2fyNTVvFwij20hK3o6id8OmAUPIhK/Fke5IiXHWtPwLgWDrUYzGub1kiw8LhPlD8BVhFmlHiq4Cr0cNd6REMN9hopLI+h0p8a7xZELlmlhe2VSCa7sAosKnk+HBVfeg3kubemFdWxVehQTXu2HrgCFI4d/yFCwHIo7qWgfNpQithc8eFijzRwBaC5+VOKeMC7w7M9WysqQgZD0jJaFHpXdnBjXFGyJH3b6waUTSgnyjtrL+ntvirgoy1sIllfnuxK5NSqYgVHh6m29Qfssdttv768PoVrzpZMw/HAP8Nl8LVfhR16lEgme4YemAIUSIv4XHfXfmtnsRrn9bvxbOgVT47GGBMn8EQKnCg2eksJlPWMFzS3qM9XwlXdiTCoWWJSUFQkMz2hnCbfKWPKmQr7axmXjYn2LtOdGCrBdd/fFmq6duP+2MWDm5zzvVtcSZLBWe7rGq7CQfecFpI15sDdttH2LJcHUr9XY6gfDIC42wztygskBoCPLHb9kPK0Q4YAgR+OlMnNEQRTV65huqIJAKnz0sUOYPPdBmEQlxJDRrCqPHPxfYI4DHP9unwuG4YeWAIVBUKQhENl9YoMwfhu5iAxLiSGjWFBh+ClFza2Z0g6ZJHdiZAuKGDQOGQFGlIBDZQsKy+JljJnexAQlxJDRrCmuyYw0R4ASBuEFEYIKiii0IqMjmCAupcNBAQhwJzZrCmuxYQwQ4QSBuEBGYoKhiCwIqsjnCQiocNJAQR0KzprAmO9YQAU4QiBtEBCYoqtiCgIpsjrCwh2RkZGRkZGRkZGRkVVmgwhd+QTDTRQM2ICGOhGZNYU12rCECnCAQN4gITFBUsQUBFdkcYSEVDhpIiCOhWVNYkx1riAAnCMQNIgITFFVsQUBFNkdYSIWDBhLiSGjWFNZkxxoiwAkCcYOIwARFFVsQUJHNERZS4aCBhDgSmjWFNdmxhghwgkDcICIwQVHFFgRUZHOEhVQ4aCAhjoRmTZGVHUt+hCXz53iA/2SPQaaAuGHJgCFQVCkIRHb+sICYPCKsdTzGPNY5U7lrL86ajfNtodyA+KB5vbsdvQ40QWttrhKxZVVJMdDRHHX7odTpuzu+GxtBSet20r2NRncveh0LJGdrlA5augVJL9r6fPudgTQvcmfEymLXGc4EuN1hvbiLVI9VZSf6QfL768vD9vLBnaD8/vry/vrQ/xtV1hTybQL4QfJMVQ1Eds9A8KjrRMfDrnJQVRBnKwcMQQTi2Xwynk7Go3OHeYx5jHmOe2h7EM6aIVm8GVdjreMxQeCBVOGbFzizuO1eMiZJUibx7V2H9RgLlfHaTda8G5bfHOQuEVuWlhQIHc3N1sam/3qwwZyt0eR2h/kle64Tido91+kxXpUONtIaPYakBaEX4/o7W410/bQz2sqSrrXORC71O61+2IVAv6rsTG+5/krk/fXl/VV3P1yVnEdUTe88vd92jysmkoCFKvxuyz/Mx9NBs+esHC3IDUsHDCENrLM5H4FmcBo/a7LLlZHVQYjJHq40bCc7I9Y6ntO5cGqgwkfnDvOanQukx+3oXEySEfGjrhMo40EzWswOCvOViC2rSwqCWX59CcvJ61G3z+vOxFuNCle3EPdiXl/RkaQmV3nU7Uvktdh1WJKsv+c6fXdHS7+q7ETLkL42Ol4NdhrMJaomw4Or8SppNUSSsFCFx9hZub44FW7pgCEkgHw2TwOVMD1rsovkl+oWk83GtnvpuIdSgQdNhR+uNDzWOQsuoBEet8Wq8OB1vhKxZXVJQTDKb6AyedWbVMBpFa7a1KFuId2Ivv7OVkPcFaNqJ1lZqsLFrqMSrn4gwcX6i1DhsfoJtdHWvbZ7PK+oGkfirCoiKahENuRN4aYESzuKTdywdcAQOKCfzVPQKjCLcLjS8JggwS0la4RAgk8zxgCI+WPbvQySh/a4JRWeUSfam2GowtMfDPZsMNZ3u2oVHu8AMas/UW4a0TqjJaiv7Kt5DlEvMFR4QjnlFlXSwjKJjA3uzuRrat4uEEa3kZS8HUXvhk0DhiAFzeZJSLajWB0EBNtvTOFflnBonEvDAmH+EHxVu2staEeKrgKvRw13pEQw32Giksj6HSnxrvFkQuWaWF7ZVIJruwCiwqeT4cFV96DeS5t6YV1bFV6FBNe7YeuAIYSg2ZyHXILbHYS1jtdMznEWkzUF/LXwGGivngtQ4UXenZlqWVlSELKekZLQo9K7M4Oa4g2Ro25f2DQiaUG+UVtZf89tcVcFGWvhksp8d2LXJiVTECo8vc03KL/lDtvt/fVhdCvedDLmH44BfpuvhSr8qOtUIsEz3LB0wBAkQDub+xidOwoJbl8Qtt2LkCmthctAKhw4gmekMI+x2S4ig+eW9Bjr+Uq6sCcVCi1LSgqEhma0M4Tb5C15UiFfbZEKVDkAAAFlSURBVGMz8bA/xdpzogVZL7r6481WT91+2hmxcnKfd6priTNZKjzdY1XZST7ygtNGvNgatts+xJLh6lbq7XQC4ZEXGmGduUFlgdAQ5I/fsh9WiHDAECRAOZtH4Kd18WGFtgUheiSOoGEsJJsDdVLhCqDNIhLiSGjWFEaPfy6wRwCPf7ZPhcNxw8oBQ6CoUhCIbL6wQJk/DN3FBiTEkdCsKTD8FKLm1szoBk2TOrAzBcQNGwYMgaJKQSCyhYRl8TPHTO5iAxLiSGjWFNZkxxoiwAkCcYOIwARFFVsQUJHNERZS4aCBhDgSmjWFNdmxhghwgkDcICIwQVHFFgRUZHOEhVQ4aCAhjoRmTWFNdqwhApwgEDeICExQVLEFARXZHGFhD8nIyMjIyMjIyMjIqrJAhS/8goBAIBAIBAKBQMAGUuEEAoFAIBAIBELVIBVOIBAIBAKBQCBUDVLhBAKBQCAQCARC1fh/8JWljA70GaMAAAAASUVORK5CYII=" alt="" />

映射成的orders记录数为两条(orders信息不重复)

每个orders中的orderDetails属性存储了该 订单所对应的订单明细。

2.4     在orders中添加list订单明细属性

 public class Orders {
private Integer id;
private Integer userId;
private String number;
private Date createtime;
private String note; //用户信息
private User user; //订单明细
private List<Orderdetail> orderdetails;

2.5     mapper.xml

     <select id="findOrdersAndOrderDetailResultMap" resultMap="OrdersAndOrderDetailResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
FROM
orders,
USER,
orderdetail
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
</select>

2.6     resultMap定义

     <!-- 订单及订单明细的resultMap
使用extends继承,不用在中配置订单信息和用户信息的映射
-->
<resultMap type="cn.itcast.po.Orders" id="OrdersAndOrderDetailResultMap" extends="OrdersUserResultMap">
<!-- 订单信息 -->
<!-- 用户信息 -->
<!-- 使用extends继承,不用在中配置订单信息和用户信息的映射 --> <!-- 订单明细信息
一个订单关联查询出了多条明细,要使用collection进行映射
collection:对关联查询到多条记录映射到集合对象中
property:将关联查询到多条记录映射到cn.itcast.po.Orders哪个属性
ofType:指定映射到list集合属性中pojo的类型
-->
<collection property="orderdetails" ofType="cn.itcast.po.Orderdetail">
<!-- id:订单明细唯 一标识
property:要将订单明细的唯 一标识 映射到cn.itcast.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>

2.7     mapper.java

 //查询订单(关联用户)及订单明细
public List<Orders> findOrdersAndOrderDetailResultMap() throws Exception;

2.8     小结

mybatis使用resultMap的collection对关联查询的多条记录映射到一个list集合属性中。

使用resultType实现:

将订单明细映射到orders中的orderdetails中,需要自己处理,使用双重循环遍历,去掉重复记录,将订单明细放在orderdetails中。

3       多对多查询

3.1     需求

查询用户及用户购买商品信息。

3.2     sql语句

查询主表是:用户表

关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:

orders、orderdetail、items

 select
orders.*,
user.username,
user.sex,
user.address ,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
from
orders,
user,
orderdetail,
items
where orders.user_id=user.id and orders.id=orderdetail.orders_id and orderdetail.items_id = items.id

3.3     映射思路

将用户信息映射到user中。

在user类中添加订单列表属性List<Orders> orderslist,将用户创建的订单映射到orderslist

在Orders中添加订单明细列表属性List<OrderDetail>orderdetials,将订单的明细映射到orderdetials

在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items

3.4     mapper.xml

     <!-- 查询用户及购买的商品信息,使用resultmap -->
<select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap">
SELECT
orders.*,
USER.username,
USER.sex,
USER.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id,
items.name items_name,
items.detail items_detail,
items.price items_price
FROM
orders,
USER,
orderdetail,
items
WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
</select>

3.5     resultMap定义

 <!-- 查询用户及购买的商品 -->
<resultMap type="cn.itcast.po.User" id="UserAndItemsResultMap">
<!-- 用户信息 -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/> <!-- 订单信息
一个用户对应多个订单,使用collection映射
-->
<collection property="ordersList" ofType="cn.itcast.po.Orders">
<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"/> <!-- 订单明细
一个订单包括 多个明细
-->
<collection property="orderdetails" ofType="cn.itcast.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"/> <!-- 商品信息
一个订单明细对应一个商品
-->
<association property="items" javaType="cn.itcast.po.Items">
<id column="items_id" property="id"/>
<result column="items_name" property="name"/>
<result column="items_detail" property="detail"/>
<result column="items_price" property="price"/>
</association> </collection>
</collection>
</resultMap>

3.6     mapper.java

 //查询用户购买商品信息
public List<User> findUserAndItemsResultMap()throws Exception;

3.7     多对多查询总结

将查询用户购买的商品信息明细清单,(用户名、用户地址、购买商品名称、购买商品时间、购买商品数量)

针对上边的需求就使用resultType将查询到的记录映射到一个扩展的pojo中,很简单实现明细清单的功能。

一对多是多对多的特例,如下需求:

查询用户购买的商品信息,用户和商品的关系是多对多关系。

需求1:

查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见)

企业开发中常见明细列表,用户购买商品明细列表,

使用resultType将上边查询列映射到pojo输出。

需求2:

查询字段:用户账号、用户名称、购买商品数量、商品明细(鼠标移上显示明细)

使用resultMap将用户购买的商品明细列表映射到user对象中。

总结:

使用resultMap是针对那些对查询结果映射有特殊要求的功能,,比如特殊要求映射成list中包括 多个list。

4       resultMap总结

resultType:

作用:

将查询结果按照sql列名pojo属性名一致性映射到pojo中。

场合:

常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。

resultMap:

使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。

association:

作用:

将关联查询信息映射到一个pojo对象中。

场合:

为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。

使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。

collection:

作用:

将关联查询信息映射到一个list集合中。

场合:

为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。

如果使用resultType无法将查询结果映射到list集合中。

项目源码:

链接:http://pan.baidu.com/s/1pL8iokz 密码:j331

六 mybatis高级映射(一对一,一对多,多对多)的更多相关文章

  1. Mybatis学习总结(六)——高级映射(一对一,一对多,多对多)

    一.订单商品数据模型 1.数据库执行脚本 创建数据库表代码: /*Table structure for table `t_user` */ CREATE TABLE t_user ( id INT ...

  2. MyBatis的关联关系 一对一 一对多 多对多

    一对一示例 一个妻子对应一个丈夫 数据库表设计时 在妻子表中添加一个丈夫主键的作为外键 1 对应的JavaBean代码虽然在数据库里只有一方配置的外键,但是这个一对一是双向的关系. Husband实体 ...

  3. mybatis高级映射(一对一,一对多)

    mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...

  4. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  5. mybatis 一对一 一对多 多对多

    一对一 一对多 多对多

  6. mybatis 高级映射和spring整合之高级映射(4)

    mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一 ...

  7. JPA级联(一对一 一对多 多对多)注解【实际项目中摘取的】并非自己实际应用

    下面把项目中的用户类中有个:一对一  一对多  多对多的注解对应关系列取出来用于学习      说明:项目运行正常 问题类:一对多.一对一.多对多 ============一对多 一方的设置 @One ...

  8. mybatis 高级映射和spring整合之逆向工程(7)

    mybatis 高级映射和spring整合之逆向工程(7) 4.0 逆向工程 4.1 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行 ...

  9. mybatis 高级映射和spring整合之与Spring整合(6)

    mybatis 高级映射和spring整合之mybatis与Spring整合 3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionF ...

随机推荐

  1. SQL Server2008跟SQL Server2008R2的区别(转)

    QL Server 2008 R2基于SQL Server 2008提供可靠高效的智能数据平台构建而成,SQL Server 2008 R2 提供了大量新改进,可帮助您的组织满怀信心地调整规模.提高 ...

  2. matlab练习程序(多边形顶点凹凸性)

    生成简单多边形后,有时还需要对多边形各顶点的凹凸性做判断. 先计算待处理点与相邻点的两个向量,再计算两向量的叉乘,根据求得结果的正负可以判断凹凸性. 结果为负则为凹顶点,为正则为凸顶点. 凹顶点用o表 ...

  3. hihoCoder挑战赛14 -1223

    描述 给定n个关于X的不等式,问最多有多少个成立. 每个不等式为如下的形式之一: X < C X <= C X = C X > C X >= C 输入 第一行一个整数n. 以下 ...

  4. mvc-1mvc和类(1)

    简单的控制器结构 var Controller = {}; //创建一个users控制器 (Controller.users = function ($) { var nameClick = func ...

  5. vnc使用

    使用rpm –qa vnc命令如果收到如下信息说明已经安装了vncserver, [root@localhost: ~]#rpm -qa |grep vnc gtk-vnc-python--.el5 ...

  6. HDU 3966(树链剖分+点修改+点查询)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3966 题目大意:营地的分布成树型.每个营地都有一些人,每次修改修改一条链上的所有营地的人数,每次查询单 ...

  7. C# int转byte[],byte[]转int

    第一种方法: byte数组转int u = (uint)(b[0] | b[1] << 8 |b[2] << 16 | b[3] << 24); int转byte数 ...

  8. Nginx 伪静态教程

    1.将多个域名指向同一web目录: server_name www.php100.com php100.com; rewrite ^/$ / redirect; 2.将不带www的域名301转向到带w ...

  9. OpenCV 2.4.11 VS2012 Configuration

    Add in the system Path: C:\opencv\build\x86\vc11\bin; Project->Project Property->Configuration ...

  10. os模块

    os模块 posix(unix) nt(win) mac import osprint(os.name) #nt os和sys的区别: os是负责程序和操作系统之间的交互. os.path  (是一个 ...