1:加入Hibernate的jar包和数据库的驱动包
2:创建Hiberante的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!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="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.url">jdbc:sqlserver://localhost:1433;DatabaseName=hibernate</property> <property name="connection.username">zhangsan</property> <property name="connection.password">123456</property> <!--配置数据库的方言 --> <property name="dialect">org.hibernate.dialect.SQLServerDialect</property> <!--是否显示SQL语句 --> <property name="show_sql">true</property> <!--是否格式化SQL语句 --> <property name="format_sql">true</property> <!--数据库中表的创建方法 --> <property name="hbm2ddl.auto">update</property> </session-factory> </hibernate-configuration>
3,创建持久化类:
package org.wangyi.com; import java.util.Date; /** * * @author wangyi *@version 1.0 */ public class News { private Integer id;//消息id private String title;//消息标题 private String auth;//消息作者 private Date date;//消息日期 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuth() { return auth; } public void setAuth(String auth) { this.auth = auth; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } }
创建持久化类时,注意一下的几点:
实现一个默认的(即无参数的)构造方法(constructor)
提供一个标识属性(identifier property)
News有一个属性叫做id
。这个属性映射数据库表的主 键字段。
这个属性可以叫任何名字,其类型可以是任何的原始类型、原始类型的包装类型、java.lang.String
或者是java.util.Date
。 (
如果你的遗留数据库表有联合主键,你甚至可以用一个用户自定义的类,该类拥有这些类型 的属性。
使用非final的类
代理(proxies)是Hibernate的一个重要的功能,它依赖的条件是,持久 化类或者是非final的,或者是实现了一个所有方法都声明为public的接口。
你可以用Hibernate持久化一个没有实现任何接口的final
类,但是你 不能使用代理来延迟关联加载,这会限制你进行性能优化的选择。
你也应该避免在非final类中声明 public final
的方法。如果你想使用一 个有public final
方法的类,你必须通过设置lazy="false"
来明确地禁用代理
为持久化字段声明访问器(accessors)和是否可变的标志(mutators)
News为它的所有持久化字段声明了访问方法。很多其他ORM工具直接对 实例变量进行持久化。我们相信,在关系数据库schema和类的内部数据结构之间引入间接层(原文为"非直接",indirection)会好一些。默认情况下Hibernate持久化JavaBeans风格的属性
4: 创建对象-关系映射文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Generated 2017-2-20 10:14:10 by Hibernate Tools 3.4.0.CR1 --> <!--package : 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。 --> <hibernate-mapping package="org.wangyi.com"> <!-- name : 持久化类的Java全限定名。 table : 对应的数据库表名。 --> <class name="News" table="NEWS"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <!--generator元素表明了数据库中的主键生成方法 --> <generator class="native" /> </id> <!-- property元素为类定义了一个持久化的的属性 name: 属性的名字,以小写字母开头。 column : 对应的数据库字段名。 type : 一个Hibernate类型的名字。 --> <property name="title" type="java.lang.String"> <column name="TITLE" /> </property> <property name="auth" type="java.lang.String"> <column name="AUTH" /> </property> <property name="date" type="java.util.Date"> <column name="DATE" /> </property> </class> </hibernate-mapping>
5:在hibernte.cfg.xml配置文件中加载映射文件
6:通过Hibernate API编写访问数据库的代码:
package org.wangyi.com; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class Test { public static void main(String[] args) { // 加载配置文件 Configuration configuration = new Configuration()// .configure();// 加载类路径下默认的hibernate.cfg.xml文件 // 注册服务(hibernate 4.x 后中加入的API) ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()// .applySettings(configuration.getProperties())// .buildServiceRegistry();// // hibernate 3.x 以前的方法 // SessionFactory factory = configuration.buildSessionFactory(); // 创建session会话的工厂 SessionFactory factory = configuration .buildSessionFactory(serviceRegistry); // 创建session Session session = factory.openSession(); // 开启事务 session.beginTransaction(); // 执行数据库的操作 News news = new News(); news.setAuth("AA"); news.setDate(new Date()); news.setTitle("aa"); session.save(news); // 提交事务 session.getTransaction().commit(); // 关闭会话,释放资源 session.close(); } }
结果: