Mybatis配置解析-03
发布日期:2022-01-20 01:09:39 浏览次数:1 分类:技术文章

本文共 3069 字,大约阅读时间需要 10 分钟。

1.核心配置文件

JDBC中连接数据库的URL转义:"jdbc:mysql://localhost:3306/mybatis?useSSL=true&**amp**;useUnicode=true&characterEncoding=utf8"
mybatis-config.xml
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
2.环境配置(environments)
MyBatis 可以配置成适应多种环境
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
学会使用多套运行环境
Mybatis默认的事务管理器就是JDBC,连接池 POOLED
3.属性(properties)
我们可以通过properties来实现引用配置文件
编写一个配置文件
db.properties

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useSSL=true&;useUnicode=true&;characterEncoding=utf8user=rootpassword=123

顺序:The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

还可以在内部使用

在这里插入图片描述4.类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写

    
config.xml

当这样配置时,Blog 可以用在任何使用 domain.blog.Blog 的地方。

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,

    
config.xml

如果实体类多的话就用第二种

如果少的话就用第一种因为可以DIY

但是如果有注解、每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 domain.blog.Author 的别名为 author;若有注解,则别名为其注解值。见下面的例子:@Alias("author")public class Author {    ...}

注解在实体类的上边

5.设置(settings)
在这里插入图片描述

在这里插入图片描述6.其他配置

typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
7.映射器(mappers)
注册绑定我们的
MapperRegistry:注册绑定我们的Mapper文件。
方式一:

方式二:使用Class文件绑定Mapper文件

注意点:接口和他的配置文件必须同名,同包

方式三:

//

注意点:接口和他的配置文件必须同名,同包

8.生命周期和作用域
生命周期和作用域都是至关重要的,因为错误的使用会导致非常严重的并发问题
生命周期和作用域

作用域(Scope)和生命周期

理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。

我们可以先画一个流程图,分析一下Mybatis的执行过程!

作用域理解

SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try...catch...finally... 语句来保证其正确关闭。所以 SqlSession 的最佳的作用域是请求或方法作用域。

在这里插入图片描述在这里插入图片描述

学会了Crud,和基本的配置及原理,后面就可以学习些业务开发

在这里插入图片描述

转载地址:https://blog.csdn.net/answero/article/details/107030966 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mybatis-04 ResultMap结果集映射
下一篇:Mybatis-02 CRUD操作及配置解析

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年03月25日 01时35分50秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

iphone mysql 客户端_如何实现iphone端通过soap访问mysql数据库 2019-04-21
mysql 三天 分组查询_3mysql第三天 查询的指令补充 2019-04-21
lnmp怎么使用mysql_lnmp使用实例 2019-04-21
python 加密解密 rc4_python实现rc4加密解密,base64输出 2019-04-21
python3 字段key_Python3_模块(一) 2019-04-21
xlwings删除数据_超全整理|Python 操作 Excel 库 xlwings 常用操作详解! 2019-04-21
android 系统gpu 调试_详解Android获得系统GPU参数 gl.glGetString 2019-04-21
hibernate mysql utf8_hibernate建表默认为UTF-8编码 2019-04-21
mysql端口establish_establish_connection使用方法 2019-04-21
mysql备份命令有几个_MySQL数据库备份命令的几个实际应用 2019-04-21
e审通mysql连接错误_铭泰e审通安装后显示连接到数据库失败怎么处理 2019-04-21
python调度web_Python调用WSGI接口实现简单的web应用 2019-04-21
python贪吃蛇设计报告_用Python写一个贪吃蛇 2019-04-21
python要有什么基础知识_Python基础知识 2019-04-21
java scavenge_Java虚拟机(JVM)垃圾回收器Parallel Scavenge收集器 - Break易站 2019-04-21
java wireshark_java wireshark 16进制复制的字符串转换字节数组 2019-04-21
java aio 场景_Java中BIO、NIO、AIO的区别和应用场景 2019-04-21
java 拼图游戏_Java 拼图游戏 2019-04-21
java限制只能修改一次订单_拥有可以动态更改订单的Java Comparator是否可以? 2019-04-21
cephfs java api_CephFS 使用 2019-04-21