lyz的自学笔记
文章目录
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、配置解析
1、 核心配置文件
- mybatis-config.xml
- Mybatis的配置文件包含了会深深影响Mybatis行为的设置和属性信息
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIDProvider(数据库厂商标识)
mapper(映射器)
2 、环境配置(environments)
Mybatis可以配置成适用多种环境(尽管可以配种多种,但每个SqlSessionFactory实例只能选择一种环境,适用default选择使用哪一种环境,值为environment的id值),
<environments default="test">
<environment id="development">
<!-- 事务管理-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="a123"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
3、 事务管理器(transactionManager)
在Mybatis中有两种类型的事务管理器
- JDBC-这个配置就是直接使用了JDBC的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域
- MANAGED-这个配置几乎没做什么。
4、数据源(dataSource)
dataSource使用标准的JDBC数据源接口来配置JDBC练级诶对象的资源
有三种内键的数据源类型
UNPOOLED-这个数据源的实现只是每次被请求时打开和关闭连接,有点慢,但对于数据库连接可用性方面没有太高要求的简单应用程序来说是一个很好的选择
- driver-配置JDBC驱动
- url-数据库的url地址
- username-登录数据库的用户名
- password-登录数据库的密码
- defaultTransactionIsolationLevel-默认的连接事务隔离级别
- defaultNetworkTimeout-网络超时
POOLED- 这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。 这种处理方式很流行,能使并发 Web 应用快速响应请求。
除了上述提到 UNPOOLED 下的属性外,还有更多属性用来配置 POOLED 的数据源:
- poolMaximumActiveConnections – 在任意时间可存在的活动(正在使用)连接数量
- poolMaximumIdleConnections – 任意时间可能存在的空闲连接数。
- poolMaximumCheckoutTime – 在被强制返回之前,池中连接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
等等
5、属性(properties)
我们可以通过properties属性来实现引用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。【db.properties】
driver=com.mysql.jdbc.Driver
url=jdbc:mysql:///mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"
username=root
password=a123
<!--configuration核心配置文件-->
<configuration>
<!-- 导入外部文件,properties要按照顺序写 -->
<properties resource="db.properties">
<property name="username" value="root"/>
<property name="password" value="a123456"/>
</properties>
</configuration>
- 可以直接引入外部文件
- 可以在其中配置一些属性配置
- 如果属性配置中和外部文件中的配置重名了,优先使用外部文件的属性配置
6、类型别名(typeAlias)
- 类型别名就是为java类型设置一个短的名字
- 存在的意义是用来减少类完全限定名的冗余
<typeAliases>
<typeAlias type="com.lyz.bean.User" alias="User" />
</typeAliases>
也可以指定一个包名,Mybatis会包名下面搜索需要的JavaBean,以下配置会扫描实体类的包,它的默认别名是这个类的类名,首字母小写
<typeAliases>
<package name="com.lyz.bean"/>
</typeAliases>
还可以使用注解起别名
@Alias("User")
public class User{
private int id;
private String name;
private String pwd;
7、设置(settings)
这是Mybatis中极为重要的调整设置,它会改变Mybatis的运行时行为,以下都是常用的设置
- cacheEnabled:全局的开启和关闭配置文件中的所有映射器以及配置的任何缓存
- lazyLoadingEnable:延迟加载的全局开关
- useGeneratedKeys:允许JDBC支持自动生成主键
- mapUnderscoreToCamelCase:是否开启驼峰命名自动映射,即从经典数据库列名 A_Column映射到经典 Java 属性名 aColumn。
- logImpl:指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
8、映射器(Mapper)
MapperRegister:注册绑定我们的Mapper文件
既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。当我们写完了映射文件后,Mybatis怎么知道去哪里去寻找这些映射文件呢?所以我们需要给Mybatis指定映射文件的路径,告诉它去哪里找
方式一:【推荐使用】
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="com/lyz/dao/UserMapper.xml"/>
</mappers>
方式二:使用class文件绑定注册
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="com.lyz.dao.UserMapper"/>
</mappers>
注意点:
- 接口和它的Mapper配置文件必须同名
- 接口和它的Mapper配置文件必须在同一个包下
方式三:使用扫描包进行注入绑定
<mappers>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<package name="com.lyz.dao"/>
</mappers>
二、生命周期和作用域
生命周期和作用域是至关重要的,因为错误的使用会导致非常严重的并发问题
SqlSessionFactoryBuilder
- 一旦创建了SqlSessionFactory,就不在需要它了
- SqlSessionFactoryBuilder实例的最佳作用域是方法作用域(也就是局部方法变量)
SqlSessionFactory
- 一旦被创建就应该在运行期间一直存在,不要多次重复创建
- SqlSessionFactory的最佳作用域是应用作用域
- 最简单的就是使用单例模式或者静态单例模式
SqlSession
- 连接到数据池的一个请求
- SqlSession的实例不是线程安全的,因此不能被共享,所以它的最佳作用域是是请求或方法作用域
- 用完需要马上关闭,否则资源被占用
这里的每一个Mapper,都是一个具体的业务