SELECT orders.*,
user.username,user.addressFROM
orders,user
WHERE orders.user_id = user.id
Public class Orders{
//order数据表中的字段
private User user;
}
配置Mapper.xml:
这里的resultMap 指定 为 userordermap
<select id="findOrdersListResultMap" resultMap="userordermap">
SELECT
orders.*,
user.username,user.addressFROM
orders , user
WHERE orders.user_id = user.id
select>
resultMap配置:
<! --订单信息resultmap -->
<resultMap type="edu.etime.mybatis.pojo.orders" id="userordermap">
<! -- 这里的id,是mybatis在进行一对一查询时将user字段映射为user对象时要使用,必须写-->
<id property="id" column="id" />
<result property= "user_id" column="user_id" /><result property="number" column="number" />
<association property="user" javaType="edu.etime.mybatis.pojo.User">
<! --这里的id为user的id,如果写上表示给user的id属性赋值-->
<id property="id" column="user_id" />
<result property="username" column="username"/><result property="address" column="address" />< / association>
resultMap>
使用association 完成关联查询,将查询到的信息映射到pojo对象中
SELECT
orders.*,
user.username,user.address,
orderdetail.id orderdetail_id,orderdetail.items_id,
orderdetail.items_numFROM
orders,user,orderdetail
WHERE orders.user_id = user.idAND orders.id = orderdetail.orders_id
resultMap定义:
黄色部分与我们的一对一查询订单及用户信息定义的resultMap相同.
collection 部分定义了查询订单明细信息
collection: 表示关联查询结果集
使用collection完成关联查询,将关联查询信息映射到集合对象。
SELECT
orders.*,
USER .username,USER .address,
orderdetail.id orderdetail_id,orderdetail.items_id,
orderdetail.items_num,items.name items_name,items.detail items_detailFROM
orders,USER,orderdetail,items
WHERE
一对多是多对多的特例,如下需求:
查询用户购买的商品信息,用户和商品的关系是多对多关系。
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集合中。
当执行增改删等操作时他就会将缓存中的数据直接清除,非常不智能,缓存机制差,过于暴力.泛用性差.
面试题描述:
请描述一下Mybatis的缓存机制 :
- mybatis 总有两级缓存;其中一级缓存作用域一个sqlsession;二级缓存作用域一个mapper/namespace,二级缓存可以多个sqlsession共享
- 描述mybatis的基本操作: mybatis默认打开1级缓存,2级缓存默认是关闭的,如果要打开2级缓存,则需要配置cacheEnable = true;使用二级缓存的话,映射的java对象必须实现serialable接口.
- 描述缓存更新机制: mybatis的缓存更新,是属于比较粗犷的更新方式,只要有insert,update,delete操作,那么就会清空对应的缓存.
- 描述缓存之后的查询顺序: ①从二级缓存中查询 ②从一级缓存中查询 ③从数据库中查询(查询后自动填充1\2级缓存内容)