hibernate和JDBC

hibernate是对jdbc的封装与扩展,和hibernate类似的orm框架还有mybatis、Entity EJB、OBJ等等。先介绍jdbc再介绍hibernate,弄清楚这两种数据库访问技术,其他的orm框架就很容易学习了。

       一.jdbc

          jdbc是java为了访问各种数据库而提供的javaAPI,使用jdbc当然需要实现jdbc的jar包,连接mysql、oracle和db2需要各自的jar包,以mysql为例。

         先以一个访问数据库的例子作为开头,下面的代码实现了向数据库插入一条记录的功能。

public class JDBCTest {
private static final String driver = "com.mysql.jdbc.Driver";
private static final String url = "jdbc:mysql://localhost:3306/test";
private static final String name = "root";
private static final String pwd = "root"; 
public static void test1(){
Connection conn = null;
CallableStatement callStmt = null;
PreparedStatement pre = null;

try{
Class.forName(driver);//加载jdbc驱动
conn = DriverManager.getConnection(url,name,pwd);//通过DriverManager获取一个连接
conn.setAutoCommit(false);//设置实务不是自动提交,事务默认是自动提交
pre = conn.prepareStatement("insert into sm_dept values(?,?,?)");
pre.setInt(1, 1);
pre.setString(2, "name");
pre.setString(3, "123242434");
int results = pre.executeUpdate();
System.out.println("插入了"+results+"记录");
}catch(Exception e){
try {
conn.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
}finally{
try {
conn.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
if(callStmt != null){
try {
callStmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static void test2(){
}
public static void main(String[] args) {
JDBCTest.test1();
}
}

几个概念:

1.事务

事务是对数据库执行一次操作的基本单位,事务是不可以再分的。对数据库的增删改差都是一个事务。

事务的4个特性:

  (1).原子性,事务是最基本的单位,不能再分割成几个步骤。

  (2).隔离性,并发执行的各个事务之间不会相互影响。

  (3).一致性,事务只会从一个状态变成另外一个状态,中间不会有其他状态

  (4).持久性,事务一旦提交之后,他对数据库中数据的改变是永久的。

事务的5个隔离级别:

先明白3个概念:

脏读:一个数据读取了另外一个事务没有提交的数据,而另外一个事务是有可能回滚;

不可重复读:一个事务内的两个相同的查询,查出来的数据不一样,这是因为其他事务修改数据提交而导致的;

幻读:事务一对所有行进行了修改,事务二新插入一条数据,由于事务是隔离的,事务二插入的数据是基于事务一发生之前的,所以事务一完成之后会发现还没有被修改的数据

就像发生了幻觉一样;




用Connection的setTransactionIsolation(int level) 方法设置事物的隔离级别。

2.PreparedStatement和Statement的区别

(1).PreparedStatement是预编译的,对于重复执行时效率高,Statement每次执行的时候都需要编译。

(2).PreparedStatement更安全,可以防止sql注入式攻击,注入式攻击就是执行欺骗式的sql语句,达到非法操作数据库的目的。

(3).加入参数的格式不一样,PreparedStatement的可读性更好。

二.Hibernate

hibernate是对jdbc的封装与扩展,hibernate是一个orm框架,开发者通过直接操作对象实现对数据库的操作,实现了对象模型和关系模型之间的映射。

hibernate和jdbc的几点区别:

1.jdbc直接操作底层,效率更高。

2.jdbc不是面向对象编程,hibernate是面向对象的编程,更符合java程序员的思考方式。

3.hibernate封装度更好,大大简化了访问数据库代码的复杂性和重复性。

4.hibernate的缓存机制更强大,有session级别的一级缓存和sessionFactory的二级缓存。


猜你喜欢

转载自blog.csdn.net/qq_14864583/article/details/70939667