ORM框架原理 Mybitis的核心配置 第二课 2021.3.8

第七章 Mybitis的核心配置

7.1 mybitis核心对象

7.11 SqlSessionFactory

SqlSessionFactory:内存镜像,会话工厂,创建Sqlsession的

image-20210308091825592

作为工厂对象,是线程安全的

每个数据库都只会要一个SqlsesionFactory

7.12 SqlSession

mybitis与应用程序交互的单线程的对象,进行持久化操作的,包含了操作数据执行操作的方法,底层封装了 connection,可以当成connection

执行持久化操作

注意要关闭

SqlSession.close()

SqlSession 方法

image-20210308092610754

image-20210308092704702

image-20210308092715172

可以使用工具类创建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.是根元素

image-20210308095912248

image-20210308100114402

在入门程序中使用了

7.22 Properties 配置属性

eg:数据连接的属性

作用:将内部的配置外在化

1.把xml核心的东西写在外边,方式在外边数据信息更改的时候还要进行变更核心文件,

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=

image-20210308103651466

2.需要在核心文件中加上

<properties resource="db.properties"></properties>

image-20210308103815079

其中比较关键的是${}取内容的问题

.#{}和${}的区别是什么?

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分二级缓存,其中一级缓存是默认开启

一级缓存测试:

不清除缓存时,会只出现一条查询语句,在下边程序显示部分

image-20210308105203308

image-20210308105250806

@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接口

image-20210308110426126

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 命别名

image-20210308114159476

<!-- 命别名 -->
<typeAliases>
<typeAlias alias="customer" type="com.xiucai.mapper.Customer"/>
</typeAliases>

在核心文件中编写代码,替换路径复杂的,配置单个别名

配置多个别名:

<typeAliases>
<!-- 配置扫描包的形式 ,别名自动生成类名小写-->
<package name="com.xiucai.mapper"/>
    </typeAliases>

image-20210308115036454

7.25 <typeHandler 元素

image-20210308115638853

7.26 objdectFactory

image-20210308115943109

<plugins 配置用户所开发的 插件

7.27 environments元素

可以配置多个数据源,匹配多种数据库

image-20210308120224784

environment是一个数据库

两种事务管理器:JDBC和MANAGED

image-20210308120316254

image-20210308120444783

UNPOLLED 没有池,浪费性能

image-20210308120426525

2.POOLED

image-20210308120455781

7.28 <mappers

image-20210308120606700

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秀才大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值