一 配置过程
1. 创建一个项目
2. 导包
required里的包
optional里的c3p0连接池的三个包
数据库驱动包
Junit
3.创建Hibernate的配置文件(hibernate.cfg.xml)
4.创建持久化的实体类对象User
5.创建对象与关系型数据库之间的映射(user.hbm.xml或使用注解)
6.通过Hibernate访问数据库
二 示例
配置文件实现:
1.创建项目hibernate-01
2.导入需要的包
3.创建Hibernate的配置文件(hibernate.cfg.xml)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库连接 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/work</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="current_session_context_class">thread</property> <!-- 连接池Jdbc connection pool C3P0--> <property name="connection.pool_size">1</property> <!-- 方言dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 是否显示sql语句Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- 同步程序与数据库中的表 --> <property name="hbm2ddl.auto">update</property> <!-- 映射文件配置,配置文件名必须包含其相对于根的全路径 --> <mapping resource="com/jn/pojo/user.hbm.xml"/> </session-factory> </hibernate-configuration>
4.创建持久化的实体类对象User
package com.jn.pojo; public class User { private int id; private String name; private int age; 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
5.创建对象与关系型数据库之间的映射(user.hbm.xml)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!-- 配置User类与数据库表user之间的映射关系 --> <class name="com.jn.pojo.User" table="user"> <!-- 主键的配置需要使用id标签 在配置主键时: 实体类中属性名, 实体类中属性的类型 指定主键的创建规则 --> <id name="id" type="int"> <column name="id"></column> <generator class="native"></generator> </id> <!-- 配置普通属性 --> <property name="name" type="java.lang.String"> <column name="name" ></column> </property> <property name="age" type="int"> <column name="age" ></column> </property> </class> </hibernate-mapping>
6.通过Hibernate访问数据库:测试类MainTest.java
package com.jn.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.junit.Test; import com.jn.pojo.User; public class MainTest { @Test public void test(){ //1. 加载配置文件, 创建配置对象 /** * 默认情况下, 如果configure方法调用的是无参的, 则会加载SRC文件夹下的名字为hibernate.cfg.xml的配置文件 * 如果配置文件名不是hibernate.cfg.xml, 那么可以在configure方法中指定配置文件 */ Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); //2. 创建SessionFactory ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); SessionFactory sessionFactory = configuration.buildSessionFactory(sr); //3. 获取Session对象 /** * sessionFactory.getCurrentSession(), 获取当前线程的Session对象 */ Session session = sessionFactory.openSession(); //4. 操作数据库 // 开启事务 session.beginTransaction(); // 创建实体类对象 User user = new User(); user.setName("my"); user.setAge(23); // 将实体类对象保存到数据库中 /** * save方法会将实体类对象, 保存到数据库的中表中. * 在这个过程中, 代码中不需要写SQL语句, 它的insert语句是由Hibernate根据ORM的关系映射自动创建了 */ session.save(user); // 提交事务 session.getTransaction().commit(); //5. 关闭对象 session.close(); sessionFactory.close(); } }
7.项目结构:
注解实现:
1.创建项目hibernate-02
2.导入需要的包
3.创建Hibernate的配置文件(hibernate.cfg.xml)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- 数据库连接 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/work</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="current_session_context_class">thread</property> <!-- 连接池Jdbc connection pool C3P0--> <property name="connection.pool_size">1</property> <!-- 方言dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 是否显示sql语句Echo all executed SQL to stdout --> <property name="show_sql">true</property> <property name="format_sql">true</property> <!-- 同步程序与数据库中的表 --> <property name="hbm2ddl.auto">update</property> <!-- 映射文件配置,配置文件名必须包含其相对于根的全路径 --> <mapping class="com.jn.pojo.User"/> </session-factory> </hibernate-configuration>
4.创建持久化的实体类对象User
package com.jn.pojo; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="user") public class User { private int id; private String name; private int age; @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } @Column(nullable=true) public String getName() { return name; } public void setName(String name) { this.name = name; } @Column(nullable=true) public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
5.创建对象与关系型数据库之间的映射(User中注解实现)
6.通过Hibernate访问数据库:测试类MainTest.java
package com.jn.test; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.junit.Test; import com.jn.pojo.User; public class MainTest { @Test public void test(){ //1. 加载配置文件, 创建配置对象 /** * 默认情况下, 如果configure方法调用的是无参的, 则会加载SRC文件夹下的名字为hibernate.cfg.xml的配置文件 * 如果配置文件名不是hibernate.cfg.xml, 那么可以在configure方法中指定配置文件 */ Configuration configuration = new Configuration().configure("hibernate.cfg.xml"); //2. 创建SessionFactory ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); SessionFactory sessionFactory = configuration.buildSessionFactory(sr); //3. 获取Session对象 /** * sessionFactory.getCurrentSession(), 获取当前线程的Session对象 */ Session session = sessionFactory.openSession(); //4. 操作数据库 // 开启事务 session.beginTransaction(); User user = (User) session.get(User.class, 1); //获取id为1的user System.out.println(user); user.setAge(21); System.out.println(user); // 提交事务 session.getTransaction().commit(); //5. 关闭对象 session.close(); sessionFactory.close(); } }
7.项目结构:
三 Hibernate开发步骤—API应用步骤
l 创建hibernate配置,读取Hibernate配置文件及信息
l 用读取的配置信息生成SessionFactory对象
l 从SessionFactory对象获取 一个Session对象
l 用Session对象生成事务
l 通过Session对象的方法进行操作
l 提交或回滚事务
l 释放session and session factory资源
四 hibernate的优点
(1)首先是开源和免费的License,方便功能定制,需要时可以查看源码或者修改源码。
(2)其次它是一个轻量级封装框架,避免引入过多复杂代码,减轻程序员调试负担。
(3)再次它是一个有可扩展性、API开放的框架,可以在功能不够用时进行其功能的扩展。
(4)最后就是Hibernate的程序开发使用者众多,促使产品有稳定的发展保证。