三、Mybatis是支持不同sql查询,存储过程和高级映射的优秀持久层框架
出错 1代码 2数据库
若没加事物管理,则代码或数据库中出错就可能导致事物出错或事物没有执行。加上事物管理,
第一步;通过setAutoCommit(false)取消自动提交
第二步;在catch方法中将事物回滚,若有出错的事物则取消所有的操作,避免代码出错导致数据混乱。若无出错的事物则最好
第三步;在try中最后通过从commit()手动提交事物
2:一致性:张三给李四100¥,张三-100,李四+100这是两个操作,放在这里讲就必须在一个事物内。
3:隔离性:对数据进行修改的所有并发事物不能同时进行,只能一个一个来
一、JDBC常用的API深入详解及存储过程的调用
二、JDBC的事务管理
三、数据库连接池,将连接单另出来,使开发人员只需要关注业务逻辑
dbcp 。2.c3p0
四、JDBC的替代产品
hibernate 2.mybatis
五.总结
MyBatis:支持普通SQL查询,存储过程和高级映射的优秀持久层框架。
特点:
1:易于上手和掌握。
2:SQL卸载XML里,便于统一管理和优化。
3:解除SQL与程序代码的耦合。
4:提供映射标签,支持对象与数据库的orm字段关系映射。
5:提供对象关系映射标签,支持对象关系组建维护。
6:提供XML标签,支持编写动态SQL。
Hibernate:一种Java语言下的对象关系映射解决方案。它是一种自由,开源的软件。
优点:
1:轻量级的ORM框架
2:对JDBC进行了很好的封装,使用了ORM做了映射,那么就可以通过面向对象的方式很容易的操作数据库了。
3:它还提供了缓存机制,可以提高效率。
缺点:
如果对大量的数据进行频繁的操作,性能效率比较低,不如直接使用JDBC
核心接口:
Session接口:Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。)。
SessionFactory接口:SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。
Configuration接口:Configuration接口负责配置并启动Hibernate,创建SessionFactory对象。
Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事物处理代码。
Query和Criteria接口:Query和Criteria接口负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。
配置文件示例:
操作示例:
1- Commons-dbutils
Apache组织提供的一个开源的JDBC工具类库,对传统操作数据库的类进行二次封装,可以把结果集转化成List。
特点:
1.杜绝资源泄露。(修正JDBC代码并不困难,但是这通常导致连接泄露并且难以跟踪到。)
2.清晰干净的持久化代码(大段的持久化数据到数据库代码彻底精简,剩下的代码清晰表达了编码意图。)
3.从ResultSet里自动组装JavaBean(不需要手工从ResultSet里set值到JavaBean中,每一行数据都将会以一个Bean实例的形式出现。)
核心接口:
1DbUtils:提供如关闭连接,装载驱动程序等常规工具类;
2.QueryRunner:该类简化了SQL查询,它常与ResultSetHandler组合一起使用
3.ResultSetHandler:执行处理一个java.sql.ResultSet,将数据转变并处理为任何一种形式,这样有益于其应用而且使用起来更容易。
DbUtils.loadDriver(driverClassName) 加载驱动类
示例: 修改、插入数据
示例: 查询数据
dbcp连接池和c3p0连接池对比
1、 导入相关jar包
c3p0-0.9.2-pre4.jar
mchange-commons-java-0.2.2.jar
2、在项目根目录下添加配置文件
c3p0.properties
获取dbcp连接方式
1、通过获取配置文件参数,调用工厂方法获取DataSource
2、手动使用参数获取DataSource
3、从DataSource中调用getConnection()获取连接
JDBC连接池
背景:
1、数据库连接是一种重要的资源
2、频繁的连接数据库会增加数据库的压力
3、为解决以上问题出现连接池技术
dbcp
1、导入相关dbcp的jar包
commons-dpcp2-2.1.1.jar
commons-pool2-2.4.2.jar
commons-logging-1.2.jar
2、在项目根目录下添加配置文件dbcp.properties
1、调用Connection的setAutoCommit(false)关闭自动提交
2、使用try 将一系列数据库操作放到一起,最后使用commit()提交事务
3、在catch里对异常处理,调用rollback()进行事务回滚
JDBC对事物管理的支持
1、我们通过提交commit()或是回退rollback()来管理事务的操作
2、事务操作默认是自动提交
3、可以通过调用setAutoCommit(false)来禁止自动提交
事务的概念
事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作。
这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行。
事务的特点
1、原子性
事务是一个完整的操作。
2、一致性
当事务完成时,数据必须处于一致状态。
3、隔离性
对数据进行修改的所有并发事务是彼此隔离的。
4、永久性
事务完成后,它对数据库的修改被永久保持。
在数据库中创建带输出参数的存储过程,将输出参数INTO到OUT参数里
调用registerOutParameter(index ,Type)方法注册返回参数,对应括号内占位符?的位置,声明参数类型为int
JDBC存储过程调用带输入参数的存储过程
在数据库中创建带参数存储过程
JDBC存储过程调用带输入参数的存储过程
JDBC调用时需要在sql语句中填入?占位符,再调用set方法传递参数
JDBC调用无参存储过程
在数据库中创建无参存储过程
dbcp配置
使用dbcp
c3p0连接方法
dbcp的使用方法
阿里规范要求数据库连接必须使用连接池技术
常用的数据库连接池:dbcp与c3p0
和JDBC相比,似乎不需要写Dao类和DbUtil
4-4 小结
4-1连接池--bdcp.properties
jdbc封装的Java的常用数据类型
hibernate对数据库操作的代码,不用写sql都封装好了
调用从c3p0连接池工具类获取链接