《JdbcTemplate实现curd数据库操作》
模板(template)
创建(Create)、更新(Update)、读取(Retrieve)和删除(Delete)操作。
1.spring框架 一站式框架
针对Javaee三层结构,每一层都有相应的解决技术
2.spring对不同的持久化技术 都进行了封装
在dao层使用的JdbcTemplate 是对jdbc的封装
3.JdbcTemplate使用和dbutils的使用很相似,都是对数据库进行curd操作
《添加》《修改》《删除》JDemo1
1.搭建相关开发环境
2.创建对象,设置数据库信息
--别忘了数据库驱动--
3.创建JdbcTemplate对象,设置数据源
4.调用JdbcTemplate对象里边的方法,实现操作
update(String sql,Object...args):int -JdbcTemplate
第一个参数是sql语句,第二个参数是可变参数
《查询》
使用JdbcTemplate实现查询, 需要继承接口 RowMapper,
但JdbcTemplate针对这个借口没有提供实现类,得到不同类型的数据时,需要自己手动进行数据的封装
1.查询表中有多少条数据 返回某一个值(int类型)
queryForObject(String sql,Class<T> requiredType:T-jdbc)
第一个参数是sql语句,第二个参数是 返回类型 包装类的class
2.查询一整条数据(表中的一行,就是一整条数据,) 返回一个对象
queryForObject(String sql,RowMapper<T> rowMapper.Object...args):T
第一个参数是sql语句,第二个参数RowMapper接口 第三个参数是可变参数
特别需要注意的是:queryForObject只能返回一个对象
3.查询多条数据,返回的是对象的list集合
query(String sql,RowMapper<T> rowMapper.Object...args):List<T>
第一个参数是sql语句,第二个参数RowMapper接口 第三个参数是可变参数(可以省略了)
《spring配置c3p0连接池 实现dao层调用jdbcTemplate》
导入jar包–
创建bean1.xml,进行配置
《dao使用JdbcTemplate》
1.1--在xml中配置service和dao对象,
在service类中配置dao对象属性,set方法
在xml中将dao对象注入到service中
1.2--在xml中配置JdbcTemplate对象,
在dao类中配置JdbcTemplate对象属性,set方法
在xml中将JdbcTemplate对象注入到dao中
1.3--在xml中创建c3p0连接池对象
注入四个属性值
将c3p0连接池对象注入到JdbcTemplate对象中
**Spring的事务管理 **
1.事物概念
事物是对数据库操作的最基本单元,是一组操作
事务是一种思想,它就是保证一件事情要么完全做要么完全不做
即 要么都成功; 有一个失败,都失败
2.事物特性
原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做
一致性:数据不会因为事务的执行而遭到破坏
隔离性:一个事物的执行,不受其他事务的干扰,即并发执行的事物之间互不干扰
持久性:一个事物一旦提交,它对数据库的改变就是永久的
3.不考虑隔离性,它会产生读问题
设置隔离级别可以解决
4.spring事务管理的两种方式
第一种:编程式事务管理
通过写代码实现,一般不推荐使用
第二种:声明式事务管理
(1)基于xml配置文件实现
(2)基于注解方式实现*
无论使用哪种实现方式,都要首先配置事务管理器
5.spring事务管理的api介绍
接口:PlatformTransactionManager--事务管理器
实现类:spring针对不同的dao层框架,提供了接口中不同的实现类
《搭建转账环境,进行事务管理》
1.数据库搭建
库:用户--user
表:账户--account
字段:id、username、salary(工资)
2.创建service和dao类,完成注入关系
(1)service层又叫做业务逻辑层
(2)dao层,单纯的数据库操作层
3.bean1.xml文件--
配置各个对象
引入事物的相关约束
注入各个对象属性
4.需求:账户a1 转账 1000给 a2
a1账户少1000
a2账户多1000
这两个操作构成我们的业务逻辑
5.产生的问题
可能在a1少1000后, a2还没有多1000时,
这个过程中出现了一个未能预知的异常、错误
导致数据库中,a1的账户少了1000,但a2还没有加1000
解决方案:
添加事物进行解决--出现异常 进行【回滚--回到初始状态】操作
在service层手动伪造一个java.lang.ArithmeticException 数学运算异常
int i=10/0;
然后进行事物操作
《声明式事务管理–xml》
1.配置文件方式,基于tx/aop
<使用Aspectj的xml配置声明式事物>
第一步:配置事物管理器*
第二步:配置事物增强
第三步:配置切入点、切面
《声明式事务管理–注解》
第一步:配置事物管理器*
第二步:配置事物注解
第三步:使用事物的方法 它所在的类上边
添加上注解 @Transactional 【04.png】