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 ...
随机推荐
- ‘MsBuild.exe‘ 不是内部或外部命令,也不是可运行的程序
方法一: 在系统环境变量中的path变量中添加一条路径: 32位环境 C:\Windows\Microsoft.NET\Framework\v4.0.30319 64位环境 C:\Windo ...
- SpringBoot集成LDAP同步数据
1.pom引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- MVC架构设计浅析(WEB网页开发)
MVC架构设计浅析 杨传伟 (石家庄铁道大学信息科学与技术学院,河北省,石家庄市,050043) 摘 要:本文以图书管理系统为案例(当前主流框架SpringMVC的原理来分析MVC的设计理念等),深入 ...
- 在typescript中,Omit是什么意思
在TypeScript中,Omit<Type, Keys> 是一个工具类型(utility type),它用于创建一个新的类型,这个新类型是从现有类型(Type)中排除了某些指定的属性(K ...
- MogDB/opengauss触发器简介(1)
MogDB/opengauss 触发器简介(1) 触发器是对应用动作的响应机制,当应用对一个对象发起 DML 操作时,就会产生一个触发事件(Event).如果该对象上拥有该事件对应的触发器,那么就会检 ...
- 开源相机管理库Aravis例程学习(一)——单帧采集single-acquisition
目录 简介 源码 函数说明 arv_camera_new arv_camera_acquisition arv_camera_get_model_name arv_buffer_get_image_w ...
- 报名开启 | HarmonyOS第一课“营”在暑期系列直播
<HarmonyOS第一课>2023年再次启航! 特邀HarmonyOS布道师云集华为开发者联盟直播间 聚焦HarmonyOS 4版本新特性 邀您一同学习赢好礼! 你准备好了吗? ↓↓↓预 ...
- 推荐几款Vue后台管理系统的框架,以便备用
推荐几款Vue后台管理系统的框架,以便备用 Vue.js 是一个目前比较流行的前端框架,在业界也算很有名气,今天这里为大家罗列一下基于Vue的后端管理的框架. 使用这些框架你会发现它包括了我们常用的路 ...
- 一个简单的开源消息中间件 FolkMQ v1.4.2 发布
功能简表 角色 功能 生产者(客户端) 发布消息.定时消息(或叫延时).顺序消息.可过期消息.事务消息.支持 Qos0.Qos1 消费者(客户端) 订阅.取消订阅.消费-ACK(自动.手动) 服务端 ...
- vue登录3D效果
实现的效果 登录动态效果很炫酷,话不多说直接上代码: 组件template <template> <div class="entrance"> <di ...