Mybatis--查询collection--List<String>
2017-08-24 15:51
507 查看
描述下场景,比如一个人有多个qq号(假设一个人可以有重复的qq号) 数据库结构,有两张表: people表 id name 1 jack people_qq表 id people_id qq 1 1 123456 2 1 234567 3 1 456789 4 1 123456 实体类: import java.io.Serializable; import java.util.List; public class People implements Serializable{ private static final long serialVersionUID = -5935066186174346694L; private Long id; private String name; private List<String> qqs; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getQqs() { return qqs; } public void setQqs(List<String> qqs) { this.qqs = qqs; } @Override public String toString() { return "People [id=" + id + ", name=" + name + ", qqs=" + qqs + "]"; } } mapper接口: import com.hnpicheng.mybatisissue.domain.People; public interface PeopleMapper { People selectPeopleById( Long id); } 测试代码: import org.springframework.context.support.ClassPathXmlApplicationContext; import com.hnpicheng.mybatisissue.domain.People; import com.hnpicheng.mybatisissue.mapper.PeopleMapper; public class App { public static void main( String[] args ) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-mybatis.xml"); PeopleMapper peopleMapper = context.getBean(PeopleMapper.class); People p = peopleMapper.selectPeopleById(1L); System.out.println(p); } } PeopleMapper.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="com.hnpicheng.mybatisissue.mapper.PeopleMapper"> <resultMap id="peopleResultMap" type="People"> <id property="id" column="id" /> <result property="name" column="name" /> <collection property="qqs" ofType="string" javaType="list"> <result column="qq" /> </collection> </resultMap> <select id="selectPeopleById" resultMap="peopleResultMap"> select p.*,pq.qq from people p left join people_qq pq on p.id = pq.people_id where p.id = #{id} </select> </mapper> 测试结果,优点只要查一次,对于需要排重的查询业务,可以用这个方法: DEBUG [main] - ==> Preparing: select p.*,pq.qq from people p left join people_qq pq on p.id = pq.people_id where p.id = ? DEBUG [main] - ==> Parameters: 1(Long) DEBUG [main] - <== Total: 4 People [id=1, name=jack, qqs=[123456, 234567, 456789]] 若果需要将重复数据查询出来,那么可以使用以下配置 <?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="com.hnpicheng.mybatisissue.mapper.PeopleMapper"> <resultMap id="peopleResultMap" type="People"> <id property="id" column="id" /> <result property="name" column="name" /> <collection property="qqs" column="id" select="selectQQByPeopleId"> 这里的column是指调用selectQQByPeopleId传递的参数 <result column="qq" /> </collection> </resultMap> <select id="selectPeopleById" resultMap="peopleResultMap"> select * from people where id = #{id} </select> <select id="selectQQByPeopleId" resultType="string"> select qq from people_qq where people_id = #{id} </select> </mapper> 测试结果: DEBUG [main] - ==> Preparing: select * from people where id = ? DEBUG [main] - ==> Parameters: 1(Long) DEBUG [main] - <== Total: 1 DEBUG [main] - ==> Preparing: select qq from people_qq where people_id = ? DEBUG [main] - ==> Parameters: 1(Long) DEBUG [main] - <== Total: 4 People [id=1, name=jack, qqs=[123456, 234567, 456789, 123456]]
相关文章推荐
- Mybatis Mapper.xml 需要查询返回List<String>
- List<String> 调用Collection.sort()整个流程的知识点
- Mybatis 如何 返回 List<String> 类型 或 List<Map<String,Object>>类型
- mybatis 传参是 list<string> 的注意事项
- mybatis查询如何返回List<Map>类型数据
- mybatis 返回 一对多之 list<String>
- mybatis 映射 List<String>
- mybatis中的<foreach collection="list" item="item" index="index" open="" close="" separator=";">
- mybatis查询如何返回List<Map>类型数据
- MyBatis查询,返回值Map或List<Map>
- MyBatis查询单表返回List<Bean>
- Mybatis查询复杂对象(对象包括对象和List<对象>)
- xml格式mybatis传String并返回List<String>
- MyBatis查询,返回值Map或List<Map>
- mybatis查询如何返回List<Map>类型数据
- Mybatis将List<T> 作为参数
- Hibernate中用纯SQL查询,并通过hibernate分页返回List<对象>
- 取出List<String>中的数据加到StringBuffer中去
- 简析SilverLight的List<T>、ObservableCollection<T>和INotifyPropertyChanged的异同
- MVC异步查询/异步更新,将Dictionary<string, string>或List<T>转换成Json