• 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;//主键id
    17     private String name;//姓名
    18     private String email;//email
    19     private Date dob;//入学时间
    20     private List<Article> articles;//文章集合
    21         //set get 方法  空构造
    22     }  
    View Code

    文章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;//id
    12     private String title;//标题
    13     private String content;//内容
    14     private Student student;//该文章是哪个学生写的
    15     
    16     //set get 方法 空构造
    17     }
    View Code

    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 st
    73 </select>
    74 
    75 </mapper>
    View Code

    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 article
    20 </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_id
    47 </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 article
    70 </select>
    71 </mapper>
    View Code
  • 相关阅读:
    鼠标滚动倾斜分割切换
    表格数据模糊搜索
    简单三级联动
    整屏切换特效
    滚动条滑至底部自动加载内容
    使用鼠标滚轮或者手势滑动到页面节点部分
    ajax 跨域前后端实现
    ajax 跨域解决方案
    php stdClass Object 解析
    Git 设置仓库指定忽略的文件
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4075936.html
Copyright © 2020-2023  润新知