说明:这个例子只是简单的把两个表作了单向多对一和单向一对多关联。可以实现数据的检索,但是在删除和更新上尚有问题,之后再讨论。
一、数据库
二、编码
目录结构
1、建立两个类:User、Team
package jlp.hibernate;
public class User {
private int User_Id;
private String User_Name;
private Team Team;
public int getUser_Id() {
return User_Id;
}
public void setUser_Id(int user_Id) {
User_Id = user_Id;
}
public String getUser_Name() {
return User_Name;
}
public void setUser_Name(String user_Name) {
User_Name = user_Name;
}
public Team getTeam() {
return Team;
}
public void setTeam(Team team) {
Team = team;
}
}
---------------------------------------------------------------------------------------
package jlp.hibernate;
import java.util.HashSet;
import java.util.Set;
public class Team {
private int Team_Id;
private String Team_Name;
private Set<User> Users=new HashSet<User>();
public Team()
{
}
public Team(String Team_Name)
{
this.Team_Name=Team_Name;
}
public int getTeam_Id() {
return Team_Id;
}
public void setTeam_Id(int team_Id) {
Team_Id = team_Id;
}
public String getTeam_Name() {
return Team_Name;
}
public void setTeam_Name(String team_Name) {
Team_Name = team_Name;
}
public Set<User> getUsers() {
return Users;
}
public void setUsers(Set<User> users) {
Users = users;
}
}
2、对应实体类新建两个映射文件:User.hbm.xml、Team.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="jlp.hibernate">
<class name="jlp.hibernate.User" table="User">
<id column="User_Id" name="User_Id">
<generator class="increment"/>
</id>
<property column="User_Name" generated="never" lazy="false" name="User_Name"/>
<many-to-one cascade="delete" class="jlp.hibernate.Team" column="Team_Id"
lazy="false" name="Team"/>
</class>
</hibernate-mapping>
------------------------------------------------------------------------------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="jlp.hibernate">
<class name="jlp.hibernate.Team" table="Team">
<id column="Team_Id" name="Team_Id">
<generator class="increment"/>
</id>
<property column="Team_Name" name="Team_Name" />
<set name="Users" lazy="false">
<key column="Team_Id"></key>
<one-to-many class="jlp.hibernate.User"/>
</set>
</class>
</hibernate-mapping>
3、Hibernate配置文件
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password" >root</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">
org.hibernate.cache.internal.NoCacheProvider
</property>
<!-- Echo all executed SQL to stdout -->
<!-- 是否在控制台显示操作的SQL代码 -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<!-- 重启服务器的时候怎么操作数据库:create、update、 -->
<property name="hbm2ddl.auto">create</property>
<property name="myeclipse.connection.profile">
com.mysql.jdbc.Driver
</property>
<mapping resource="jlp/hibernate/User.hbm.xml" />
<mapping resource="jlp/hibernate/Team.hbm.xml" />
</session-factory>
</hibernate-configuration>
</hibernate-configuration>
4、编写测试文件
package jlp.hibernate;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
BaseHibernateDao dao=new BaseHibernateDao();
Team team=new Team("软工1001B");
dao.add(team);
int i;
for(i=0;i<5;i++)
{
User user=new User();
user.setUser_Name("张三"+i);
user.setTeam((Team)dao.get(Team.class,1));
dao.add(user);
}
User u=(User)dao.get(User.class, 1);
System.out.println(u.getTeam().getTeam_Name());
Team t=(Team)dao.get(Team.class, 1);
Iterator<User> iter=t.getUsers().iterator();
while(iter.hasNext())
{
u=(User)iter.next();
System.out.println(u.getUser_Id()+" "+u.getUser_Name()+" "+u.getTeam().getTeam_Name());
}
//dao.delete(user);
}
}
5、BaseHibernateDao.java
package jlp.hibernate;
import java.io.Serializable;
import org.hibernate.Session;
import org.hibernate.Transaction;
public class BaseHibernateDao {
/*
* 添加数据
* @param object
*
*/
protected void add(Object object)
{
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try
{
tx=session.beginTransaction();
session.save(object);
tx.commit();
}
catch (Exception e)
{
if(tx!=null) tx.rollback();
System.out.println("BaseHibernateDao:add(Object object) false!");
}
finally
{
session.close();
}
}
/*
* 加载数据
* @param cla
* @param id
* @return
*/
@SuppressWarnings("rawtypes")
protected Object get(Class cla,Serializable id)
{
Object object=null;
Session session=HibernateSessionFactory.getSession();
try
{
object=session.get(cla, id);
}
catch (Exception e)
{
System.out.println("BaseHibernateDao:get(Class cla,Serializable id) false!");
}
finally
{
session.close();
}
return object;
}
/*
* 删除数据
* @param object
*/
protected void delete(Object object)
{
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try
{
tx=session.beginTransaction();
session.delete(object);
tx.commit();
}
catch (Exception e)
{
if(tx!=null) tx.rollback();
System.out.println("BaseHibernateDao:delete(Object object) false!");
}
finally
{
session.close();
}
}
/*
* 修改数据
*@param object
*/
protected void update(Object object)
{
Transaction tx=null;
Session session=HibernateSessionFactory.getSession();
try
{
tx=session.beginTransaction();
session.update(object);
tx.commit();
}
catch (Exception e)
{
if(tx!=null) tx.rollback();
System.out.println("BaseHibernateDao:update(Object object) false!");
}
finally
{
session.close();
}
}
public static void main(String[] args) {
}
}
6、HibernateSessionFactory.java
package jlp.hibernate;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateSessionFactory {
private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private static Configuration configuration = new Configuration();
private static org.hibernate.SessionFactory sessionFactory;
private static String configFile = CONFIG_FILE_LOCATION;
static {
try {
configuration.configure(configFile);
ServiceRegistry serviceRegister=new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegister);
} catch (Exception e) {
System.out.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
private HibernateSessionFactory() {
}
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;
}
public static void rebuildSessionFactory() {
try {
configuration.configure(configFile);
ServiceRegistry serviceRegister=new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegister);
} catch (Exception e) {
System.out.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
public static void closeSession() throws HibernateException {
Session session = (Session) threadLocal.get();
threadLocal.set(null);
if (session != null) {
session.close();
}
}
public static org.hibernate.SessionFactory getSessionFactory() {
return sessionFactory;
}
public static void setConfigFile(String configFile) {
HibernateSessionFactory.configFile = configFile;
sessionFactory = null;
}
public static Configuration getConfiguration() {
return configuration;
}
}