mybatis学习05:Mybatis核心配置解析
- 
配置解析: - 
核心配置文件 
- 
环境配置 
- 
属性(properties) 
- 
类型别名(typeAliases) 
- 
设置(settings) 
- 
映射器(mappers) 
- 
其他配置 
- 
生命周期和作用域 
 
- 
- 
核心配置文件: - 
mybatis-config.xml 
- 
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息; configuration(配置)
 properties(属性)
 settings(设置)
 typeAliases(类型别名)
 environments(环境配置)
 environment(环境变量)
 transactionManager(事务管理器)
 dataSource(数据源)
 databaseIdProvider(数据库厂商标识)
 mappers(映射器)
 
- 
- 
环境配置(environments) - 
MyBatis 可以配置多套环境; 
- 
尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。 
- 
在 MyBatis 中有两种类型的事务管理器( type="[JDBC|MANAGED]") - 
Mybatis默认的事务管理器是:JDBC 
 
- 
- 
dataSource 配置 JDBC 连接对象的资源(type="[UNPOOLED|POOLED|JNDI]") - 
mybatis默认的连接池是:POOLED 
- 
数据库连接池技术:dbcp , c3p0 , druid 
- 
池:用完可以回收! 
 
- 
 
- 
- 
属性(properties) - 
我们可以通过properties属性来实现引用配置文件; 
- 
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置【db.properties】 
- 
编写一个数据库配置文件:db.properties driver=com.mysql.cj.jdbc.Driver
 url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8
 username=root
 password=root
- 
在核心配置文件中引入 
- 
在xml中,所有的标签都可以规定其顺序; <!--引入外部配置文件-->
 <properties resource="db.properties">
 <property name="username" value="root"/>
 <property name="password" value="root"/>
 </properties>
- 
可以直接引入外部文件; 
- 
可以在其中增加一些属性配置; 
- 
如果2个文件有同一个字段,优先使用外部配置文件的; 
 
- 
- 
类型别名(typeAliases) - 
作用:类型别名是为 Java 类型设置一个缩写名字。 
- 
意义:它仅用于 XML 配置,用来减少类完全限定类名的冗余; 
- 
方式1: <!--可以给实体类起别名-->
 <typeAliases>
 <typeAlias type="com.ljxdemo.pojo.User" alias="User"/>
 </typeAliases>
- 
Mapper.xml配置文件:resultType="User" <!--一个id对应一个方法 -->
 <select id="getUserList" resultType="User">
 select * from mybatis.user
 </select>
- 
方式2:扫描实体类的包,它的默认别人就是类名的首字母小写; - 
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean 
 <!--可以给实体类起别名-->
 <typeAliases>
 <package name="com.ljxdemo.pojo"/>
 </typeAliases>
- 
- 
Mapper.xml配置文件:resultType="user" <!--一个id对应一个方法 -->
 <select id="getUserList" resultType="user">
 select * from mybatis.user
 </select>
- 
方式3:使用注解做别名:注解一定要放在实体类上 
- 
Mapper.xml配置文件:resultType="MyUser" <!--一个id对应一个方法 -->
 <select id="getUserList" resultType="MyUser">
 select * from mybatis.user
 </select>
- 
核心配置文件中:使用包方式 <!--可以给实体类起别名-->
 <typeAliases>
 <package name="com.ljxdemo.pojo"/>
 </typeAliases>
- 
区别: - 
在实体类比较少的时候,使用第一种方式;(第一种可以DIY:自定义别名) 
- 
在实体类比较多的时候,使用第二种方式;(第二种则不行,如果非要改,需要在实体类上加注解别名) 
 
- 
 
- 
- 
设置(settings) - 
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时的行为; <settings>
 <setting name="cacheEnabled" value="true"/>
 <setting name="lazyLoadingEnabled" value="true"/>
 </settings>
- 
数据库字段为什么会加 " _ ":user_name - 
因为Oracle数据库,会把所有的字段都改为大写;可读性太低,所以就加了" _ " 
 
- 
 
- 
- 
映射器(mappers) - 
MapperRegistry:注册绑定我们的Mapper文件; 
- 
方式1:推荐使用 <!--每一个Mapper.xml都需要在Mybatis核心配置文件中注册 -->
 <mappers>
 <mapper resource="com/ljxdemo/dao/UserMapper.xml"/>
 </mappers>
- 
方式2:使用class文件绑定注册 - 
注意点: 
- 
接口和它的Mapper配置文件必须同名; 
- 
接口和它的Mapper配置文件必须在同一个包下; 
 <mappers>
 <mapper class="com.ljxdemo.dao.UserMapper"/>
 </mappers>
- 
- 
方式3:使用扫描包进行注入绑定; - 
注意点: 
- 
接口和它的Mapper配置文件必须同名; 
- 
接口和它的Mapper配置文件必须在同一个包下; 
 <mappers>
 <package name="com.ljxdemo.dao"/>
 </mappers>
- 
 
- 
- 
其他配置: - 
typeHandlers(类型处理器) 
- 
objectFactory(对象工厂) 
- 
plugins(插件) - 
mybatis-plus 
- 
mybatis-generator-java 
 
- 
 
- 
- 
生命周期和作用域: - 
流程图:  
- 
生命周期、和作用域 是至关重要的,因为错误的使用会导致非常严重的并发问题; 
- 
SqlSessionFactoryBuilder: - 
一旦创建了 SqlSessionFactory,就不再需要它了 
- 
局部变量 
 
- 
- 
SqlSessionFactory: - 
说白了就是想象为:数据库连接池; 
- 
SqlSessionFactory 一旦被创建就应该在应用的运行期间一直存在; 
- 
没有任何理由丢弃它或重新创建另一个实例; 
- 
因此SqlSessionFactory 的最佳作用域是应用作用域; 
- 
最简单的就是使用单例模式或者静态单例模式 
 
- 
- 
SqlSession: - 
连接到连接池的一个请求; 
- 
请求完需要关闭请求;否则资源被浪费! 
- 
SqlSession 的实例不是线程安全的,因此是不能被共享的; 
- 
所以它的最佳的作用域是请求或方法作用域; 
 
- 
- 
参考流程图:  
- 
这里面的每一个Mappper,就代表一个具体的业务! 
 
- 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号