一、resultMap(用来描述如何从数据库结果集中加载对象)

用处:
1.类似于全局配置文件中的Alias(别名)一样,在文件中定义后,在后面可以意使用.省去了多余的重复代码.
2.可以解决数据库中数据的字段名和java对象中属性名不对应的问题.
3.可以解决嵌套语句的映射问题.
如何使用:在mapper标签里面,使用resultMap标签.
这个id是它的标识,也就是名字,在被其他语句使用的时候就靠这个id了,
type是对应的类型,填写完全限定名或者在全局配置文件声明过的别名.

<typeAlias type="com.bean.Orders" alias="Orders"></typeAlias>

java 字段映射_MyBatis

首先

还是要知道他们是干什么用的再学习如何使用
id和result一样,用来一对一从数据库中映射到java属性上.
association,英文意思是关联的,当一个java对象中的属性是另一个对象的时候就用到它了
collection,这个就是集合了,当java对象中的属性是一个集合的时候就用到它了
constructor,英文意思是结构体,这个用在对象的构造方法中,用来还原一个对象.
discriminator相当于一个选择语句,根据不同情况来执行不同的resultMap

其次

下面是java代码和数据库列名

java 字段映射_java 字段映射_02


java 字段映射_MyBatis_03

在书写id和result时就可以这样写

<id property="id" column="id"></id>
        <result property="userID" column="user_id"></result>
        <result property="number" column="number"></result>
        <result property="note" column="note"></result>

其中id用来标识唯一的主键,result用来标识其他属性. property是对应的java属性,column是数据库中的列名,这样就解决了不对应的问题.如果不写的话就会根据名称自动映射.
比如我上面写的语句是这样的,没有指定createtime属性,查询后返回的结果却是

Orders{id=5, userID=10, number=‘1000012’, createtime=Thu Feb 12 16:13:23 CST 2015, note=‘null’}

association使用在java对象中有个属性是另外一个对象的时候,也用在联合查询中.

比如在刚才的属性中添加上User这个对象,作为订单这个类的一个属性

java 字段映射_java 字段映射_04


两个对应的数据库表是

java 字段映射_ci_05


现在对他们做嵌套查询,对应的SQL是这样子的,并且将两个ID区分开.

select o.id as ordersID,
            o.number,
            o.createtime,
            o.note,
            u.id as userID,
            u.username,
            u.sex,
            u.address
     from orders o,user u where o.user_id=u.id and o.user_id=10;

得到的结果

java 字段映射_java 字段映射_06


那么在映射文件中要怎么写才能比较快捷简单方便呢??就要用到association这个标签了

java 字段映射_java 字段映射_07

接下来要讲解的就是collection这个标签了,

java 字段映射_java 字段映射_08


其实区别就在于一个ofType,要标注出来集合中的类型.

二、select

select标签中允许很多属性来控制作用细节

<id=""  作为命名空间,可以被其他association和collection标签调用,经常用在嵌套查询的时候
<parameterType="int" 来指定参数的类型,mybatis会通过类型处理器(TypeHandler)来推断类型.
<resultType="hashmap"  <resultMap="personResultMap" 这两个只能出现一个,用来指定返回类型是什么参数
<flushCache="false" 默认为false,设置为true后,只要当语句调用,就会刷新本地和二级缓存 
<useCache="true"  默认值:对select元素为true,设置后,会将本句的结果被二级缓存存起来

三、update、insert、delete

这三种比较相近,所以放在一起讲

<id 还是一样的,可以被用来代表这条语句
<flushCache 一样的,默认为false
<useGeneratedKeys="true"   仅对insert和update有效,默认为false,
这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键