Hibernate是一种Java语言下的对象关系映射解决方案。 它是使用GNU宽通用公共许可证发行的自由、开源的软件。它为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java开发中最为流行的数据库持久层框架,现已归JBOSS所有。
它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。无论是从设计草案还是从一个遗留数据库开始,开发人员都可以采用Hibernate。
Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。
package lee; public class News { //消息类的标识属性 private Integer id; //消息标题 private String title; //消息内容 private String content; //无参数的构造器 public News() { } //初始化全部属性的构造器 public News(Integer id , String title , String content) { this.id = id; this.title = title; this.content = content; } //id属性的setter和getter方法 public void setId(Integer id) { this.id = id; } public Integer getId() { return this.id; } //title属性的setter和getter方法 public void setTitle(String title) { this.title = title; } public String getTitle() { return this.title; } //content属性的setter和getter方法 public void setContent(String content) { this.content = content; } public String getContent() { return this.content; } }
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!--上面四行对所有的Hibernate映射文件都相同 --> <!-- hibernate-mapping是映射文件的根元素 --> <hibernate-mapping package="lee"> <!-- 每个class元素对应一个持久化对象 --> <class name="News" table="news_table"> <!-- id元素定义持久化类的标识属性 --> <id name="id" column="news_id" unsaved-value="null"> <generator class="identity"/> </id> <!-- property元素定义常规属性 --> <property name="title" column="news_title" type="string"/> <property name="content" type="string"/> </class> </hibernate-mapping>
1、插入一条信息
<?xml version='1.0' encoding='GBK'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <!--上面四行对所有的hibernate连接配置文件都相同 --> <!-- hibernate- configuration是连接配置文件的根元素 --> <hibernate-configuration> <session-factory> <!-- 指定连接数据库所用的驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 指定连接数据库的url,hibernate是连接的数据库名 --> <property name="connection.url">jdbc:mysql://localhost/crazyit</property> <!-- 指定连接数据库的用户名 --> <property name="connection.username">root</property> <!-- 指定连接数据库的密码 --> <property name="connection.password">32147</property> <!-- 使用C3P0连接池,指定连接池的相关配置信息 --> <property name="hibernate.c3p0.max_size">20</property> <property name="hibernate.c3p0.min_size">1</property> <property name="hibernate.c3p0.timeout">5000</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">2</property> <property name="hibernate.c3p0.validate">true</property> <!-- 指定数据库方言 --> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> <!-- 根据需要自动创建数据库 --> <property name="hbm2ddl.auto">create</property> <!-- 罗列所有的映射文件--> <mapping resource="News.hbm.xml"/> </session-factory> </hibernate-configuration>
package lee; import org.hibernate.cfg.*; import org.hibernate.*; /** * Description: * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> * <br/>Copyright (C), 2001-2010, Yeeku.H.Lee * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class Test { public static void main(String[] args) throws Exception { //实例化Configuration Configuration conf = new Configuration().configure(); //实例化SessionFactory SessionFactory sf = conf.buildSessionFactory(); //实例化Session Session sess = sf.openSession(); //开始事务 Transaction tx = sess.beginTransaction(); //创建消息实例 News n = new News(); //设置消息标题和消息内容 n.setTitle("疯狂Java联盟成立了"); n.setContent("疯狂Java联盟成立了,网址是www.crazyit.org"); //保存消息 sess.save(n); //提交事务 tx.commit(); //关闭Session sess.close(); } }
2、查询
package lee; import org.hibernate.cfg.*; import org.hibernate.*; import java.util.*; import org.hibernate.criterion.*; public class Test { public static void main(String[] args) throws Exception { //实例化Configuration Configuration conf = new Configuration().configure(); //实例化SessionFactory SessionFactory sf = conf.buildSessionFactory(); //实例化Session Session sess = sf.openSession(); //开始事务 Transaction tx = sess.beginTransaction(); List l = sess.createCriteria(News.class) //此处增加限制条件必须是News类中存在的属性 .add( Restrictions.lt("id" , new Integer(30) ) ) .list(); //遍历查询到的记录 for (Iterator it = l.iterator(); it.hasNext(); ) { News n = (News)it.next(); System.out.println(n.getTitle()); System.out.println(n.getContent()); } //提交事务 tx.commit(); //关闭Session sess.close(); } }