一、Hibernate
使用JDBC做数据库相关功能开发会做很多重复性的工作,创建连接,关闭连接,把字段逐一映射到属性中等。Hibernate把这些进行封装起来,使得数据库访问变得轻松简单。
1、创建数据库,数据表
--创建数据库 create database test; --使用数据库 use test; --创建数据表 CREATE TABLE product_table ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(30) , price float , PRIMARY KEY (id) ) DEFAULT CHARSET=UTF8;
2、创建一个java project,然后倒入hibernate所以来的jar包
导入jar包:右键project-->property-->java build path-->libaries-->add external jars
由于hibernate不同版本之间的jar包存在兼容性问题,应该使用对应的版本jar包。
3、创建实体类Bean
实体类用于映射数据库中的表product_table
package com.demo.pojo; public class Product{ private int id; private String name; private float price; //实现属性对应的getter/setter方法 public int getId(){ return id; } public void setId(int id){ this.id=id; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public float getPrice(){ return price; } public void setPrice(float price){ this.price=price; } }
4、配置Product.hbm.xml
这个xml用来映射Product类对应数据库中的product_table表
文件名Product.hbm.xml,P一定要大写,和类名保持一致
<!--表示类Product对应表product_table--> <class name="Product" table="product_table"> <!--表示属性id,映射表字段id--> <id name="id" column="id"> <generator class="native"></generator><!--id的自增方式采用数据库本地方式--> </id>
具体的配置的映射xml文件如下:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.how2java.pojo"> <class name="Product" table="product_"> <id name="id" column="id"> <generator class="native"> </generator> </id> <property name="name" /> <property name="price" /> </class> </hibernate-mapping>
5、配置hibernate.cfg.xml
在src目录下创建hibernate.cfg.xml,用来配置访问数据库要用到的驱动,url,账号密码,数据库方言等
<property name="dialect">org.hibernate.dialect.mysqlDialect</property>
数据库方言含义:因为在代码层面,开发的时候并不会关心底层到底使用Oracle还是用MySQL,写得代码都是一样的。可是Oracle和MySQL所用的sql语句的语法是有写区别,那么这件事就交给hibernate来做了,这时候告诉hibernate底层用到的是什么数据库,它才知道用什么样的方言去对话。
<property name="current_session_context_class">thread</property>
hibernate事务管理方式,也就是说每个线程就是一个事务。
<property name="show_sql">true</property>
表示是否在控制台显示执行的sql语句
<property name="hbm2ddl.auto">update</property>
表示是否会自动更新数据库的表结构,其实不需要创建表,因为hibernate会自动创建表结构,就是因为有这个配置属性。
<mapping resource="com/demo/pojo/Product.hbm.xml" />
表示hibernate会去识别Product这个实体类
6、创建一个测试类TestHibernate
创建一个Product对象,然后通过hibernate把这个对象,插入到数据库中。
hibernate执行的基本步骤是这样的:
6.1、首先获取SessionFactory
6.2、通过SessionFactory获取一个Session
6.3、在Session基础上开启一个事务
6.4、通过调用Session的save方法把对象保存到数据库
6.5、提交事务
6.6、关闭Session
6.7、关闭SessionFactory
package com.demo.test; import org.hibernagte.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import com.demo.pojo.Product; public class TestHibernate{ public static void main(String[] args){ SessionFactory sf=new Configuration.configure().buildSessionFactory();//建立SessionFactory Session s=sf.openSession();//通过SessionFactory获取一个Session并打开 s.beginTransaction();//在Session的基础上打开事务 Product p=new Product();//创建Product对象 p.setName("demo"); p.setPrice(100); s.save(p);//调用Session的save()方法保存对象的数据 s.getTransaction().commit();//提交事务 s.close();//关闭Session sf.close();//关闭SessionFactory } }
基本原理:应用程序通过Hibernate把一个Product对象插入到数据库的product_table中,首先通过配置文件hibernate.cfg.xml提供链接数据库的基本信息,账号,密码,数据库ip,端口等信息,建立数据库连接,然后通过Product.hbm.xml提供的对象与表的映射关系,映射到数据库表中去。