hibernate使用annotation(注解)测试/生成数据库表

<!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>

实体类太多,贴一个吧。

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类

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;
	}

}

测试类:

package unit.data;

import junit.framework.TestCase;

public class HibernateAnnotationTest extends TestCase {
	public void testHibernate() {
		HibernateSessionFactory.getSessionFactory();
	}
}


如果你没有自动生成的HibernateSessionFactory:

参考它的源码,你也可以自己手动写:

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方式的不同:

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,打完收工。




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值