hibernate使用annotation(注解)测试/生成数据库表.
[html] view plaincopy
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>
<!–
?useUnicode=true&characterEncoding=UTF-8设置数据库编码,mysql安装时默认为Latin1
–>
<hibernate-configuration>
<session-factory>
<property name=”connection.driver_class”>net.sourceforge.jtds.jdbc.Driver</property>
<property name=”connection.url”>jdbc:jtds:sqlserver://localhost:1433/sms</property>
<property name=”connection.username”>sa</property>
<property name=”connection.password”>123</property>
<property name=”dialect”>org.hibernate.dialect.SQLServerDialect</property>
<property name=”hbm2ddl.auto”>update</property>
<!–是否在控制台显示SQL语句,开发阶段开启,便于调试–>
<property name=”show_sql”>true</property>
<!–是否在控制台格式化显示SQL语句,方便查看–>
<property name=”format_sql”>true</property>
<!–
<property name=”cache.use_second_level_cache”>true</property>
<property name=”cache.use_query_cache”>true</property> <property
name=”cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>
–>
<mapping class=”com.sinoglobal.entity.MasUser”/>
<mapping class=”com.sinoglobal.entity.PlatUser”/>
<mapping class=”com.sinoglobal.entity.PlatNumberCfg”/>
<mapping class=”com.sinoglobal.entity.Receive”/>
<mapping class=”com.sinoglobal.entity.Send”/>
<mapping class=”com.sinoglobal.entity.Users”/>
</session-factory>
</hibernate-configuration>
实体类太多,贴一个吧。
[java] view plaincopy
package com.sinoglobal.entity;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.hibernate.annotations.GenericGenerator;
@Entity
public class Users {
private String usid;
private String name;
private String mobile;
private int stat;
private Date createtime;
public Users() {
super();
}
public Users(String name, String mobile, int stat, Date createtime) {
super();
this.name = name;
this.mobile = mobile;
this.stat = stat;
this.createtime = createtime;
}
public Users(String usid, String name, String mobile, int stat,
Date createtime) {
super();
this.usid = usid;
this.name = name;
this.mobile = mobile;
this.stat = stat;
this.createtime = createtime;
}
@Id
@GeneratedValue(generator = “system-uuid”)
@GenericGenerator(name = “system-uuid”, strategy = “uuid.hex”)
public String getUsid() {
return usid;
}
public void setUsid(String usid) {
this.usid = usid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public int getStat() {
return stat;
}
public void setStat(int stat) {
this.stat = stat;
}
public Date getCreatetime() {
return createtime;
}
public void setCreatetime(Date createtime) {
this.createtime = createtime;
}
}
自动生成的HibernateSessionFactory.java类
[java] view plaincopy
package unit.data;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.cfg.AnnotationConfiguration;
/**
* Configures and provides access to Hibernate sessions, tied to the current
* thread of execution. Follows the Thread Local Session pattern, see
* {@linkhttp://hibernate.org/42.html }.
*/
public class HibernateSessionFactory {
/**
* Location of hibernate.cfg.xml file. Location should be on the classpath
* as Hibernate uses #resourceAsStream style lookup for its configuration
* file. The default classpath location of the hibernate config file is in
* the default package. Use #setConfigFile() to update the location of the
* configuration file for the current session.
*/
private static String CONFIG_FILE_LOCATION = “/hibernate.cfg.xml”;
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static Configuration configuration = new AnnotationConfiguration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println(“%%%% Error Creating SessionFactory %%%%”);
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
/**
* Returns the ThreadLocal Session instance. Lazy initialize the
* <code>SessionFactory</code> if needed.
*
* @return Session
* @throws HibernateException
*/
public static Session getSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
rebuildSessionFactory();
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
/**
* Rebuild hibernate session factory
*
*/
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
sessionFactory = configuration.buildSessionFactory();
} catch (Exception e) {
System.err.println(“%%%% Error Creating SessionFactory %%%%”);
e.printStackTrace();
}
}
/**
* Close the single hibernate session instance.
*
* @throws HibernateException
*/
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
/**
* return session factory
*
*/
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* return session factory
*
* session factory will be rebuilded in the next call
*/
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
/**
* return hibernate configuration
*
*/
public static Configuration getConfiguration() {
return configuration;
}
}
测试类:
[java] view plaincopy
package unit.data;
import junit.framework.TestCase;
public class HibernateAnnotationTest extends TestCase {
public void testHibernate() {
HibernateSessionFactory.getSessionFactory();
}
}
如果你没有自动生成的HibernateSessionFactory:
参考它的源码,你也可以自己手动写:
[java] view plaincopy
package unit.data;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;
import junit.framework.TestCase;
public class HibernateAnnotationTest extends TestCase {
public void testHibernate() {
Configuration cfg = new AnnotationConfiguration().configure(“/hibernate.cfg.xml”);
cfg.buildSessionFactory();
}
}
我们可以看看它与传统hibernate的XML方式的不同:
[java] view plaincopy
package unit.data;
import junit.framework.TestCase;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
public class CreateDBTest extends TestCase{
public void testCreateDB() {
Configuration cf = new Configuration().configure();
SchemaExport se = new SchemaExport(cf);
se.create(true, true);
}
}
附:
@ManyToOne中是在本类对应的数据库表中生成
而@oneToMany中是在多的一方生成对应一方面的ID
OK,打完收工。
http://blog.csdn.net/yaerfeng/article/details/7070278