mybatis resultMap映射学习笔记
这几天,百度mybatis突然看不到官网了,不知道百度怎么整的。特此贴出mybatis中文官网:
http://www.mybatis.org/mybatis-3/zh/index.html
一个学习mybatis的英文网站:http://mybatis.co.uk/
一.概论
大类里面有一个小类用association,大类里面有多个小类用collection。之前学习过json或者xml-rpc,里面的组合数据类型都是两种:数组和结构体。数组就是集合,就是序列。结构体就是映射,就是键值对。
二.关于typeAliases属性
_byte映射的是byte(值类型),byte映射的是Byte(引用类型)。系统已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。下面是一些非基本数据类型的别名定义,左边是mybatis的,右边是对应的java中的对象。
date |
Date |
decimal |
BigDecimal |
bigdecimal |
BigDecimal |
object |
Object |
map |
Map |
hashmap |
HashMap |
list |
List |
arraylist |
ArrayList |
collection |
Collection |
iterator |
Iterator |
三.association的用法
大类里面有一个小类,那就用association。用association有两种方式:一种是查询一次,直接映射;另一种方式是:通过association的select属性,再次发起一个查询,这就是传说中的1+N问题。前者相当于迈了一大步,后者相当于小碎步走了好几下。迈一大步的好处在于:一次完成任务,避免了多次请求数据库,缺点是这一个大请求可能占用了数据库大量的资源,别人没法进行写操作,造成等待;迈小碎步的好处在于:灵活控制,语句简单,缺点是可能会很费时间。凡是各有利弊,只得得愿老天保佑。
迈一大步:列出博客的详细信息,包括blog_id,blog_title及作者的id,用户名,密码,性别等信息,也就是class Blog里有一个成员变量User author。
<select id="test2" parameterType="int" resultMap="test2Map" >
select
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id,
A.id as author_id,
A.username as author_username,
A.password as author_password,
A.email as author_email,
A.bio as author_bio,
A.favourite_section as author_favourite_section
from
Blog B
left join Author A on (B.author_id = A.id)
where
B.id = #{id}
</select>
<resultMap type="Blog" id="test2Map">
<id property="id" column="blog_id" javaType="int"/>
<result property="title" column="blog_title" javaType="string"/>
<association property="author" column="blog_author_id" javaType="Author">
<id property="id" column="author_id" javaType="_int"/> <result property="username" column="author_username" javaType="string"/> <result property="password" column="author_password" javaType="string"/> <result property="email" column="author_email" javaType="string"/> <result property="bio" column="author_bio" javaType="string"/> <result property="favouriteSection" column="author_favourite_section" javaType="string"/>
</association></resultMap>
迈两次小碎步:首先获取用户的id,再发起一次查询。
<resultMap type="Blog" id="test2Map">
<id property="id" column="blog_id" javaType="int"/>
<result property="title" column="blog_title" javaType="string"/>
<association property="author" column="blog_author_id" javaType="Author" select="test2DivideSelect">
</association>
</resultMap>
<select id="test2DivideSelect" parameterType="int" resultType="Author">
select * from author where id = #{id}</select>
不一定是大类里面包含一个小类,可能是两三个个小类,这时迈一大步就需要通过association标签的columnPrefix属性(相对应的查询语句也要多用as,记住typeAlias和as可以给一个东西重命名,这个很有用)。如果一个大类里面包含的是更多的小类,那就要用List<小类>了。
<resultMap id="blogResult" type="Blog">
<id property="id" column="blog_id" />
<result property="title" column="blog_title" />
<association property="author" resultMap="authorResult" />
<association property="coAuthor" resultMap="authorResult" columnPrefix="co_" />
</resultMap>
四.resultMap的collections属性
一个大类里面包含着多个小类:class User里面有一个成员变量List<Blog>blogs也就是说一个用户对应多篇文章。
<select id="test3" parameterType="int" resultMap="test3Map">
select
A.id as author_id,
A.username as author_username,
A.email as author_email,
B.id as blog_id,
B.title as blog_title,
B.author_id as blog_author_id
from
Author A
left join Blog B on (A.id = B.author_id)
where
A.id = #{id}
</select>
<resultMap type="Author" id="test3Map">
<id column="author_id" property="id" javaType="_int"/>
<result column="author_username" property="username" javaType="string"/>
<result column="author_email" property="email" javaType="string"/>
<collection column="blog_author_id" property="blogs" javaType="ArrayList" ofType="Blog">
<id column="blog_id" property="id" javaType="_int"/>
<result column="blog_title" property="title" javaType="string"/>
</collection></resultMap>
就如上述所说, collection 即表示“多个 ” 的关系, 必须注意的是,一定要指定ofType 属性,这个 ofType 属性指的是集合的元素类型,缺少这个属性, MyBatis 会报出设定参数错误的提示 。
就如同 association 一样, collection 也分两种:一种为嵌套查询 select ,另一种为嵌套结果 resultMap ,用法也跟 association 一致,在这里就不再详细述说。
mybatis resultMap映射学习笔记的更多相关文章
- mybatis resultMap 映射配置
现有数据库表: CREATE TABLE `dept_p` ( `DEPT_ID` ) NOT NULL, `DEPT_NAME` ) DEFAULT NULL, `PARENT_ID` ) DEFA ...
- Spring+SpringMVC+MyBatis+Redis框架学习笔记
在Java互联网中,以Spring+Spring MVC+MyBatis (SSM) 作为主流框架. SSM+Redis的结构图 在这种框架系统中: Spring IoC 承担了一个资源管理.整合.即 ...
- Hibernate单表映射学习笔记之一——hibernalnate开发环境配置
1.什么是ORM? Object/Relationship Mapping:对象/关系映射 2.写SQL语句不好之处: (1)不同数据库使用的SQL语法不同(PL/SQL.T/SQL) (2)同样的功 ...
- 转:C#制作ORM映射学习笔记三 ORM映射实现
现在开始实现ORM的主体模块,首先需要在项目中新建一个类,命名为DbAccess,然后在项目的引用中添加两个dll,分别是MySql.Data.dll和System.Data.SQLite.dll,这 ...
- 转:C#制作ORM映射学习笔记一 自定义Attribute类
之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己 ...
- 转:C#制作ORM映射学习笔记二 配置类及Sql语句生成类
在正式开始实现ORM之前还有一点准备工作需要完成,第一是实现一个配置类,这个很简单的就是通过静态变量来保存数据库的一些连接信息,等同于.net项目中的web.config的功能:第二需要设计实现一个s ...
- mybatis源码学习(三)-一级缓存二级缓存
本文主要是个人学习mybatis缓存的学习笔记,主要有以下几个知识点 1.一级缓存配置信息 2.一级缓存源码学习笔记 3.二级缓存配置信息 4.二级缓存源码 5.一级缓存.二级缓存总结 1.一级缓存配 ...
- mybatis学习笔记(7)-输出映射
mybatis学习笔记(7)-输出映射 标签: mybatis mybatis学习笔记7-输出映射 resultType 输出简单类型 输出pojo对象和pojo列表 resultMap result ...
- mybatis学习笔记(四)-- 为实体类定义别名两种方法(基于xml映射)
下面示例在mybatis学习笔记(二)-- 使用mybatisUtil工具类体验基于xml和注解实现 Demo的基础上进行优化 以新增一个用户为例子,原UserMapper.xml配置如下: < ...
随机推荐
- POI读写Word docx文件
使用POI读写word docx文件 目录 1 读docx文件 1.1 通过XWPFWordExtractor读 1.2 通过XWPFDocument读 2 写docx ...
- mysqli,Fatal error
<?php //mysql数据库类-mysqli版 //2014/6/13 class mysqlidb{ public $dbhost; public $dbuser; public $dbp ...
- ssh升级
Openssh升级操作步骤(此方法仅供参考) 1 .开启telnet服务 未避免openssh升级失败,导致ssh无法连接,在升级前首先开启telnet服务. 首先要确定是否安装了telnet 修改配 ...
- 移动Windows用户文件夹的方法研究
这种方法可能导致升级Windows失败.请谨慎使用. Windows 8.1 使用有效.其他系统请酌情修改. —————————————————————————— 复制文件内容(带权限等信息):有的说 ...
- Spring MVC @ResponseBody返回中文字符串乱码问题
朋友做小项目练手的时候遇到的,着实让他郁闷够呛..这个问题的确很恶心.. 项目中引用的json包,直接用@ResponseBody注解返回json字符串..有关这个的乱码问题网上很多,各种花样各种转码 ...
- label与input间距的小问题
先码后文 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...
- APDU
# APDU # 定义:APDU(ApplicationProtocolDataUnit--应用协议数据单元).协议数据单元PDU(ProtocolDataUnit)是指对等层次之间传递的数据单位.协 ...
- maven学习(一)
Maven这个词可以翻译为:知识的积累,也可以翻译为“专家”,“内行”.maven主要服务于鲫鱼java平台的项目构建.依赖管理和项目信息管理.无论是小型的开源类库项目,还是大型的企业级应用,无乱是传 ...
- java 25 - 5 网络编程之多线程实现聊天室
平时聊天都是在同一个窗口的,所以,这个窗口同时实现发送数据和接收数据,这时就需要多线程实现. 建立一个类: 把聊天的发送端和接收端放在同一个类,启动一个窗口 public class CharRoom ...
- java 24 - 10 GUI 之 四则预算的数据校验
我想要在校验的过程中,如果输入到操作数中的不是数字,则弹出提醒框: 类 JOptionPane 有助于方便地弹出要求用户提供值或向其发出通知的标准对话框 方法名 描述 showConfirmDial ...