Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将 POJO(java对象)与数据库表
建立映射关系
,是一个全自动的
ORM
框架,hibernate可以自动生成SQL语句,自动执行
,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库
ORM:对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的术。
对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 这也同时暗示着额外的执行开销;然而,如果ORM作为一种中间件实现,则会有很多机会做优化,而这些在手写的持久层并不存在。 更重要的是用于控制转换的元数据需要提供和管理;但是同样,这些花费要比维护手写的方案要少;而且就算是遵守ODMG(ODMG是支持以对象形式对数据建模的数据库管理系统(DBMS))规范的对象数据库依然需要类级别的元数据。
对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的。面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统。对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据无法直接表达多对多关联和继承关系。因此,对象-关系映射(ORM)系统一般以中间件的形式存在,主要实现程序对象到关系数据库数据的映射。
数据持久化: 将内存中的对象转换到数据库中(硬盘中)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
配置参考:http://www.blogjava.net/yxhxj2006/archive/2012/06/30/381861.html
1.配置使用hibernate 添加hibernate的jar包
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<!-- 同时添加数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.5.Final</version>
</dependency>
<!-- 同时添加数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
2.下面配置xml文件
可以参考:http://www.cnblogs.com/pepcod/archive/2013/02/19/2917376.html
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/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://localhost:3306/数据库名</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="Connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf8</property>
<!-- 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 控制台能够输出SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 帮你生成对应的表,或者是表的更新 -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
可以参考:http://www.cnblogs.com/pepcod/archive/2013/02/19/2917376.html
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/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://localhost:3306/数据库名</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">root</property>
<property name="Connection.useUnicode">true</property>
<property name="connection.characterEncoding">utf8</property>
<!-- 方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- 控制台能够输出SQL语句 -->
<property name="hibernate.show_sql">true</property>
<!-- 帮你生成对应的表,或者是表的更新 -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
3. 建立对应实体对象并且对实体进行XML文件配置建立学生类Student 创建 Student.hbm.xml 一个类对应的一个xml文件
可以参考:http://pmroad.blog.51cto.com/9744929/1591245
<?xml version="1.0" encoding="UTF-8"?>
<!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.model">
<class name="Student" table="tt_student">
<id name="id" column="sid">
<!-- 主键策略的配置 -->
<generator class="native"></generator>
</id>
<property name="sname"></property>
</class>
</hibernate-mapping>
4.将映射文件加入到sessionfactory配置中
<mapping resource="com/model/Student.hbm.xml" />
<mapping resource="com/model/Student.hbm.xml" />
5.使用hibernate 一些接口 将数据持久化 (1.读取配置文件 2.创建SessionFactory 3.创建session 4. 在session当中做CRUD的操作)
//读取配置文件,创建sessionFactory工厂
public class Test {
public static void main(String[] args) {
//读取配置文件,创建sessionFactory工厂
Configuration config = (Configuration) new Configuration().configure();
//config.buildSessionFactory() 可以使用,但不建议
//读取配置文件,创建sessionFactory工厂
public class Test {
public static void main(String[] args) {
//读取配置文件,创建sessionFactory工厂
Configuration config = (Configuration) new Configuration().configure();
//config.buildSessionFactory() 可以使用,但不建议
// 注册服务
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//创建工厂
SessionFactory sf = config.buildSessionFactory(sr);
//创建session
Session session = sf.openSession();
//在session 中做crud的操作 数据进行持久画
//通过session 开启事务
session.beginTransaction();
//-----------------CRUD操作
Student s= new Student();
s.setSname("wwj");
session.save(s);
//-----------------CRUD操作
//事务的提交
session.getTransaction().commit();
//关闭session
session.close();
//关闭工厂
sf.close();
}
}
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
//创建工厂
SessionFactory sf = config.buildSessionFactory(sr);
//创建session
Session session = sf.openSession();
//在session 中做crud的操作 数据进行持久画
//通过session 开启事务
session.beginTransaction();
//-----------------CRUD操作
Student s= new Student();
s.setSname("wwj");
session.save(s);
//-----------------CRUD操作
//事务的提交
session.getTransaction().commit();
//关闭session
session.close();
//关闭工厂
sf.close();
}
}
6. 测试
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
简单做一下注解的方式
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
简单做一下注解的方式
可以参考:http://blog.sina.com.cn/s/blog_9bbe4e610101mgtd.html
1.
@Entity
@Table(name="t_teacher")
public class Teacher {
private int tid;
private String tname;
//一定是在get方法上面,可以在属性上,但不推荐
@Id //表示主键
@GeneratedValue(generator="ss_native")//自增长
@GenericGenerator(name="ss_native",strategy="native")//
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
@Entity
@Table(name="t_teacher")
public class Teacher {
private int tid;
private String tname;
//一定是在get方法上面,可以在属性上,但不推荐
@Id //表示主键
@GeneratedValue(generator="ss_native")//自增长
@GenericGenerator(name="ss_native",strategy="native")//
public int getTid() {
return tid;
}
public void setTid(int tid) {
this.tid = tid;
}
//列明
@Column(name="t_name")
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
注意:对于属性的注解 一定是在get方法上面
2.配置注解的类到config配置文件中
<mapping class="com.model.Teacher"/>
@Column(name="t_name")
public String getTname() {
return tname;
}
public void setTname(String tname) {
this.tname = tname;
}
}
注意:对于属性的注解 一定是在get方法上面
2.配置注解的类到config配置文件中
<mapping class="com.model.Teacher"/>