第七章 Mybitis的核心配置
7.1 mybitis核心对象
7.11 SqlSessionFactory
SqlSessionFactory:内存镜像,会话工厂,创建Sqlsession的
作为工厂对象,是线程安全的
每个数据库都只会要一个SqlsesionFactory
7.12 SqlSession
mybitis与应用程序交互的单线程的对象,进行持久化操作的,包含了操作数据执行操作的方法,底层封装了 connection,可以当成connection
执行持久化操作
注意要关闭
SqlSession.close()
SqlSession 方法
可以使用工具类创建SqlSession
第一种方法:自己的
public class MybatisUtils {
private static SqlSessionFactory sessionFactory=null;
//初始化SqlSessionFactory
public MybatisUtils() {
// TODO Auto-generated constructor stub
try {
//使用mybatis,提供的Resources类加载Mybitis配置文件
InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
//构建工厂
sessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//提供获取SqlSession对象的静态方法
public static SqlSession getSession() {
new MybatisUtils();
return sessionFactory.openSession();
}
这种方法让我想起来,构造方法必须要在类声明对象时才可以用
第二种:使用静态方法执行.静态方法只要是一加载就可以使用了
public class MybatisUtils {
private static SqlSessionFactory sessionFactory=null;
//初始化SqlSessionFactory
static {
try {
//使用mybatis,提供的Resources类加载Mybitis配置文件
InputStream inputStream= Resources.getResourceAsStream("mybatis-config.xml");
//构建工厂
sessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//提供获取SqlSession对象的静态方法
public static SqlSession getSession() {
return sessionFactory.openSession();
}
}
7.2 配置文件
7.21 主要元素
核心配置文件
1.是根元素
在入门程序中使用了
7.22 Properties 配置属性
eg:数据连接的属性
作用:将内部的配置外在化
1.把xml核心的东西写在外边,方式在外边数据信息更改的时候还要进行变更核心文件,
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=
2.需要在核心文件中加上
<properties resource="db.properties"></properties>
其中比较关键的是${}取内容的问题
.#{}和${}的区别是什么?
a、#{}是预编译处理,${}是字符串替换。
b、Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的 set 方法来赋值;
c、Mybatis 在处理 时 , 就 是 把 {}时,就是把 时,就是把{}替换成变量的值。
d、使用#{}可以有效的防止 SQL 注入,提高系统安全性。
7.23 settings元素
其中
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HKZB7cMw-1615176420618)(…/…/…/AppData/Roaming/Typora/typora-user-images/image-20210308110833324.png)]
cacheEnabled跟lazyLoadingEnabled 都是关闭状态
作用:用于改变MyBatis运行时的行为,二级缓存,延迟加载
mybatis分二级缓存,其中一级缓存是默认开启
一级缓存测试:
不清除缓存时,会只出现一条查询语句,在下边程序显示部分
@Test
public void cacheOneTest() {
SqlSession session=MybatisUtils.getSession();
Customer customer = session.selectOne("com.xiucai.po.CustomerMapper.findCustomerById", 2);
System.out.println(customer);
//第二次查询先查询一级缓存
//使用commit,清除查询结果
session.commit();
customer=session.selectOne("com.xiucai.po.CustomerMapper.findCustomerById", 2);
System.out.println(customer.toString());
session.close();
}
二级缓存:
需要实现序列化接口,就是Customer接口
public void cacheTowTest() {
// TODO Auto-generated method stub
SqlSession session=MybatisUtils.getSession();
Customer customer = session.selectOne("com.xiucai.po.CustomerMapper.findCustomerById", 2);
System.out.println(customer);
session.close();
//第二个会话查询,二级缓存
session=MybatisUtils.getSession();
customer=session.selectOne("com.xiucai.po.CustomerMapper.findCustomerById", 2);
System.out.println(customer.toString());
session.close();
}
7.24 <typeAliases 命别名
<!-- 命别名 -->
<typeAliases>
<typeAlias alias="customer" type="com.xiucai.mapper.Customer"/>
</typeAliases>
在核心文件中编写代码,替换路径复杂的,配置单个别名
配置多个别名:
<typeAliases>
<!-- 配置扫描包的形式 ,别名自动生成类名小写-->
<package name="com.xiucai.mapper"/>
</typeAliases>
7.25 <typeHandler 元素
7.26 objdectFactory
<plugins 配置用户所开发的 插件
7.27 environments元素
可以配置多个数据源,匹配多种数据库
environment是一个数据库
两种事务管理器:JDBC和MANAGED
UNPOLLED 没有池,浪费性能
2.POOLED