MyBatis学习总结

  mybatis中文官网 http://www.mybatis.org/mybatis-3/zh/configuration.html#mappers

1resultType(属性)和resultMap(标签引用)的区别?

  resultType和resultMap都是用来对jdbcResultSets给实体类做属性名和列名做关系映射的,

  一、resultType主要用于简单实体类,比如Integer,Long和一些自定义的JavaBean,在使用resultType时,mybatis也会隐式的创建一个resultMap来对应返回类型

  二、ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了,

  在复杂对象或者列名与字段名不匹配的时候我们可以使用resultMap来做结果映射。

  两者的主要区别,在我的理解上,resultType主要用来对简单对象做映射的处理,resultMap是对复杂对象做映射处理。

 

2collectionassociation的区别?

  collection主要用于对象关系上的一对多,

  association主要用于对象关系上的一对一。

  举个例子,像人与身份证,订单与买家,都是一对一,都可以用association。

  而一个订单中的多个商品,则可以用collection.

 

  • association – 一个复杂类型的关联;许多结果将包装成这种类型
    • 嵌套结果映射 – 关联本身可以是一个 resultMap 元素,或者从别处引用一个
  • collection – 一个复杂类型的集合
    • 嵌套结果映射 – 集合本身可以是一个 resultMap 元素,或者从别处引用一个

 

3StatementPreparedStatement的区别?

  preparedStatement继承于statement。

  preparedStatement执行语句时会进行一次预编译,将sql语句储存下来,而statement是每次执行时都队sql语句编译一次,对于单次来说,statement的执行效率更高,但是对于多次类似语句的执行,preparedStatement效率更高

  preparedStatement可以预防sql注入,它使用?当作占位符,对于相似的sql语句它会存储下来,下次执行只需要修改参数,对于不符合参数类型的参数不能执行,可以有效的预防类似'or 1=1 ',';drop table'等sql注入操作。 

  对于动态sql拼接一般采用preparedStatement来执行,可以有效的减少类似sql语句执行的时间。

  

  

 

posted @ 2019-05-04 13:31  荆棘满布  阅读(120)  评论(0编辑  收藏  举报