Mybatis学习二(字段名与实体类属性名不相同/关联查询)
1.在写项目的时候会遇到数据库字段名与实体类属性名不同的情况,可能是为了方便也可能是其他要求,whatever,我们现在来解决这个问题
准备一个数据库表如下
1 CREATE TABLE orders(
2 order_id INT PRIMARY KEY AUTO_INCREMENT,
3 order_no VARCHAR(20),
4 order_price FLOAT
5 );
接下类定义一个实体类
1 public class Order {
2 private int id;
3 private String orderNo;
4 private float price;
5 }
可见我们定义的实体类与数据库表字段名不一致,对于此有两种解决方法
方法一:在 sql 语句中定义别名
1 <select id="selectOrder" parameterType="int" resultType="_Order">
2 select order_id id, order_no orderNo,order_price price from orders where order_id=#{id}
3 </select>
方法二:通过<resultMap>解决
<select id="selectOrderResultMap" parameterType="int" resultMap="orderResultMap">
select * from orders where order_id=#{id}
</select>
<resultMap type="_Order" id="orderResultMap">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="price" column="order_price"/>
</resultMap>
例如(其中涉及到了嵌套(association)结果的关联查询,接下来会解释它)

2.实现联表查询
定义实体类
teacher实体类
private int tId;
private String tName;
student实体类
private int sId;
private String sName;
private int ClassId;
clazz实体类
private int cId;
private String cName;
private int tId;
private Teacher teacher;
private List<Student> students;
其中clazz实体类中,一个班级对应一个老师,一个班级对应多个学生

此时的ClazzMapper.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 <!-- namespace:表示名称空间。现在的目的是区分id的. -->
5 <mapper namespace="com.zhiyou100.zhl.dao.ClazzDao">
6 <resultMap type="com.zhiyou100.zhl.bean.Clazz" id="mymap">
7 <id column="c_id" property="cId"/>
8 <result column="c_name" property="cName"/>
9 <result column="teacher_id" property="tId"/>
10 <association property="teacher" javaType="com.zhiyou100.zhl.bean.Teacher">
11 <id column="t_id" property="tId"/>
12 <result column="t_name" property="tName"/>
13 </association>
14 <collection property="students" ofType="com.zhiyou100.zhl.bean.Student">
15 <id column="s_id" property="sId"/>
16 <result column="s_name" property="sName"/>
17 </collection>
18 </resultMap>
19
20 <select id="selectById" resultMap="mymap">
21 select * from class c join teacher t join student s on c.teacher_id=t.t_id and s.class_id=c.c_id where c_id=#{cId};
22 </select>
23
24 </mapper>
进行单元测试

Mybatis学习二(字段名与实体类属性名不相同/关联查询)的更多相关文章
- 【转】MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
[转]MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体 ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013307.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这 ...
- MyBatis入门学习教程-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- MyBatis学习总结_04_解决字段名与实体类属性名不相同的冲突
一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), ...
- MyBatis学习总结4--解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定是完全相同的,如果直接在xml映射文件中使用sql进行映射,会造成返回值为空的情况,下面阐述解决方案: 测试所用表和数据 create t ...
- Mybatis系列(二):优化MyBatis配置文件中的配置和解决字段名与实体类属性名不相同的冲突
原文链接:http://www.cnblogs.com/xdp-gacl/p/4264301.html http://www.cnblogs.com/xdp-gacl/p/4264425.ht ...
- MyBatis学习笔记(四)——解决字段名与实体类属性名不相同的冲突
转自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/4264425.html 在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演 ...
- 四:MyBatis学习总结(四)——解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突. 一.准备演示需要使用的表和数据 CREATE TAB ...
- Mybatis框架学习总结-解决字段名与实体类属性名不相同的冲突
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定是完全相同的. 1.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY ...
随机推荐
- 假期做了一项调研:大厂为啥都自研RPC?结果合乎情理!
大家好,我是冰河~~ 五一假期过的可真快,今天开始,又要搬砖了.在五一假期当中,冰河做了一项调研,感觉结果还是挺合乎情理的. 翻看招聘信息 先来看我在某招聘网站上随便搜索了下Java招聘的岗位,看到的 ...
- KinbaseES 优化之IO优化
IO 资源作为目前服务器中最昂贵的资源之一,是目前绝大部分业务系统主要的瓶颈资源,原因就在于服务器相关的硬件资源中IO资源的性能提升是难度最大的.存储的发展步伐远低于内存和CPU的发展. 在数据库管理 ...
- 【Java】这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d";
String s1 = "a"; String s2 = s1 + "b"; String s3 = "a" + "b" ...
- Hadoop_04 验证Hadoop安装成功
[root@master ~]# cd hadoop-2.7.7/[root@master hadoop-2.7.7]# cd etc[root@master etc]# cd hadoop/[roo ...
- #线段树#洛谷 4681 [THUSC2015]平方运算
题目 给定一个数列 \(a\),维护以下两种操作 区间取平方 \(a[i]=a[i]^2\bmod p\) 区间和(不取模) \(p\) 为给定的小于 \(10^4\) 的数,\(n\leq 10^5 ...
- #状压dp#洛谷 3959 [NOIP2017 提高组] 宝藏
题目 选定一个起点 \(S\),找到一棵生成树,最小化 \[\sum_{i=1}^n dep_i\times dis_i \] \(n\leq 12\) 分析 设 \(dp[d][S]\) 表示当前树 ...
- js推送网页到扩展屏上--谷歌浏览器
平时我们推送网页.打开窗口都是用的 window.open,但是谷歌却不支持这种方法,也不是不支持,是可以打开窗口,但是无法将窗口移动到扩展屏上. 后面经过百度,发现了一个支持谷歌推送网页到扩展屏的方 ...
- Qt 设置图标的三种方式
Qt 设置软件窗口图标有三种方式: 一.通过资源文件,设置图标 this->setWindowIcon(QIcon(":/logo.ico")); 二.通过 pro 文件,设 ...
- sql注入--基础注入判断方法(构造闭合)
在我们拿到一个sql注入的题目之后,在确定了注入点之后,接下来要做的事情就是进行基础注入判断. 在开始前,我们需要理解一个SQL注入中最常用的词汇 -- 构造闭合 . 对于SQL处理语句后台的写法: ...
- FPGA技术助手,notepad++ 两个插件
DS的时间很珍贵的 ,尤其是过了32岁以后,一身的病,扛不住996的制度.为了增加速度,只能想办法怎么在fpga工作上面降低时间.你有心思点来点去的GUI的界面.还不如用一个脚本完全做完.notepa ...