MyBatis的一对多查询
首先在seller的model里添加一个Food的list
第一步:在dao层里创建一个SellerDao
package org.peter.dao;
import org.peter.model.Seller;
/**
* Created by Lenovo on 2017/7/27.
*/
public interface SellerDao {
public Seller getAllSeller(long id);
}
第二步:在dao包中创建一个SellerDao.xml文件来配置Mapping
<?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.peter.dao.SellerDao">
<resultMap id="BaseResultMap" type="org.peter.model.Seller">
<id column="id" property="id"/>
<result property="phonenumber" column="phonenumber"/>
<result property="windowimg" column="windowimg"/>
<result property="password" column="password"/>
<result property="state" column="state"/>
<result property="sellername" column="sellername"/>
<result property="windowname" column="windowname"/>
<!--collection 主要使用来加载list集合 ofType是food 的model-->
<collection property="foods" ofType="org.peter.model.Food">
<result property="foodname" column="foodname"/>
</collection>
</resultMap>
<select id="getAllSeller" parameterType="long" resultMap="BaseResultMap">
SELECT s.*,f.foodName from food f ,seller s where f.sellerid=s.id AND s.id=#{id}
</select>
</mapper>
第三步:创建一个main类进行测试
package org.peter.main;
import org.apache.ibatis.session.SqlSession;
import org.peter.dao.SellerDao;
import org.peter.model.Seller;
import org.peter.utils.DBUtils;
/**
* Created by Lenovo on 2017/7/27.
*/
public class main {
public static void main(String[] args) {
select();
}
public static void select(){
SqlSession sqlSession = DBUtils.openSession();
SellerDao mapper = sqlSession.getMapper(SellerDao.class);
Seller seller = mapper.getAllSeller(1l);
System.out.println(seller);
}
}
以上是Mybatis一对多的查询方法
补充:
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集合中。