一、配置hibernate.cfg.xml文件中的属性自动提示功能
1、 配置如下图,将http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd放入第三步的文本框中
二、HelloWorld
2、 在 http://sourceforge.net/projects/hibernate/files/hibernate4/下载hibernate-release-4.2.4.Final.zip
3、 创建一个普通的java项目,在根目录下创建一个名称为“lib”的文件夹用来存放导入的jar包.
4、 选择hibernate必须的jar包导入项目,将下载的hibernate-release-4.2.4.Final.zip解压开,选择hibernate-release-4.2.4.Final\lib\required下面的所有jar包。
5、 Hibernate的jar包导入之后就需要导入mysql的驱动包
6、 在src目录下创建hibernate的配置文件hibernate.cfg.xml,步骤如下:
a) 在项目名称上右键【New】->【other】,选择Hibernate Configuration file,然后【Next>】
b) 默认名字就叫【hibernate.cfg.xml】,然后直接【Finish】就可以了
Hibernate.cfg.xml配置文件的内容如下
<?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="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">allyroot</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<!-- Hibernate的基本信息 --> <!-- Hibernate使用的方言 --> <property name="dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<!-- 是否在控制台打印sql --> <property name="show_sql">true</property>
<!-- 是否格式化sql --> <property name="format_sql">true</property>
<!-- 自动生成数据表的策略 --> <!-- create:会根据.hbm.xml文件生成新的数据表,每次都会删除上一次的表,重新生成表 create-drop:会根据.hbm.xml文件生成新的数据表,但SessionFactory一关闭,表就自动删除 update:最常用的属性,会根据.hbm.xml文件生成新的数据表,若.hbm.xml文件和数据表中对应的数据表结构不不同,Hibernate会更新数据表结构,但不会删除已经有的列和行 validate:会和数据表进行比较,若.hbm.xml文件中的列在数据表中不存在,则抛出异常 --> <property name="hbm2ddl.auto">update</property>
<!-- 指定映射的 .hbm.xml 文件 --> <mapping resource="pojo/News.hbm.xml" /> </session-factory> </hibernate-configuration>
|
7、 在src下创建pojo包,并创建News.java类,代码如下
package pojo;
import java.util.Date;
public class News {
private Integer id; private String title; private String content; private Date time;
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 getContent() { return content; }
public void setContent(String content) { this.content = content; }
public Date getTime() { return time; }
public void setTime(Date time) { this.time = time; }
public News() { }
public News(String title, String content, Date time) { super(); this.title = title; this.content = content; this.time = time; }
@Override public String toString() { return "News [id=" + id + ", title=" + title + ", content=" + content + ", time=" + time + "]"; }
}
|
8、 根据pojo生成对应的hbm.xml配置文件步骤如下:
a) 在pojo包上右键【New】->【other】,选择Hibernate XML Mapping file,然后【Next>】
b) 选择要生成实体类的包,直接【Finish】就可以生成对应的hbm.xml文件
c) 生成对应的hbm.xml文件信息如下:
<?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 2015-3-27 18:21:31 by Hibernate Tools 3.4.0.CR1 --> <hibernate-mapping> <class name="pojo.News" table="NEWS" lazy="false"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="title" type="java.lang.String"> <column name="TITLE" /> </property> <property name="content" type="java.lang.String"> <column name="CONTENT" /> </property> <property name="time" type="java.util.Date"> <column name="TIME" /> </property> </class> </hibernate-mapping>
|
9、 在src下创建test包,用来写测试方法,代码如下
a) 新增:
package test;
import java.util.Date;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test;
import pojo.News;
public class Insert {
@Test public void testName() throws Exception { SessionFactory sessionFactory = null; Configuration configuration = new Configuration().configure();
// Hibernate 的任何配置都需要在serviceRegistry 中注册之后才有效 ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry);
// 4.0之前的创建方式 // sessionFactory = configuration.buildSessionFactory();
Session session = sessionFactory.openSession();
// 开启事务 Transaction transaction = session.beginTransaction();
News news = new News("新闻", "内容", new Date());
try { session.save(news); transaction.commit(); } catch (Exception e) { e.printStackTrace(); transaction.rollback(); }
session.close(); sessionFactory.close(); }
}
|
注意:
1、由于Hibernate.cfg.xml中hbm2ddl.auto这个配置的是“update”,所以不需要创建数据库表,程序会在运行的时候自动根据*.hbm.xml文件自动创建数据库表,至于如何从数据库表中生成对应的*.hbm.xml配置文件会在以后的博客中写出。
2、Test类中的test()方法在运行的时候需要选择JUnitTest方式,同时还需要将JUnit的包引入项目中,这里就不在描述如何引入JUnit包的方法了。
b) 查询:
package test;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test;
import pojo.News;
public class Query { private SessionFactory sessionFactory; private Session session; private Transaction transaction;
@Before public void init() { Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); session = sessionFactory.openSession(); transaction = session.beginTransaction(); }
@After public void destory() { transaction.commit(); session.close(); sessionFactory.close(); }
@Test public void test() { News news = (News) session.get(News.class, 1); System.out.println(news.getContent()); }
}
|
c) 修改:
package test;
import java.util.Date;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test;
import pojo.News;
public class Update { private SessionFactory sessionFactory; private Session session; private Transaction transaction;
@Test public void test() throws Exception { Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); session = sessionFactory.openSession(); transaction = session.beginTransaction();
News news = (News) session.get(News.class, 3); news.setContent("内容1"); news.setTime(new Date());
// session.update(news); session.update(news);
transaction.commit(); session.clear(); sessionFactory.close();
}
}
|
d) 删除:
package test;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test;
import pojo.News;
public class Delete {
private SessionFactory sessionFactory; private Session session; private Transaction transaction;
@Test public void test() throws Exception { Configuration configuration = new Configuration().configure(); ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()) .buildServiceRegistry(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); session = sessionFactory.openSession(); transaction = session.beginTransaction();
session.delete(session.get(News.class, 1));
transaction.commit(); session.close(); sessionFactory.close(); }
}
|