ibatis多表查询

 

我们先来看看这两张表

表名:tbl_Student

字段:ID,NAME,CLASS_ID

表名:tbl_Class

字段:ID,NAME

很简单的一个逻辑,班级下边有很多学生。我们先对学生表做简单的查询。

Model

public class Student

{

    private String id;

    private String name;

    private Stirng birth;

    private String class_id;

    .......................

}

StudentMapper.xml

<typeAlias alias="StudentClass" type="model.Student"></typeAlias>

<sql id="select">

    <![CDATA[

        select ID,NAME,CLASS_ID

        from tbl_Student

    ]]>

</sql>

<resultMap id="StudentMap" class="StudentClass">

    <result property="id" column="ID" />

    <result property="name" column="NAME" />

    <result property="class_id" column="CLASS_ID" />

</resultMap>

<select id="selectAll" parameterClass="java.util.Map" resultMap="StudentMap">

    <include refid="select" />

</select>

但是我想加入班级名称在里面呢?这个时候Student就不够用了,我们需要用dto了。

Dto

public class StudentDto

{

     private String id;

     private String name;

     private Stirng birth;

     private String class_id;

     private String class_name;

     ......................

}

在原有的StudentMapper.xml文件中加入一下内容:

<typeAlias alias="StudentDtoClass" type="dto.StudentDto"></typeAlias>

<resultMap id="StudentDtoMap" class="StudentDtoClass">

    <result property="id" column="ID" />

    <result property="name" column="NAME" />

    <result property="class_id" column="CLASS_ID" />

    <result property="class_name" column="CLASS_NAME" />

</resultMap>

<sql id="select2">

    <![CDATA[

        select s.ID as id,s.NAME as name,s.CLASS_ID as class_id,c.name as class_name

        from tbl_Student s,tbl_Class c 

        where s.class_id = c.id

    ]]>

</sql>

<select id="selectAll2" parameterClass="java.util.Map" resultMap="StudentDtoMap">

    <include refid="select2" />

</select>

一定要注意写as后面的值,这样才能一一对应起来,否则会报错:未指定的列。

时间: 2025-01-26 19:26:01

ibatis多表查询的相关文章

ibatis多表查询返回值用listmap接收,日期怎么处理?

问题描述 ibatis多表查询返回值用listmap接收,日期怎么处理? 我springmvc+ibatis的环境,多表联合查询,用listmap的形式接收,接收的时间只有日期,时间都00:00:00.我使用的是建一个对应po类,resultMap对应的方式处理,我想知道有没有更好一些的方式处理.谢谢! ps:谢绝在网上随便copy一段就回答,希望大家能一起讨论,谢谢! 解决方案 我做的时候返回都是String,然后java去处理吧 解决方案二: 我找到另一种方法了,这种应该是最方便的了,将sq

ibatis-关于iBatis多表查询问题

问题描述 关于iBatis多表查询问题 我要把这句话写入iBatis,domain和xml文件要怎么写.我现在是要给系统添加一个报表统计的功能,user_region是需要前台提交的数据.其中sql语句中涉及的四张表都有独立的domain对象在其他的包下面,有大神能帮我解决一下吗 select t.user_region,t.ENTERPRISE_NAME, count(t.user_phone),count(s.phone_number) from ( select distinct b.us

iBATIS多表查询之N+1 Select

1 数据表 book,user表.一对多关系,一本书有多个作者. CREATE TABLE book (   oid int(10) NOT NULL ,   name varchar(50) DEFAULT NULL,   PRIMARY KEY (oid) ); CREATE TABLE user (   id int(10) unsigned NOT NULL,   name varchar(50) DEFAULT NULL,   book_oid int(10) DEFAULT NULL

Mybatid关联表查询

Mybatid关联表查询 一.一对一关联  1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY

MyBatis学习总结(五)——实现关联表查询

一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 按 Ctrl+C 复制代码 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR(20) ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREM

ibatis 多表关联 字段名重复问题

问题描述 ibatis多表关联字段名重复,然后映射到类的时候后面的字段跟前面的一样了,sql查询返回值当然是不一样的比如:一个教师表里对应2个class字段<resultMapid="tch"resultClass="tch"><resultproperty="id"column="id"/><resultproperty="name"column="name&quo

MyBatis学习教程(五)-实现关联表查询方法详解_java

一.一对一关联  1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name VARCHAR() ); CREATE TABLE class( c_id INT PRIMARY KEY AUTO_INCREMENT, c_name VAR

MyBatis 实现关联表查询

一.一对一关联  1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关系. 1 CREATE TABLE teacher( 2 t_id INT PRIMARY KEY AUTO_INCREMENT, 3 t_name VARCHAR(20) 4 ); 5 CREATE TABLE class( 6 c_id INT PRIMARY KEY AUTO_INCREME

Mysql5 实现交叉表查询

交叉表.行列转换和交叉查询经典 一.什么是交叉表 "交叉表"对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: 行 列 摘要字段 "交叉表"中的行沿水平方向延伸(从一侧到另一侧).在上面的示例中,"手套"(Gloves) 是一行. "交叉表"中的列沿垂直方向延伸(上下).在上面的示例中,"美国"(USA) 是一列. 汇总字段位于行和列的交叉