4、配置解析
程序实例:mybatis-02包
-
mybatis-config.xml
-
MyBatis的配置文件包含它的行为和属性的设置
1.configuration(配置)
- properties(属性)
- settings(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
2.环境配置(environments)
Mybatis可以配置多种环境,但是每个SqlSessionFactory实例只能选择一种环境。
Mybatis默认的事务管理器就是 jdbc。
连接池是 POOLED
3.属性(properties)
mybatis支持外部配置文件,首先、创建一个db.properties文件写入
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=sa
在mybatis-config.xml中插入标签
<!--properties配置文件必须在最上面,在xml中标签要按顺序写-->
<properties resource="db.properties">
</properties>
"jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"
这是原来配置需要有转义符,在properties中不需要转义
在中的属性修改为.
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
这里的value值要和配置文件中的name保存一致
也在标签中,写入属性。这种写法的优先级小于外部引用写法。
![](/qrcode.jpg)
<!--properties配置文件必须在最上面,在xml中标签要按顺序写-->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="sa"/>
</properties>
4.别名优化
- 类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写
<!--别名,xml中的别名标签必须放在第三个位置。默认的-->
<typeAliases>
<typeAlias type="com.kuang.pojo.User" alias="User"></typeAlias>
</typeAliases>
- 第二种别名也可以通过package来扫描,自动用类的小写来命名别名
<package name="com.kuang.pojo"/>
- 第三种,在实体类上加上注解来使用别名,注解值就是别名值
5.设置
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为
6.扩展配置
-
typeHandlers(类处理器)
-
objectFactory(对象工厂)
-
plugins(插件)
mybatis-generator-core生成器
mybatis-plus它的兄弟,用了之后更简洁,增删改查代码都省了
通用mapper
7.映射器mappers
MapperRegistry:注册绑定我们的Mapper文件。
- 方式一,通过xml文件绑定映射
<mappers>
<mapper resource="com/kuang/dao/UserMapper.xml"></mapper>
</mappers>
-
方式二,通过class对象来绑定
<mappers> <!-- <mapper resource="com/kuang/dao/UserMapper.xml"></mapper>--> <mapper class="com.kuang.dao.UserMapper"></mapper> </mappers>
注意:(与resourse相比,class,package必须要满足下面两点,resource不做要求。)
- 接口和他的Mapper配置文件必须同名。
- 接口和他的Mapper配置文件必须在一个包下。
-
方式三,
<mappers> <!-- <mapper resource="com/kuang/dao/UserMapper.xml"></mapper>--> <!---<mapper class="com.kuang.dao.UserMapper"></mapper>--> <package name="com.kuang.dao"/> </mappers>
要求和class一样。
8.生命周期和作用域
生命周期和作用域是非常重要的,错误的使用会导致并发问题
SqlSessionFactoryBuilder(创建工厂):
-
当一旦创建了SqlSessionFactory,就不再需要它了
-
局部变量
SqlSessionFactory:
-
类似于数据库的连接池。
-
SqlSessionFactory一旦被创建就应该在应用的运行期间一直存在,不会丢弃和重写创建
-
SqlSessionFactory的最佳作用域是应用作用域。
-
最简单的就是单例模式
SqlSession:
- 类似于一个连接池的请求
- 需要关闭,否则造成资源的浪费
总结
这里Mapper,就是代表一个具体的业务。SqlSessionFactory可以创建很多个SqlSession,每一个SqlSession就是一个线程,它也可以创建很多个Mapper业务。