重新认识Mybatis第四天

一. mybatis中的连接池以及事务控制
1.mybatis中连接池使用及分析
1.1连接池:它就时用于储存链接的一个容器,而容器呢就是一个集合对象,该集合必须是线程安全的,不能存在两个线程同时拿到同一个链接。 而且该集合必须实现队列的特性:先进先出
我们在实际开发中都会使用连接池
因为它可以减少我们获取链接所消耗的时间。
1.2Mybatis中的连接池
mybatis连接池本身给我们提供了三种方式的配置
配置的位置:
主配置文件SqlMapConfig.xml中的DataSource标签,Type属性就是表示采用何种连接池方式
Type属性的取值
POOLED :采用传统的javax.sql.DataSource规范中的连接池,mybatis中与真的规范的实现
UNPOOLED 采用传统的获取链接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用连接池的思想
JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的DataSource是不一样的
注意:如果不是web或者maven的war工程是不能使用的
2.mybatis中的事务
什么是事务
通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。 事务必须服从ISO/IEC所制定的ACID原则。

		事务的四大特性
		原子性(atomicity)
		一致性(consistency)	
		隔离性(isolation)
		持久性(durability)

原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
  一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
  隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
  持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
不考虑隔离性会产生的问题
四种隔离级别

		读未提交:事务未提交的数据可以读。什么问题都解决不了
		读已提交:读取已经提交了的数据,可以防脏读,不能防不可重复读和幻读。
		可重复读:读一个数据时,上锁。期间不让其他事务做删除修改操作
		串行化:直到一个事务的所有子事务全部结束才可以执行下一个事务。

二. mybatis基于XML配置的动态sql语句使用
1.mappers配置文件中的几个标签

单独使用if标签 需要在sql语句结尾加上where 1=1 的条件 确保下方sql能正确拼接
在这里插入图片描述

<if test="userName!=null">
	and  userName = ${userName}
</if>
		<where>
		如果使用where条件的话则不用去加where1=1where标签会自己拼接
		![在这里插入图片描述](https://img-blog.csdnimg.cn/2020071211511847.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjQ2NTYx,size_16,color_FFFFFF,t_70)
		<foreach>
		foreach标签用于遍历集合 标签内部的属性都有
			collection 代表要遍历的集合元素 需要注意的一点是编写时不能写#{}
			open  		代表语句的开始部分
			close		代表结束部分
			item			代表遍历集合的每个元素生成的变量名
			sperator	代表使用什么分割符
<where>
	<if	test=" ids!=null and ids.size()>0">
		<foreach	collection="ids" open=" and id in (" close=")" item="ids" sperator=",">
			#{id}
		</foreach>
	</if>
</where>
		<sql>
			sql标签就是抽取sql语句的片段 以减少重复的sql语句 使sql语句更加简洁
	<sql id ="ids" >
		select * from user
	</sql>
	<select id="findAll" rerultType="user" parameterType="Integer">
		<include refid="ids"></include>
	</select>

三. mybatis中的多表操作
1.一对多
用户和订单就是一对多
一个用户可以有多个订单号
一对多关系映射中 主表应该包含从表实体的集合引用
使用标签collection 属性property 集合的名称 以及ofType 集合中元素的类型 或者全线顶类名 配置集合的映射
在这里插入图片描述
2.多对一
订单和用户就是多对一
多个订单同属一个人
3.一对一
人和身份证号就是一对一
一个人只能有一个身份证号、、
一个身份证号只能属于一个人
一对一中可以采用resultMap中的
association标签 配置需要封装的包 以及javaType用于提示封装到哪个对象
在这里插入图片描述
4.多对多
示例: 用户和角色
用户可以有多个角色
角色同时也可以赋予多个用户
让用户和角色表具有多对多的关系需要使用中间表,中间表中包含各自的主键 在中间表中是外键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值