mybatis中文官网 http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers
1、resultType(属性)和resultMap(标签引用)的区别?
resultType和resultMap都是用来对jdbcResultSets给实体类做属性名和列名做关系映射的,
一、resultType主要用于简单实体类,比如Integer,Long和一些自定义的JavaBean,在使用resultType时,mybatis也会隐式的创建一个resultMap来对应返回类型
二、ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了,
在复杂对象或者列名与字段名不匹配的时候我们可以使用resultMap来做结果映射。
两者的主要区别,在我的理解上,resultType主要用来对简单对象做映射的处理,resultMap是对复杂对象做映射处理。
2、collection和association的区别?
collection主要用于对象关系上的一对多,
association主要用于对象关系上的一对一。
举个例子,像人与身份证,订单与买家,都是一对一,都可以用association。
而一个订单中的多个商品,则可以用collection.
- association – 一个复杂类型的关联;许多结果将包装成这种类型
- 嵌套结果映射 – 关联本身可以是一个 resultMap 元素,或者从别处引用一个
- collection – 一个复杂类型的集合
- 嵌套结果映射 – 集合本身可以是一个 resultMap 元素,或者从别处引用一个
3、Statement和PreparedStatement的区别?
preparedStatement继承于statement。
preparedStatement执行语句时会进行一次预编译,将sql语句储存下来,而statement是每次执行时都队sql语句编译一次,对于单次来说,statement的执行效率更高,但是对于多次类似语句的执行,preparedStatement效率更高
preparedStatement可以预防sql注入,它使用?当作占位符,对于相似的sql语句它会存储下来,下次执行只需要修改参数,对于不符合参数类型的参数不能执行,可以有效的预防类似'or 1=1 ',';drop table'等sql注入操作。
对于动态sql拼接一般采用preparedStatement来执行,可以有效的减少类似sql语句执行的时间。