Mybatis的mapper.xml文件详解

一、#{}和${}的区别:html

        #{}表示一个占位符号,#{}接收输入参数,类型能够是简单类型,pojo、hashmap。
        若是接收简单类型,#{}中能够写成value或其它名称。
        #{}接收pojo对象值,经过OGNL读取对象中的属性值,经过属性.属性.属性...的方式获取对象属性值。

        ${}表示一个拼接符号,会引用sql注入,因此不建议使用${}。
        ${}接收输入参数,类型能够是简单类型,pojo、hashmap。
        若是接收简单类型,${}中只能写成value。
        ${}接收pojo对象值,经过OGNL读取对象中的属性值,经过属性.属性.属性...的方式获取对象属性值。

java

二、selectOne和selectList的区别:
        selectOne表示查询出一条记录进行映射。若是使用selectOne能够实现使用selectList也能够实现(list中只有一个对象)。web

        selectList表示查询出一个列表(多条记录)进行映射。若是使用selectList查询多条记录,不能使用selectOne。
        若是使用selectOne报错:
        org.apache.ibatis.exceptions.TooManyResultsException:
        Expected one result (or null) to be returned by selectOne(), but found: 4

sql

三、在映射文件中经过parameterType指定输入参数的类型。

四、在映射文件中经过resultType指定输出结果的类型。apache

 

五、resultType:mybatis

使用resultType实现较为简单,若是pojo中没有包括查询出来的列名,spa

须要增长列名对应的属性,便可完成映射。.net

若是没有查询结果的特殊要求建议使用resultType。htm

 

六、resultMap:对象

须要单独定义resultMap,实现有点麻烦,若是对查询结果有特殊的要求,

使用resultMap能够完成将关联查询映射pojo的属性中。

resultMap能够实现延迟加载,resultType没法实现延迟加载。

 

6.一、resultMap:

使用association和collection完成一对一和一对多高级映射(对结果有特殊的映射要求)。

association:

做用:将关联查询信息映射到一个pojo对象中。

场合:为了方便查询关联信息可使用association将关联订单信息映射为用户对象的pojo属性中,

好比:查询订单及关联用户信息。

使用resultType没法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的须要选择使用resultType仍是resultMap

 

collection:

做用:将关联查询信息映射到一个list集合中。

场合:为了方便查询遍历关联信息可使用collection将关联信息映射到list集合中,

好比:查询用户权限范围模块及模块下的菜单,

可以使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,

这样的做的目的也是方便对查询结果集进行遍历查询。若是使用resultType没法将查询结果映射到list集合中。

 


七、友情连接

     Mybatis入门例子

     mybatis官网

相关文章
相关标签/搜索