resultMap自定义映射(多对一)】的更多相关文章

自定义resultMap,处理复杂的表关系,实现高级结果集映射 1) id :用于完成主键值的映射 2) result :用于完成普通列的映射 3) association :一个复杂的类型关联;许多结果将包成这种类型 4) collection : 复杂类型的集 1.多对一的查询,员工与员工部门: 1)直接通过resultMap进行处理: <!-- <resultMap>:自定义映射,处理复杂的表关系 <id column="eid" property=&qu…
1.1.1.1.      步骤一:将驼峰匹配注释掉 --------------测试完成后仍然 回来开启  其他地方可能用到 一旦注释掉驼峰匹配,那么再通过queryUserById查询的结果中,用户名就无法封装了,此时我们可以尝试使用ResultMap来解决这个问题. 1.1.1.2.      步骤二:在UserMapper.xml中配置resultMap <!-- resultMap标签:可以自己配置对象属性和表字段的映射(不仅仅是驼峰规则的映射) type属性:结果集的封装类型 id属…
collection:处理一对多和多对多的关系 1) POJO中的属性可能会是一个集合对象,我们可以使用联合查询,并以级联属性的方式封装对象.使用collection标签定义对象的封装规则 public class Dept { private Integer did; private String dname; private List<Emp> emps; // 省略 get/set方法 } public class Emp { private Integer eid; private S…
mybatis中使用resultType做自动映射时,要注意字段名和pojo的属性名必须一致,若不一致,则需要给字段起别名,保证别名与属性名一致. 使用resultMap做自定义结果映射,字段名可以不一致,并且可以指定要显示的列,比较灵活,应用也广泛. <select id="getUserList" resultMap="userList" parameterType="User"> select u.*, r.roleName f…
n Mybatis配置 全局配置文件SqlMapConfig.xml,配置了Mybatis的运行环境等信息. Mapper.xml文件即Sql映射文件,文件中配置了操作数据库的Sql语句.此文件需要在SqlMapConfig.xml中加载. n 通过Mybatis环境等配置信息构造SqlSessionFactory,即会话工厂. n 由会话工厂创建SqlSession即会话,操作数据库需要通过SqlSession进行. n Mybatis底层自定义了Executor执行器接口操作数据库,Exec…
<?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"> <!--namespace:名称空间 --> <mapper namespace="…
一.resultMap自定义结果集映射规则 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer id); } mapper定义: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTY…
项目开发中,多对多关系也是非常常见的关系 在数据库中创建表的脚本 table.sql CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(18), loginname VARCHAR(18), PASSWORD VARCHAR(18), phone VARCHAR(18), address VARCHAR(18) ); INSERT INTO tb_user(username,loginname,PA…
Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 name,sex,age,数据库中的age字段没有值,Mybatis返回的map中只映射了 name和sex字段,而age字段则没有包含. 那么如何将age字段映射到map中呢.提供两种解决方法: 使用Mybatis config配置 创建configuration.xml ? 1 2 3 4 5 6 7 8 <?xml versio…
背景 利用MyBatis将数据库的时间类型映射成Java8的时间类型,引申对不同类型的自定义映射 实现方法 1.实现MyBatis中TypeHandler接口 @MappedTypes(value = DateTime.class) @MappedJdbcTypes(value = {JdbcType.DATE,JdbcType.TIME,JdbcType.TIMESTAMP}) public class DateTimeTypeHandler extends BaseTypeHandler<D…
映射多对多,需要建立一张中间表 一共三张表,一个是 Category,一个是 Item,还有一个是 Categories_Items Categories_Items 作为中间表,其包含两个列,分别对应 CategoriyId 和 ItemId 下面附上代码: <hibernate-mapping package="hibernate.many2many"> <class name="Category" table="CATEGORIES…
LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; int iMapMode; static int cxClient, cyClient; switch (message) { case WM_SIZE: cxClient = LOWORD(lParam); cyClient = HIWORD(lParam);…
尽管在很多情况下基本域数据类型 已经够用,但你经常需要为单独域自定义映射 ,特别是字符串域.自定义映射允许你执行下面的操作: 全文字符串域和精确值字符串域的区别 使用特定语言分析器 优化域以适应部分匹配 指定自定义数据格式 还有更多 域最重要的属性是 type .对于不是 string 的域,你一般只需要设置 type : { "number_of_clicks": { "type": "integer" } } 默认, string 类型域会被…
参考博客:https://www.oschina.net/question/1032714_224673 http://stackoverflow.com/questions/22852383/how-to-change-valuenull-to-empty-string-from-query-when-using-mybatis Mybatis在使用resultMap来映射查询结果中的列,如果查询结果中包含空值的列(不是null),则Mybatis在映射的时候,不会映射这个字段,例如 查询 n…
old: @ManyToMany 注释:表示此类是多对多关系的一边, mappedBy 属性定义了此类为双向关系的维护端, 注意:mappedBy 属性的值为此关系的另一端的属性名. 例如,在Student类中有如下方法:   被控方:              @ManyToMany(fetch = FetchType.LAZY, mappedBy = "students")   public Set<Teacher> getTeachers() { return tea…
resultMap处理字段和属性的映射关系 如果字段名与实体类中的属性名不一致,该如何处理映射关系? 第一种方法:为查询的字段设置别名,和属性名保持一致 下面是实体类中的属性名: private Integer empId; private String empName; private Integer age; private String gender; 这是建表时设置的字段名: emp_id emp_name age gender 我们只需要在Mapper.xml中在写sql语句时,对字段…
dao接口 User myGetUserById(Integer id); sql xml自定义封装规则 <!--自定义某个javabean的封装规则 type:自定义规则的java类型 id:唯一标识方便引用--> <resultMap id="myUser" type="com.yunqing.mybatis.bean.User"> <!--id指定主键列的封装规则,return指定普通列的封装规则 column:数据库列名 pro…
mybatis默认封装规则: 1).按照列明和属性名一一对应的规则(不区分大小写) 2).如果不一一对应: 1).开启驼峰命名(数据库aaa_bbb, 程序中aaaBbb) 2).起别名 3).自定义结果集(resultMap):自己定义每一列数据和javaBean(当乱起名时)的映射规则 将resultType改为自己定义的resultMap去引用自己定义的 <select id="getCatById" resultMap="mycat"> sele…
(1)接口中对应的方法 public Emp getEmpById(Integer id); (2)Mapper文件 <resultMap type="com.eu.bean.Emp" id="emp"> <id column="id" property="id"/> <result column="last_name" property="lastName"…
在使用mybatis框架时,大多时候自动生成的mapper.xml文件能满足我们所需的数据库操作,但一些情况下还是需要我们自己写sql:为了加深印象,总结了下参数传递的方式以及各个关键字的含义如下: 语句中接收参数的方式有两种:1. #{}预编译 (可防止sql注入)2.${}非预编译(直接的sql拼接,不能防止sql注入) 参数类型有三种:1. 基本数据类型2. HashMap(使用方式和pojo类似 )3. Pojo自定义包装类型 基本数据类型使用方式 List<Bean> selectI…
@Data public class CreditCard extends BankCard { /** * 消费额度 */ private String creditLine; } @Data public class DebitCard extends BankCard { /** * 存款金额 */ private String deposit; } resultmap是mybatis中最复杂的元素之一,它描述如何从结果集中加载对象,主要作用是定义映射规则.级联的更新.定制类型转化器. r…
回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https://github.com/AutoMapper/AutoMapper/wiki/Projection 实例 本篇的场景是一个简单的日历事件,我们首先定义一个日历的事件如下: public class CalendarEvent { //事件日期 public DateTime Date { get;…
多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数据冗余的问题. 举例 一个用户(User)对多个角色(Role),一个角色对多个用户. 分类 单向的多对多关联映射(单向User--->Role) 对象模型 关系模型 实例 下面我们看一下实体类和映射文件的代码. User package com.liang.hibernate; import ja…
介绍基于基本映射的关联关系映射. 概念 基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用. 分类 关联关系分为上述七种,但是由于相互之间有各种关系,可以简化,例如:多对一与一对多映射,只是侧重的角度不对而已. 映射技巧 映射技巧是小编写映射文件的过程,总结的经典内容,总共分为四步,咋看不是特别易懂,但是效果很好.下面我们以实例看技巧. (1)写注释 格式为:?属性,表达的是本对象与?的?关系. 解释:在写映射文…
多对多双向关联关系(Project(工程)/Emp(员工)为案例): 步骤如下: 1.创建Project类,并需要定义集合类型的Emp属性 public class Project { //编号 private Integer pid; //名称 private String pname; //定义集合类型的Emp属性 private Set<Emp> emps=new HashSet<Emp>(); public Integer getPid() { return pid; }…
一对多和上文讲的多对一两种映射关系,其实就是站在相反的角度考虑同样的事情. 一对多和多对一映射原理是一样的,都在多的一端加入一个外键指向一的一端.也就是说,在关系数据库的表中,他们的表及表字段都是一样的. 他们的不同在于维护的关系: 多对一维护的关系——多指向一的关系,如果维护了多指向一的关系,那么加载多的时候会把一加载上来. 一对多维护的关系——一指向多的关系,如果维护了一指向多的关系,那么加载多的时候,会把一加载上来. 现在假如要用一对多映射描述学生和班级的关系. 1.hibernate单向…
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,採用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例(二),小编搭建了基本Hibernate的开发环境,并做了一个简单实例.对它的基本原理有了一个理性的认识. [SSH进阶之路]Hibernate基本映射(三),我们介绍了Hibernate的基本映射(即对一个实体进行映射)的相关概念,并给大家实现相关实例.比較简单. 这篇博客.我们開始介绍基于基本映…
     映射原理 在数据库学习阶段,我们知道,如果实体和实体之间的关系是多对多,那么我们就抽出来第三张表,第一张表和第二张表的主键作为第三表的联合主键,结合我们的hibernate,多对多关联,无论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张表中做一个关联,用第三张表来解决可能造成的数据冗余问题.今天这篇博文小编来简单的介绍一下hibernate中的多对多关联映射. 在某些系统中,一个用户可以有多个角色,一个角色也可以有多个用户,so,她们之间的关系就是多对多,多对多关联…
在hibernate中非常重要的就是映射,在前面的博文中,小编简单的介绍了基本映射,基本映射是对一个实体进行映射,关联映射就是处理多个实体之间的关系,将关联关系映射到数据库中,所谓的关联关系在对象模型中有一个或多个引用.这个比较简单,但是基础知识还是需要好好掌握的哦,还有一些关联映射,比如user && group,她们之间的关系是一对多,我们知道一个用户只能属于一个组,但是一个组可以包好N多个用户,所以他们之间的关系就是多对一的关系,接着我们来看他们的对象模型以及关系模式. 所谓多对一单…
用户与订单时一对多关系,再加上商品信息的话,订单与商品之间就是多对多关系了 DROP DATABASE IF EXISTS testdb; USE testdb; /*用户表,记录用户信息:用户与订单为一对多关系:一个用户可拥有多个订单*/ DROP TABLE IF EXISTS `tb_user`; CREATE TABLE tb_user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(18), loginname VARCHAR(…