1.Hibernate是什么
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。
也就是说是处理和数据库相关一个框架,它建立数据库与类之间的映射关系,当类中对象发生改变的时候,数据库会有随动的改变
2.使用Hibernate之前的准备工作
2.1下载资源,并做使用之前的相关部署
将下载后的压缩包解压
其中框出的required包是使用Hibernate所必须导入的jar包,optional是可选的依赖包,其中关键包的作用网上可以找到很多资源这里不多赘述
将这些必要的包和相应的数据库连接需要的包导入到工程目录下
2.2准备工作,创建相应的类和数据库表格
注意这里类中成员变量的属性和数据库表格中的属性要一致,eg:数据库中名字是varchar类型,则在类中对应的属性应该为String.
如果是一对一的关系,尽可能将表格中参数名和类中的成员变量名字一一对应,以免混淆,记错
2.3配置XML文件,构建类和表之间的映射关系
注意:创建文件的位置,在创建的类的那个包下创建此文件,理论上文件名没有硬性要求,但是一般都创建为:类名+hbm.xml
创建好文件后需要添加约束,约束相关可以参考我们导入的包中D:\Program Files\hibernate-release-5.0.7\hibernate-release-5.0.7.Final\lib\required\hibernate-core-5.0.7.Final.jar!\org\hibernate\hibernate-mapping-3.0.dtd文件,导入约束后开始配置映射
首先是类与表之间的映射 ,class name =类的全路径,这一点IDEA中会有非常充分的提示,表就直接写表名就好;
接下来是主键映射id,主键映射必须要放在property的前面,也可以为它指定类型Type,我这边数据库中是BIGINT,对应的是Long类型,其中generator中的native提供主键生成策略为本地,也就是说,数据库对应的是支持自增的数据库(Mysql等)选择identity,数据库选用的序列管理的方式(Oracle等)那么主键策略采用squence
接下来是property的一一对应
2.4创建Hibernate的核心配置文件
注意:创建的位置是在src文件下,创建的名字为hibernate.cfg.xml,这个命名可以修改,但是源码中默认程序加载配置文件是这个名字,不推荐做修改
同样需要添加约束
添加约束的参考文件地址:D:\Program Files\hibernate-release-5.0.7\hibernate-release-5.0.7.Final\lib\required\hibernate-core-5.0.7.Final.jar!\org\hibernate\hibernate-configuration-3.0.dtd
这里我在可选配置中使用显示sql语句的配置时候报错,但是将配置方言的代码移至可选配置代码的后面就不报错了.同样编辑器使用的是IDEA
这里配置的是MySQL的数据库,相应的案例在解压安装包后的文件路径下都有
3.使用Hibernate
这里分开来看:
首先第一步是加载核心配置文件,我们可以看Configuration的源码,找到它下面的configure方法,返回的名字是hibernate.cfg.xml,是之前编辑核心配置文件的名字
第二步是获得SessionFactory对象,这个对象可以类似理解为数据库连接池对象,是一个重量级的对象,创建会比较消耗资源和时间,通常我们会把步骤1和步骤2合并起来放在一个工具类中,利用单例模式封装,这样使用的时候避免重复创建很多的SessionFactory对象,影响效率:
public class HibernateUtils {
public static final Configuration cfg;
public static final SessionFactory sf;
static {
cfg=new Configuration().configure();
sf = cfg.buildSessionFactory();
}
public static Session openSession(){
return sf.openSession();
}
}
第三步是获得session对象,手动开启事务获得Transaction对象,然后输入指令代码后需要提交事务和关闭资源:
Session session = factory.openSession();
//手动开启事务ctrl+alt+v可以自动捕捉返回值类型
Transaction transaction = session.beginTransaction();
//代码区域
//常规步骤,提交事务,关闭session对象
transaction.commit();
session.close();
最后是需要执行对数据库操作的区域,需要创建对象,或者查找出对象,在对对象的操作之后通过session的方法对数据库做增删改查
4.简单的增删改查代码:
void test02(){
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
//常用的增加的操作
/*Customer customer = new Customer();
customer.setCust_name("莫栽哉");
customer.setCust_industry("1307");
session.save(customer);*/
//常用的查询操作
/*Customer customer = new Customer();
Customer cus = session.get(Customer.class, 1l);
System.out.println(cus.getCust_name());*/
//常见的删除操作
/*Customer cus = session.get(Customer.class, 1l);
session.delete("s",cus);//这里的s不知道有什么鬼用*/
//常见的改操作
/*Customer cus = session.get(Customer.class, 3l);
cus.setCust_name("莫大仔");*/
//常见的查询所有的操作:
Query query = session.createQuery("from com.myHibernate.Customer");
List<Customer> list = query.list();
for (Customer c:list
) {
System.out.println(c.toString());
}
transaction.commit();
session.close();
}