一、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
}
}