1、什么是ORM
对象关系映射(ORM Obeject Relational Mapping),ORM模型就是数据库的表与简单Java对象(POJO)的映射模型,它主要解决数据库数据和POJO对象的相互映射;
好处
更加贴合面向对象的编程语意,Java程序员喜欢的姿势;
技术和业务解耦,Java程序员无需对数据库相关的知识深入了解
妈妈再也不用担心我,不释放数据库连接资源了
2、常用接口
sqlSessionFactoryBuilder :读取配置信息创建SqlSessionFactory,建造者模式,方法级别生命周期;
sqlSessionFactory :创建Sqlsession工厂单例模式.存在于程序的整个生命周期;
sqlSession :代表一次数据库连接,可以直接发送SQL执行,也可以通过调用Mapper访问数据库;线程不安全,要保证线程独享(方法级);
SQL Mapper :由一个Java接口和XML文件组成包含了要执行的SQL语句和结果集映射规则。方法级别生命周期;
3、Mybatis配置文件的标签
1、properties
定义配置,配置的属性可以在整个配置文件中其他位置进行引用;
重要,优先使用property配置文件解耦
2、settings
设置,用于指定MyBatis的一些全局配置属性,这些属性非常重要,它们会改变MyBatis的运行时行为;
重要,后面专门说明
3、typeAliases
别名,为Java类型设置一个短的名字,映射时方便使用;分为系统定义别名和自定义别名;
可以通过xml和注解配置
4、typeHandlers
用于jdbcType与javaType之间的转换;
无特殊需求不需要调整;后面专题说明
5、ObjectFactory
MyBatis每次创建结果对象的新实例时,它都会使用对象工厂(ObjectFactory)去构建POJO
大部分场景下无需修改
6、plugins
插件,MyBatis允许你在已映射的语句执行过程中的某一点进行拦截调用;
7、environments
用于配置多个数据源,每个数据源分为数据库源和事务的配置;
在多数据源环境使用
environment元素是配置一个数据源的开始,属性id是它的唯一标识
transactionManager元素配置数据库事务,其中type属性有三种配置方式
jdbc采用jdbc的方式管理事务;
managed,采用容器的方式管理事务,在JNDI数据源中使用;
自定义,自定义数据库事务管理办法;
■dataSource 元素配置数据源连接信息, type属性是连接数据库的方式配置,有四种配置方式
UNPOOLED非连接池方式连接
POOLED使用连接池连接
JNDI使用JNDI数据源
自定义数据源
8、databaseldProvider
MyBatis可以根据不同的数据库厂商执行不同的语句,用于一个系统内多厂商数据源支持。
大部分场景下无需修改
9、mappers
配置引入映射器的方法。可以使用相对于类路径的资源引用、或完全限定资源定位符(包括file:///的URL),或类名和包名等等
10、cacheEnabled
该配置影响的所有映射器中配置的缓存的全局开关
11、lazyLoadingEnabled
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态
12、aggressiveLazyLoading
当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载反之,每种属性将会按需加载。
13、multipleResultSetsEnabled
是否允许单一语句返回多结果集(需要兼容驱动)。
14、useColumnLabel
使用列标签代替列名。不同的驱动在这方面会有不同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。
15、useGeneratedKeys
允许JDBC支持自动生成主键,需要驱动兼容。如果设置为 true则这个设置强制使用自动生成主键,尽管-些驱动不能兼容但仍可正常工作(比如Derby).
16、autoMappingBehavior
指定MyBatis应如何自动映射列到字段或属性。NONE 表示取消自动映射; NONE, PAPARTIAL只会自动映射没有定义嵌套结果集映射的结果集。FULL 会自动映射任意复杂的结果集(无论是否嵌套)。
17、defaultExecutorType
配置默认的执行器。SIMPLE 就是普通的执行器; REUSE执行器会重用预处理语句( prepared statements) ; BATCH 执行器将重用语句并执行批量更新。
18、defaultStatementTimeout
设置超时时间,它决定驱动等待数据库响应的秒数。
19、safeRowBoundsEnabled
允许在嵌套语句中使用分页( RowBounds )。
20、mapUnderscoreToCamelCaser
是否开启自动驼峰命名规则( camel case )映射,即从经典数据库列名A COLUMN到经典Jave属性名aColumn的类似映射。
21、localCacheScope
MyBatis利用本地缓存机制( Local Cache )防止循环引用( circular references )和加速重复嵌套查询。默认值为SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为STATEMENT本地会话仅用在语句执行上,对相同SqlSession的不同调用将不会共享数据。
22、jdbcTypeForNull
当没有为参数提供特定的JDBC类型时,为空值指定JDBC类型。某些驱动需要指定列的JDBC类型,多数情况直接用一般类型即可,比如NULL. VARCHAR或OTHER。
22、lazyLoadTriggerMethods
指定哪个对象的方法触发一 次延迟加载。
23、callSettersOnNulls
指定当结果集中值为null的时候是否调用映射对象的setter( map对象时为put )方法,这对于有Map.keySet()依赖或null值初始化的时候是有用的。注意基本类型( int. boolean等)是不能设置成null的。
24、logPrefix
指定MyBatis增加到日志名称的前缀。
25、 loglmpl
指定MyBatis所用日志的具体实现,未指定时将自动查找。
26、proxyFactory
指定Mybatis创建具有延迟加载能力的对象所用到的代理工具。
4、基于xml配置的映射器
cache -给定命名空间的缓存配置。
cache-ref -其他命名空间缓存配置的引用。
resultMap- 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
sql- 可被其他语句引用的可重用语句块。
insert -映射插入语句
update -映射更新语句
delete -映射删除语句
select -映射查询语句
5、select元素
■自动映射
前提: SQL列名和JavaBean的属性是一致的;
自动映射等级autoMappingBehavior设置为PARTIAL ,需要谨慎使用FULL;
使用resultType ;
如果列名和JavaBean不一致,但列名符合单词下划线分割, Java是驼峰命名法则mapUnderscore' ToCamelCase可设置为true ;
■传递多个查询入参
1)使用map传递参数;可读性差,导致可维护性和可扩展性差, 杜绝使用;
2)使用注解传递参数;直观明了,当参数较少般小于5个的时候 ,建议使用;
3)使用Java Bean的方式传递参数;当参数大于5个的时候, 建议使用;
select标签
id
它和Mpper的命名空间组合起来是唯一-的 ,提供给MyBatis调用
如果命名空间和id组合起来不唯一,会抛出异常
parameterType
传入参数的类型 ;可以给出类全名,也可以给出类别名,使用别名必须是MyBatis内部定义或自定义的:基本数据类型: int,String , long , date(不知是sql.date还是util.date)复杂数据类型:类和Map
可以选择JavaBean , Map等复杂的参数类型传递给SQL
resultType
从这条语句中返回的期望类型的类的完全限定名或别名。注意如果是集合情形,那应该是集合可以包含的类型,而不能是集合本身。使用resultType或resultMap,但不能同时使用定义类的全路径,在允许自动匹配的情况下,结果集将通过JavaBean的规范映射;或者定义为int,double,float等参数..也可以使用别名,但是要符合别名规范,不能和resultMap同时使用。
它是我们常用的参数之一 ,比如我们总计总条数就可以把它的值设为int
resultMap
外部resultMap的命名引用。使用resultMap或resultType ,但不能同时使用;它是映射集的引用,将执行强大的映射功能,我们可以使用resultType或者resultMap其中的-个, resultMap可以给予我们自定义映射规则的机会
它是MyBatis最复杂的元素,可以配置映射规则、级联、typeHandler等
flushCache
它的作用是在调用SQL后,是否要求MyBatis清空之前查询的本地缓存和级缓存
true/false,默认为false
useCache
启动级缓存开关,是否要求MyBatis将此次结果缓存
true/false ,默认为true
timeout
设置超时时间.超时之后抛出异常,秒
默认值为数据库厂商提供的JDBC驱动所设置的秒数
fetchSize
获取记录的总条数设定
默认值是数据库厂商提供的JDBC驱动所设条数
6、resultMap元素属性
resultMap元素是MyBatis中最重要最强大的元素。它可以让你从90%的JDBC ResultSets 数据提取代码中解放出来,在对复杂语句进行联合映射的时候,它很可能可以代替数千行的同等功能的代码。
ResultMap的设计思想是,简单的语句不需要明确的结果映射,而复杂一点的语句只需要描述它们的关系就行了。
id
当前命名空间中的一个唯一标识,用于标识一个result map.
type
类的完全限定名,或者一个类型别名(内置的别名可以参考上面的表格).
autoMapping
如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性autoMappingBehavior。默认值为:unset。