其实进度已经到了Spring了,但是对学习过的东西还是感觉模模糊糊,总感觉什么都没有进脑子。还差的好多,面试要问,毕设要用,不懂的还有山那么高!继续总结
简单总结一下自己了解的生命周期
首先呢,当我们在使用mybatis时会使用一个SqlSessionFactoryBuilder,用这个去创建SqlSessionFactory实例,当创建完成实例就不再需要它了,所以说它的作用域很小,最佳作用域是方法作用域(局部变量),最好用完就释放(毕竟会占用资源的好伐)
上面创建了SqlSessionFactory实例,它一旦被创建,在整个运行期间就会一直存在,所以最佳作用域是应用作用域,默认单例模式。它可以创建好多个SqlSession实例,所以可以想象为一个连接池
SqlSession可以想象成一个到连接池的请求,每个线程都有其自己的SqlSession实例,它不是线程安全的,不能共享,用完就要抓紧时间关闭,否则资源被占用。它的最佳作用域是请求或方法作用域,不能将实例引用放在一个类的静态域。每次收到HTTP请求就可以打开一个SqlSession,返回响应即关闭。
配置解析
主要就是mybatis-config.xml这个核心配置文件中的配置,mybatis配置文件包含了会严重影响mybatis行为的设置和属性。主要有以下属性:
configuration | 配置 |
---|---|
properties | 属性 |
setting | 设置 |
typeAliases | 类型别名 |
typeHandlers | 类型处理器 |
objectFactory | 对象工厂 |
plugins | 插件 |
environments | 环境配置 |
environment | 环境变量 |
transactionManager | 事务管理器 |
dataSource | 数据源 |
mappers | 映射器 |
以上不是全部的配置内容,需要看全部内容可以移步mybatis官方文档
properties
可以通过properties属性来实现引用配置文件。数据库链接的属性都是可外部配置且可动态替换的,既可以在典型的java属性文件(db.properties)中配置,也可以通过properties元素的子元素来传递
driver= com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=123456
<properties resource="db.properties"/>
<properties >
<property name="username" value="root"></property>
<property name="pwd" value="123456"></property>
</properties>
setting
这里有很多可以配置的属性,我只记住几种,想要了解更多请移步官方文档
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 |
---|---|
cacheEnabled | 全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。 |
就简单说一下logImpl这个属性,它可以设置日志的类型,具体实现看代码
<settings>
<!--注意空格问题,双引号内不允许出现空格,大小写都不能错 一个字符都不能错-->
<!--标准日志工厂实现-->
<!--<setting name="logImpl" value="STDOUT_LOGGING"/>-->
<setting name="logImpl" value="LOG4J"/>
</settings>
注释掉的是另一种日志
typeAliass
为java类型设置一个短的名字,意义在于减少类完全限定名的冗余
方法一
<typeAliases>
<typeAlias type="com.yu.pojo.User" alias="User"/>
</typeAliases>
方法二
指定一个包名,Mybatis会在包名下搜索需要的javabean,就是扫描实体类的包,他的默认别名就是这个类的类名首单词小写,比如以下代码别名就是user,但是可以使用注解定义别名(在实体类最前面增加注解)
<typeAliases>
<typeAlias name="com.yu.pojo"/>
</typeAliases>
实体类比较少的时候建议使用第一种,如果实体类十分多,建议使用第二种
区别:第一种可以自定义别名,第二种不行,如果一定要改,则需要在实体类增加注解
environments
环境配置,内部可以配置多套环境,default是默认环境,尽管可以配置多个环境,但是每个SqlSessionFactory实例只能选择一种环境。当存在多套环境时,可以更改默认环境(通过default指定)来使用某一套环境
每套环境里有transactionManager(事务管理器),dataSource(数据源,必须要有)等。
<!--environments:环境,内部可以配置多套环境,default是默认环境 -->
<environments default="development">
<environment id="development">
<!--事务管理:默认使用jdbc的事务管理-->
<transactionManager type="JDBC"/>
<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>
<environment id=" ">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments>
mappers
映射器,定义映射sql语句文件,需要告诉 MyBatis 到哪里去找到这些语句。Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。映射器是MyBatis中最核心的组件之一,在MyBatis 3之前,只支持xml映射器,即:所有的SQL语句都必须在xml文件中配置。而从MyBatis 3开始,还支持接口映射器,这种映射器方式允许以Java代码的方式注解定义SQL语句
下面举例两种方法
<mappers>
<mapper resource="com/yu/dao/EmpMapper.xml"/>
</mappers>
<mappers>
<mapper class="com.yu.dao.EmpMapper"/>
</mappers>
下面介绍以下mapper.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yu.mapper.UserMapper">
</mapper>
这是mapper配置文件的内容(没有添加sql语句等)
namespace命名规则 : 包名+类名,namespace的命名必须跟某个接口同名,这样绑定dao接口,接口中的方法与映射文件中sql语句id要一一对应,namespace和子元素的id联合保证唯一 , 区别不同的mapper
写在最后的话,由于自己也是初学者,有很多地方也不是很明白,如果阅读发现有些话有歧义或者表述不清,还请指正并寻找官方文档或名师指导,本博文仅作自己学习记录与分享