首页 > 代码库 > MyBatis之一对多映射查询sql配置文件。
MyBatis之一对多映射查询sql配置文件。
学生---文章的模型
一对多模型
学生student.java类
1 package com.bjsxt.sxf.po; 2 3 import java.util.Date; 4 import java.util.List; 5 import java.util.Set; 6 7 /** 8 * 学生 9 * @ClassName: Student 10 * @Description: TODO(这里用一句话描述这个类的作用) 11 * @author 尚晓飞12 * @date 2014-11-4 上午10:41:19 13 *14 */15 public class Student {16 private Integer studId;//主键id17 private String name;//姓名18 private String email;//email19 private Date dob;//入学时间20 private List<Article> articles;//文章集合21 //set get 方法 空构造22 }
文章Article.java类
1 package com.bjsxt.sxf.po; 2 /** 3 * 文章 4 * @ClassName: Article 5 * @Description: TODO(这里用一句话描述这个类的作用) 6 * @author 尚晓飞 7 * @date 2014-11-4 上午10:41:07 8 * 9 */10 public class Article {11 private Integer id;//id12 private String title;//标题13 private String content;//内容14 private Student student;//该文章是哪个学生写的15 16 //set get 方法 空构造17 }
student.xml中映射器。此映射器,主要针对一对多模型查询。当查询一方时,将一方拥有的多方也查出来。
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <!-- sql集的命名空间,是于数据库交互的桥梁.namespace对应的是映射器的java接口 --> 5 <mapper namespace="com.bjsxt.sxf.mapper.StudentMapper"> 6 7 8 9 10 <!--根据id获取学生的基本信息 -->11 <!-- 当用resultType时返回单个对象,数据库列名和java类属性名必须一致,如不一致,则在sql语句中起别名,使得列名和属性名一致 -->12 <select id="findStudentById" parameterType="int" resultType="Student">13 SELECT students.stud_id as studId,students.`name`,students.email,students.dob FROM students WHERE students.stud_id=#{id}14 </select>15 16 17 <!-- 一对多查询 -->18 19 <!-- resultMap嵌套。查询学生信息时,并将每个学生所写文章的集合也查询出来,赋值在学生对象中的文章集合类中 -->20 <!-- 由于resultMap中已经将java类中的属性名和表中的列名,进行映射配置。此处不可为列名起别名 -->21 <!-- 文章模型的映射结果 -->22 <resultMap type="Article" id="wenzhang">23 <id property="id" column="id" />24 <result property="title" column="title" />25 <result property="content" column="content" />26 </resultMap>27 <!-- 学生的映射结果 -->28 <resultMap type="Student" id="StudentResult">29 <id property="studId" column="stud_id" />30 <result property="name" column="name" />31 <result property="email" column="email" />32 <result property="dob" column="dob" />33 <collection property="articles" javaType="ArrayList" column="stud_id" ofType="Article" resultMap="wenzhang"></collection>34 <!-- ofType是文章集合中的文章类型,column用查处出来的那个列的值,作为外键去查集合结果 -->35 </resultMap>36 <!-- 根据id获取学生对象,包含该id学生所写的文章集合,可能有的学生没有写文章,因此多表连接查询用左连接-->37 <select id="findByIdContentArticle" parameterType="int" resultMap="StudentResult">38 SELECT st.stud_id ,st.`name`,st.email,st.dob,ar.id,ar.title,ar.content FROM students st LEFT JOIN article ar ON (st.stud_id=ar.stuid) WHERE st.stud_id=#{id}39 </select>40 <!-- 查询出学生的集合,每个学生对象中包含该学生的文章集合 -->41 <select id="findByQT" parameterType="int" resultMap="StudentResult">42 SELECT st.stud_id ,st.`name`,st.email,st.dob,ar.id,ar.title,ar.content FROM students st LEFT JOIN article ar ON(st.stud_id=ar.stuid) 43 </select>44 45 46 47 <!-- select嵌套查询 -->48 <!-- 文章的映射 -->49 <resultMap type="Article" id="wen">50 <id property="id" column="id" />51 <result property="title" column="title" />52 <result property="content" column="content" />53 </resultMap>54 <!-- 根据学生id查询出文章集合 -->55 <select id="findByStudId" parameterType="int" resultMap="wen">56 SELECT ar.id,ar.title,ar.content FROM article ar WHERE ar.stuid=#{id}57 </select>58 <resultMap type="Student" id="studentsd">59 <id property="studId" column="stud_id" />60 <result property="name" column="name" />61 <result property="email" column="email" />62 <result property="dob" column="dob" />63 <collection property="articles" column="stud_id" javaType="ArrayList" ofType="Article" select="findByStudId"></collection>64 <!-- select当执行完查询学生的sql后再执行根据学生id查文章的sql -->65 </resultMap>66 <!-- select嵌套查询,查询出指定id的学生(包含学生的文章集合) -->67 <select id="findByStudIdS" parameterType="int" resultMap="studentsd">68 SELECT st.stud_id,st.`name`,st.email,st.dob FROM students st where st.stud_id=#{id}69 </select>70 <!-- select嵌套查询 ,查询出所有的学生集合(每个学生对象中包含该学生的文章集合)-->71 <select id="findBySelectList" resultMap="studentsd">72 SELECT st.stud_id,st.`name`,st.email,st.dob FROM students st73 </select>74 75 </mapper>
Article.xml文章映射器。此处查询的内容为。当查询多方的时候,并把一方查询出来。一对一也是这样查询的。
1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 <!-- sql集的命名空间,是于数据库交互的桥梁.namespace对应的是映射器的java接口 --> 5 <mapper namespace="com.bjsxt.sxf.mapper.ArticleMapper"> 6 7 <!-- 查询出指定id的文章 --> 8 <select id="findArticleById" parameterType="int" resultType="Article"> 9 SELECT article.id,article.title,article.content FROM article where article.id=#{id}10 </select>11 <!-- MyBatis的灵活处,也在此。需要什么样的结果集,就配置什么样的映射 -->12 <resultMap type="Article" id="ArticleOnly">13 <id property="id" column="id" />14 <result property="title" column="title" />15 <result property="content" column="content" />16 </resultMap>17 <!-- 查询出文章的集合,只是基本信息 -->18 <select id="findArticleOnly" resultMap="ArticleOnly">19 SELECT id,title,content FROM article20 </select>21 22 23 <!-- 多对一的查询 -->24 25 <!--ResultMap嵌套查询 -->26 <!-- 查询文章时,并将文章的作者学生信息也查询出来 -->27 <resultMap type="Student" id="studentRe">28 <id property="studId" column="stud_id" />29 <result property="name" column="name" />30 <result property="email" column="email" />31 <result property="dob" column="dob" />32 </resultMap>33 <resultMap type="Article" id="ArticleResult">34 <id property="id" column="id" />35 <result property="title" column="title" />36 <result property="content" column="content" />37 <association property="student" resultMap="studentRe"></association>38 </resultMap>39 <!-- 根据文章id获取文章信息,并将该文章的作者也查询出来 -->40 <select id="findArticleWithStudentById" parameterType="int" resultMap="ArticleResult">41 SELECT ar.id,ar.title,ar.content,st.stud_id as studId,st.`name`,st.email,st.dob FROM article ar,students st WHERE ar.stuid=st.stud_id AND ar.id=#{id}42 </select>43 44 <!-- 查询出文章的集合,并将每篇文章的作者也查询出来 -->45 <select id="findAllArticle" resultMap="ArticleResult">46 SELECT ar.id,ar.title,ar.content,st.stud_id as studId,st.`name`,st.email,st.dob FROM article ar,students st WHERE ar.stuid=st.stud_id47 </select>48 49 50 51 52 <!-- select嵌套查询 -->53 <!-- 根据学生id查询出学生的信息 -->54 <select id="findStudentByStuid" parameterType="int" resultType="Student">55 SELECT st.stud_id as studId,st.`name`,st.email,st.dob FROM students st WHERE st.stud_id=#{id}56 </select>57 <resultMap type="Article" id="as">58 <id property="id" column="id" />59 <result property="title" column="title" />60 <result property="content" column="content" />61 <association property="student" javaType="Student" column="stuid" select="findStudentByStuid"></association>62 </resultMap>63 <!-- 根据select嵌套查询出指定id的文章,并将文章的信息也查询出来 -->64 <select id="findArticleBySelect" parameterType="int" resultMap="as">65 SELECT * FROM article ar where ar.id=#{id}66 </select>67 <!-- 根据select嵌套查询出文章的集合,每篇文章的作者也查询出来 -->68 <select id="findAllBySelect" resultMap="as">69 SELECT * FROM article70 </select>71 </mapper>
MyBatis之一对多映射查询sql配置文件。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。