精华内容
下载资源
问答
  • Mybatis一对多查询

    2021-05-01 09:45:31
    ** mybatis一对多查询时,只查出了其中一个** 我的情况是 没改之前的输出: 解决方法: 因为user 表中和account 表中有相同的字段名 id ,不改的话容易混淆,改了之后就正常输出了

    ** mybatis一对多查询时,只查出了其中一个**

    我的情况是

    没改之前的输出:在这里插入图片描述
    解决方法:

    因为user 表中和account 表中有相同的字段名 id ,不改的话容易混淆
    因为user 表中和account 表中有相同的字段名 id ,不改的话容易混淆,改了之后就正常输出了

    在这里插入图片描述

    展开全文
  • MyBatis一对多查询

    2018-01-29 10:01:45
     MyBatis 一对多查询      以订单和订单详情为例,即 一个订单可以有多个订单详情, 一个订单详情只能属于一个订单      需求如下:    根据订单号查询订单,并查询出订单详情      具体实现:   ...

    --------------------siwuxie095

      

      

      

      

      

      

      

      

    MyBatis 一对多查询

      

      

    以订单和订单详情为例,即一个订单可以有多个订单详情,

    一个订单详情只能属于一个订单

      

      

    需求如下:

      

    根据订单号查询订单,并查询出订单详情

      

      

    具体实现:

      

    1、先创建数据库mybatis_db, 再创建表 t_order 和 t_detail,并插入

    若干数据,其中:各自的主键分别是 order_id 和 detail_id,且为自动

    增长,另外:t_detail 中的 order_id 为外键

      

      

      

      

      

    2、创建实体类

      

    Order.java

      

    package com.siwuxie095.entity;

      

    import java.util.List;

      

    public class Order {

     

    private Integer orderId;

    private String orderNo;

    private Integer userId;

     

    // Order 类中添加 Detail 对象的 List 集合,表示关系为一对多

    private List<Detail> detailList;

     

    public List<Detail> getDetailList() {

    return detailList;

    }

    publicvoid setDetailList(List<Detail> detailList) {

    this.detailList = detailList;

    }

     

    public Integer getOrderId() {

    return orderId;

    }

    publicvoid setOrderId(Integer orderId) {

    this.orderId = orderId;

    }

     

    public String getOrderNo() {

    return orderNo;

    }

     

    publicvoid setOrderNo(String orderNo) {

    this.orderNo = orderNo;

    }

     

    public Integer getUserId() {

    return userId;

    }

    publicvoid setUserId(Integer userId) {

    this.userId = userId;

    }

     

    @Override

    public String toString() {

    return"Order [orderId=" + orderId + ", orderNo=" + orderNo + ", userId=" + userId

    + ", detailList=" + detailList + "]";

    }

     

    }

      

      

      

    Detail.java:

      

    package com.siwuxie095.entity;

      

    public class Detail {

    private Integer detailId;

    private Integer totalPrice;

    private Integer orderId;

    private Integer itemId;

     

    public Integer getDetailId() {

    return detailId;

    }

    publicvoid setDetailId(Integer detailId) {

    this.detailId = detailId;

    }

     

    public Integer getTotalPrice() {

    return totalPrice;

    }

    publicvoid setTotalPrice(Integer totalPrice) {

    this.totalPrice = totalPrice;

    }

     

    public Integer getOrderId() {

    return orderId;

    }

    publicvoid setOrderId(Integer orderId) {

    this.orderId = orderId;

    }

     

    public Integer getItemId() {

    return itemId;

    }

    publicvoid setItemId(Integer itemId) {

    this.itemId = itemId;

    }

     

    @Override

    public String toString() {

    return"Detail [detailId=" + detailId + ", totalPrice=" + totalPrice

    + ", orderId=" + orderId + ", itemId=" + itemId + "]";

    }

     

    }

      

      

      

    3、创建映射器接口

      

    OrderMapper.java:

      

    package com.siwuxie095.mapper;

      

    import com.siwuxie095.entity.Order;

      

    public interface OrderMapper {

     

    /**

    * 根据订单号查询订单和订单详情

    * @param orderNo

    * @return

    */

    Order getOrderAndDetail(String orderNo);

    }

      

      

      

    4、创建MyBatis 映射配置文件

      

    OrderMapper.xml:

      

    <?xmlversion="1.0"encoding="UTF-8"?>

    <!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

     

    <mappernamespace="com.siwuxie095.mapper.OrderMapper">

      

    <!-- 此时,resultType 自动映射已经不能满足,所以需要使用 resultMap 手动映射 -->

    <selectid="getOrderAndDetail"resultMap="orderAndDetailResultMap">

    <!--

    具体的 SQL 语句,其中:通过 #{} 占位符获取传入的参数

     

    注意:因为这里只有一个参数,所以大括号中可任意,建议

    和实体类属性对应(不是和数据库表字段对应,这里相同只

    是巧合)

    -->

    select o.*, d.detail_id, d.total_price, d.item_id from t_order o

    left join t_detail d on o.order_id=d.order_id

    where order_no=#{orderNo}

    </select>

     

     

    <!--

    注意:如果 resultMap 标签中没有嵌套映射,其 autoMapping 属性默认为 true

    反之则为 false。即如果 resultMap 标签中没有 associationcollection

    标签,其 autoMapping 属性默认为 true,反之则为 false

     

    所以这里要将 autoMapping 属性手动改为 true,当然,把所有属性一一写出来直

    接映射也可以,这样就不用改 autoMapping 属性了

    -->

    <resultMaptype="Order"id="orderAndDetailResultMap"autoMapping="true">

    <idcolumn="order_id"property="orderId"/>

    <!--

    collection 标签用于指定 Order 类中的 Detail 对象的 List 集合

     

    javaType 属性为 ListofType 属性为 List 中存放元素的类型

    -->

    <collectionproperty="detailList"javaType="List"ofType="Detail"autoMapping="true">

    <idcolumn="detail_id"property="detailId"/>

    </collection>

    </resultMap>

     

    </mapper>

      

      

      

    5、创建MyBatis 核心配置文件

      

    mybatis-config.xml:

      

    <?xmlversion="1.0"encoding="UTF-8"?>

    <!DOCTYPE mapper

    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

     

    <mappernamespace="com.siwuxie095.mapper.OrderMapper">

      

    <!-- 此时,resultType 自动映射已经不能满足,所以需要使用 resultMap 手动映射 -->

    <selectid="getOrderAndDetail"resultMap="orderAndDetailResultMap">

    <!--

    具体的 SQL 语句,其中:通过 #{} 占位符获取传入的参数

     

    注意:因为这里只有一个参数,所以大括号中可任意,建议

    和实体类属性对应(不是和数据库表字段对应,这里相同只

    是巧合)

    -->

    select o.*, d.detail_id, d.total_price, d.item_id from t_order o

    left join t_detail d on o.order_id=d.order_id

    where order_no=#{orderNo}

    </select>

     

     

    <!--

    注意:如果 resultMap 标签中没有嵌套映射,其 autoMapping 属性默认为 true

    反之则为 false。即如果 resultMap 标签中没有 associationcollection

    标签,其 autoMapping 属性默认为 true,反之则为 false

     

    所以这里要将 autoMapping 属性手动改为 true,当然,把所有属性一一写出来直

    接映射也可以,这样就不用改 autoMapping 属性了

    -->

    <resultMaptype="Order"id="orderAndDetailResultMap"autoMapping="true">

    <idcolumn="order_id"property="orderId"/>

    <!--

    collection 标签用于指定 Order 类中的 Detail 对象的 List 集合

     

    javaType 属性为 ListofType 属性为 List 中存放元素的类型

    -->

    <collectionproperty="detailList"javaType="List"ofType="Detail"autoMapping="true">

    <idcolumn="detail_id"property="detailId"/>

    </collection>

    </resultMap>

     

    </mapper>

      

      

      

    6、创建单元测试类

      

    MyBatisOneToManyTest.java:

      

    package com.siwuxie095.test;

      

    import java.io.IOException;

    import java.io.InputStream;

      

    import org.apache.ibatis.io.Resources;

    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.apache.ibatis.session.SqlSessionFactoryBuilder;

    import org.junit.Test;

      

    import com.siwuxie095.entity.Order;

    import com.siwuxie095.mapper.OrderMapper;

      

    public class MyBatisOneToManyTest {

     

    /**

    * 手动加上 @Test 以进行单元测试(将自动导入 JUnit 4 jar 包)

    *

    * 选中方法名,右键->Run As->JUint Test

    */

    @Test

    publicvoid testGetOrderAndDetail() throws IOException{

     

    String resource="mybatis-config.xml";

    InputStream inputStream=Resources.getResourceAsStream(resource);

    SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

    SqlSession sqlSession=sqlSessionFactory.openSession();

     

    OrderMapper orderMapper=sqlSession.getMapper(OrderMapper.class);

    Order order = orderMapper.getOrderAndDetail("D5221");

    System.out.println(order);

     

    sqlSession.close();

    }

    }

      

      

      

    工程结构目录一览:

      

      

      

      

      

      

      

      

      

      

    【made by siwuxie095】

    展开全文
  • mybatis 一对多查询

    2016-07-01 11:11:10
    mybatis 中一对多查询

    在mybatis 中一对多查询,我遇到两种情况:
    1、使用两表 join,返回包含一对多的 list 的对象 。
    2、2次sql,使用 IN (id)。(大表查询会很影响效率,查询时间会很长,所以有的公司禁止大表join)

    example:

    public class Student {
        private Integer id;
        private String name;
        private Integer age;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }
    
    public class Course {
        private Integer id;
        private Integer stuId;
        private String name;
        private Integer score;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public Integer getStuId() {
            return stuId;
        }
    
        public void setStuId(Integer stuId) {
            this.stuId = stuId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getScore() {
            return score;
        }
    
        public void setScore(Integer score) {
            this.score = score;
        }
    }
    
    public class Info extends Student {
        private List<Course> courses;
    
        public List<Course> getCourses() {
            return courses;
        }
    
        public void setCourses(List<Course> courses) {
            this.courses = courses;
        }
    }

    一个 student 会有多个course,要想查询一个班级所有同学的课程呢?

    这是明显的一对多的类型。

    使用 collection 我这边就不仔细说了,就是将course作为集合放到 Info 类里,
    ofType 是对应的course 类型。
    我们在 mapper 中需要注意的是 :

     <resultMap id="BaseResultMap" type="biz.bean.Student">
            <id column="id" property="id" jdbcType="INTEGER"/>
            <result column="name" property="name" jdbcType="VARCHAR"/>
            <result column="age" property="age" jdbcType="INTEGER"/>
        </resultMap>
    
        <resultMap id="InfoMap" type="biz.bean.Info" extends="BaseResultMap">
            <collection property="courses" ofType="biz.bean.Course">
                **<id column="cid" property="id" jdbcType="INTEGER"/>**
                <result column="stu_id" property="stuId" jdbcType="INTEGER"/>
                <result column="name" property="name" jdbcType="VARCHAR"/>
                <result column="score" property="score" jdbcType="INTEGER"/>
            </collection>
        </resultMap>

    sql:

        <select id="selectStudentInfos" resultMap="InfoMap">
            SELECT s.id,s.name,s.age,c.cid,c.stu_id,c.name,c.score
            FROM stu s  JOIN course c on  c.stu_id=s.id
        </select>

    <select id="selectStudentInfos" resultMap="InfoMap">
        select * from course where stu_id IN
            <foreach collection="list" item="item" index="index" separator="," open="(" close=")">
                #{item}
            </foreach>
    </select>

    至此,谨记,共勉。

    展开全文
  • mybatis一对多查询

    2020-07-28 21:47:54
    <?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"> <...-- 第种-->
    <?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.ccy.dao.TeacherMapper">
    
    <!--    第一种-->
        <select id="getTeacherList" resultType="teacher">
            SELECT
                *
            FROM
                teacher
        </select>
    
        <select id="getTeacherById" resultMap="TeacherStudent">
            SELECT
    	s.id sid,
    	s.NAME sname,
    	t.NAME tname,
    	t.id tid
    FROM
    	student s,
    	teacher t
    WHERE
    	s.tid = t.id
    	AND t.id =#{tid}
        </select>
    
    
        <resultMap id="TeacherStudent" type="teacher">
            <result property="id" column="tid"/>
            <result property="name" column="tname"/>
            <collection property="students" ofType="student">
                <result property="id" column="sid"/>
                <result property="name" column="sname"/>
    <!--            <association property="teacher" javaType="teacher">-->
    <!--                <result property="name" column="tname" />-->
    <!--            </association>-->
            </collection>
        </resultMap>
    
    <!--    第二种-->
        <select id="getTeacherById2" resultMap="TeacherStudent2">
            select * from teacher where id=#{tid}
        </select>
    
        <resultMap id="TeacherStudent2" type="teacher">
            <result column="id" property="id"/>
            <collection property="students" column="id" ofType="student" select="getStudent" javaType="ArrayList">
            </collection>
        </resultMap>
    
        <select id="getStudent" resultType="student">
            select * from student where tid=#{tid}
        </select>
    
    
    
    </mapper>
    
    展开全文
  • Mybatis 一对多查询

    2019-07-16 17:33:25
    1.在Mysql表对应javabean中添加关联表对象属性。 2.编写相应属性的getter方法以及toString...其中需要注意的是:一对多查询的时候需要用<collection>标签,其中property=关联对象在此表中的属性名,OfType...
  • mybatis一对多查询功能

    2020-08-31 09:33:15
    主要介绍了mybatis一对多查询功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
  • Mybatis 一对多 查询

    2017-04-20 20:23:56
    项目中以前使用的是...以此记录,一对多的使用方法 id="InvoicesRecoreMap" type="org.opsteel.wcyl.module.invoice.vo.InvoicesRecoreVo"> column="ORDERNO" property="orderno"/> column="INVOICESTATUS"
  • mybatis一对多查询案例

    千次阅读 2020-09-26 10:44:10
    mybatis一对多查询案例 (1)关联查询的中的一对多是指,站在用户的角度看,一个用户会存在多个订单跟他对应。 (2)数据来自两个表,使用连接查询,需要输出每一个用户有多少个订单 (3)查询结果使用collection...
  • mybatis一对多查询返回

    千次阅读 2019-06-20 19:32:52
    mybatis一对多查询返回定义实体类Mapper.xml文件Mapper.java文件 定义实体类 InventoryVO 和InventoryDetailVO是一对多的关系。 @Data public class InventoryVO { /**收发 1: 收 0:发**/ private String inOrOut...
  • Mybatis一对多查询Demo

    2019-10-04 17:20:13
    Mybatis一对多查询Demo1.bean创建 1.bean创建 bean-Key package com.justin.bean; public class Key { Integer id; String keyName; Lock lock; public Lock getLock() { return lock; } public void set...
  • mybatis一对多查询使用pagehelper发生错误问题 作项目使用了mybatis框架的分页助手 多表查询 而且又是一对多的查询 我使用了左连接 然后就发现返回的记录总数并不是我想要的正确数目 决绝方法 在xml文件中进行修改 ...
  • PageHelper关于Mybatis一对多查询返回Total错误 遇到的问题: pagehelper进行一对多查询时,返回的总数量对不上,例如需求是一个页面展示10个spu信息,实际上只展示了6个spu,其分页的依据是根据sku,6个spu中包含了...
  • springboot + mybatis 一对多查询 + 懒加载 直接上图 父表 子表 parent相关代码 entity public class ParentMessage implements Serializable { private Integer id; private String valu...
  • MyBatis一对多查询的两种处理方法: 简单的来说就是一个老师查询名下的所有学生: 然后说一下需求: 需求:获取所有学生及对应老师的信息 package com.zsp.dao; import com.zsp.pojo.Student; import ...
  • 使用mybatis一对多查询时list集合中只有一条数据,运行效果如下: 源码如下: test方法 resultMap sql语句 通过代码可以看出User表和Oder表中有重复的列名,此时需要在select语句中给重复的列起别名,...
  • Mybatis一对多查询—集合中只查出一条数据 原因:因为主表和从表的主键id列名都为id导致只能查询一条数据 解决:查询时给从表的id字段取一个别名即可
  • 在做mybatis 一对多查询的时候, resultMap 里面用到了集合标签 collection ,后来发现 当该条数据没有子集的时候, collection 会自动创建一个属性都是null的对象。 比如: Teacher —对应多个— Student 那么...
  • 在本节教程中,我们来学习MyBatis一对多查询。在此,我们以部门和员工为例介绍一对多:每个员工属于一个部门,一个部门有多个员工。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,359
精华内容 2,943
关键字:

mybatis一对多查询