今天开始我们开始介绍框架 ,第一个Java框架就是Hibernate
Hibernate是什么
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。 – 百度百科
为什么要学习Hibernate
传统的jdbc开发 或者使用dao等开发应用时,大型系统的开发会十分吃力,在大数据的插入时,sql语句很长且容易出错等等。hibernate框架是ORM的,ORM是利用描述对象和数据库表之间映射的元数据,自动把java程序的对象持久化到关系型数据库的表中,通过操作java对象,就可以完成对数据库表的操作。
Hibernate的优势
- Hibernate对jdbc访问数据库的代码做了轻量级的封装,大大的简化了数据访问层繁琐的重复性代码,并且减少了内存消耗,加快了运行效率。
- 简化了DAO层的编程工作
- Hibernate的性能非常好,映射的灵活性很出色,它支持很多关系型数据库。
- 可扩展性强。
下载Hibernate5
下载Hibernate5 速度特别慢
- documentation :Hibernate开发的文档
- lib :Hibernate开发包
- required :Hibernate开发的必须的依赖包
- optional :Hibernate开发的可选的jar包
- project :Hibernate提供的项目
简单使用
我们先需要导入核心包 和数据库包
然后再新建一个持续化类
- 建立一个拥有和数据库表中的各个属性对应的成员变量的类
- 这些属性通过get和set来访问
例如:
public class Student{
private Long Stu_id;
private String Stu_name;
private String Stu_class;
public Long getStu_id(){
return Stu_id;
}
....
}
之后我们需要创建映射文件
在位于Student持久化类所在的包中,创建一个名字为Student.hbm.xml的映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-mapping>
<!-- 这是建立一个持续化类和数据库表的映射关系-->
<!--
class 标签:用来建立类和表的映射
name属性: 类中的全路径
table属性:表名
catalog属性: 数据库名
-->
<class name="...." table="...." catalog="....">
<!-- 建立类中的属性和表中的普通属性的映射 -->
<!--
property 标签:建立类的成员变量和表的属性对应
name属性:类的成员变量
column属性:表中的属性||如果类和表一样可省略column属性
length属性:字段长 ,不给就默认(默认比较大)
type属性:类型 -->
<id name="..." column="...">
<!--主键生成策略 -->
<generator class="native"/>
</id>
<!-- 建立类中的属性和表中的主键的映射 -->
<!--
id 标签:建立类的成员变量和表的属性对应
name属性:类的成员变量
column属性:表中的属性||如果类和表一样可省略column属性
length属性:字段长 ,不给就默认(默认比较大)
type属性:类型 -->
<property name="..." column="..."/>
...
</class>
</hibernate-mappping>
最后我们创建配置文件
位于src下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- 连接数据库的基本参数 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<!-- 配置Hibernate的方言 -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 可选配置================ -->
<!-- 打印SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL -->
<property name="hibernate.format_sql">true</property>
<!-- 自动创建表 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置C3P0连接池 -->
<property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property>
<mapping resource=""/>
</session-factory>
</hibernate-configuration>
接下来我们就可以编写程序crud操作
例如
public void funtion(){
// 1. 加载配置文件
Configuration cfg = new Configuration().configure();
//2.创建一个SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
//3.创建session对象 -- connection
Session session = sessionFactory.openSession();
//4.开启事务
Transaction tx = session.beginTransaction();
//5.做事
//6 事务提交
tx.commit();
//7.释放资源
session.close();
}