一个简单示例:
一个雇员可以担任几个角色,一个角色可以拥有多个雇员,雇员和角色之间存在多对多的关联关系,
在这里我们建立多对多的双向关联...
db schema:
==============================
雇员表:
CREATE TABLE [employee] (
[eid] [int] IDENTITY (1, 1) NOT NULL ,
[ename] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[join_date] [datetime] NOT NULL ,
PRIMARY KEY CLUSTERED
(
[eid]
) ON [PRIMARY]
) ON [PRIMARY]
GO
角色表:
CREATE TABLE [role] (
[roleid] [int] IDENTITY (1, 1) NOT NULL ,
[rolename] [varchar] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
PRIMARY KEY CLUSTERED
(
[roleid]
) ON [PRIMARY]
) ON [PRIMARY]
GO
雇员角色表:
CREATE TABLE [emp_role] (
[er_id] [int] IDENTITY (1, 1) NOT NULL ,
[er_eid] [int] NULL ,
[er_roleid] [int] NULL ,
PRIMARY KEY CLUSTERED
(
[er_id]
) ON [PRIMARY] ,
FOREIGN KEY
(
[er_eid]
) REFERENCES [employee] (
[eid]
),
FOREIGN KEY
(
[er_roleid]
) REFERENCES [role] (
[roleid]
)
) ON [PRIMARY]
GO
Employee.java
--------------------------
package com.supersit.hibernate.bean;
import java.util.Date;
import java.util.Set;
public class Employee implements java.io.Serializable,
com.supersit.hibernate.Interface.ObjectIn {
/**
*
*/
private static final long serialVersionUID = 1L;
//雇员编号
private Integer eid;
//雇员姓名
private String ename;
//入职时间
private java.util.Date join_date;
//角色集合
private java.util.Set<Role> roles = new java.util.HashSet<Role>();
public Employee(Integer eid, String ename, Date join_date) {
this.eid = eid;
this.ename = ename;
this.join_date = join_date;
}
public Employee(Integer eid, String ename, Date join_date, Set<Role> roles) {
this.eid = eid;
this.ename = ename;
this.join_date = join_date;
this.roles = roles;
}
public java.util.Set getRoles() {
return roles;
}
public void setRoles(java.util.Set<Role> roles) {
this.roles = roles;
}
public Employee() {
}
public Integer getEid() {
return eid;
}
public void setEid(Integer eid) {
this.eid = eid;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public java.util.Date getJoin_date() {
return join_date;
}
public void setJoin_date(java.util.Date join_date) {
this.join_date = join_date;
}
}
Role.java
------------------------------------
package com.supersit.hibernate.bean;
import java.util.Set;
public class Role implements java.io.Serializable,
com.supersit.hibernate.Interface.ObjectIn {
//角色编号
private Integer roleid;
//角色名称
private String rolename;
//此角色下的雇员集合
private java.util.Set emps = new java.util.HashSet();
public Role(Integer roleid, String rolename, Set emps) {
this.roleid = roleid;
this.rolename = rolename;
this.emps = emps;
}
public java.util.Set getEmps() {
return emps;
}
public void setEmps(java.util.Set emps) {
this.emps = emps;
}
public Role() {
}
public Integer getRoleid() {
return roleid;
}
public Role(Integer roleid, String rolename) {
this.roleid = roleid;
this.rolename = rolename;
}
public void setRoleid(Integer roleid) {
this.roleid = roleid;
}
public String getRolename() {
return rolename;
}
public void setRolename(String rolename) {
this.rolename = rolename;
}
}
配置文件:
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">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<property name="connection.username">sa</property>
<property name="connection.url">
jdbc:microsoft:sqlserver://localhost:1433;databasename=hibernate
</property>
<property name="dialect">
org.hibernate.dialect.SQLServerDialect
</property>
<property name="connection.password">sa</property>
<property name="connection.driver_class">
com.microsoft.jdbc.sqlserver.SQLServerDriver
</property>
<property name="show_sql">true</property>
<mapping resource="com/supersit/hibernate/mapping/Employee.hbm.xml" />
<mapping resource="com/supersit/hibernate/mapping/Role.hbm.xml" />
</session-factory>
</hibernate-configuration>
映射文件:
Employee.hbm.xml
-----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.supersit.hibernate.bean">
<class name="Employee" table="employee" schema="dbo"
catalog="hibernate">
<id name="eid" column="eid" type="int">
<generator class="identity"></generator>
</id>
<property name="ename" column="ename" type="string"
not-null="true">
</property>
<property name="join_date" column="join_date" type="date"></property>
<!-- 映射roles属性,和连接表emp_role进行关联,级联方式:保存更新,检索方式:立即检索 -->
<set name="roles" cascade="save-update" lazy="false"
table="emp_role">
<!-- 连接表的字段er_eid作为外键依赖于employee表的主键eid -->
<key column="er_eid"></key>
<!-- many-to-many属性建立和Role的多对多关联关系,class指定关联的持久化类,连接表的字段er_roleid作为外键依赖于role表的主键roleid -->
<many-to-many class="Role" column="er_roleid"></many-to-many>
</set>
</class>
</hibernate-mapping>
Role.hbm.xml
----------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.supersit.hibernate.bean">
<class name="Role" table="role" catalog="hibernate" schema="dbo">
<id name="roleid" column="roleid" type="int">
<generator class="identity"></generator>
</id>
<property name="rolename" column="rolename" type="string"
not-null="true">
</property>
<set name="emps" table="emp_role" cascade="save-update"
lazy="false" >
<key column="er_roleid"></key>
<many-to-many class="Employee" column="er_eid"></many-to-many>
</set>
</class>
</hibernate-mapping>
Dao
====================================
EmployeeDao.java
----------------------------------
package com.supersit.hibernate.dao;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.supersit.hibernate.bean.Employee;
import com.supersit.hibernate.bean.Role;
import com.supersit.hibernate.exception.HibernateMsgException;
public class EmployeeDao extends BaseDao {
/**
* <p>
* 查询所有的雇员
* </p>
*
* @author chenwei
* @return java.util.List
* @throws HibernateMsgException
*/
public java.util.List getEmps() throws HibernateMsgException {
java.util.List list = new java.util.ArrayList();
org.hibernate.Session session = null;
org.hibernate.Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
list = session.createQuery("from Employee e order by e.eid").list();
tran.commit();
} catch (Exception e) {
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
return list;
}
/**
* <p>
* 更改指定用户的角色
* </p>
*
* @author chenwei
* @param eid:用户ID
* @param roleids:角色ID数组
*
*/
public static void opeRolesOfEmp(Integer eid, String[] roleids)
throws HibernateMsgException {
org.hibernate.Session session = null;
org.hibernate.Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
Employee emp = (Employee) session.load(Employee.class, eid);
java.util.Set roles = new java.util.HashSet();
for (int i = 0; i < roleids.length; i++) {
// 查询角色(此处应传入一个Session对象,否则会抛出org.hibernate.NonUniqueObjectException)
Role role = new RoleDao().getRoleById(session, new Integer(
roleids[i]));
System.out.println("rolename=" + role.getRolename());
roles.add(role);
}
emp.setRoles(roles);
session.saveOrUpdate(emp);
tran.commit();
} catch (Exception e) {
e.printStackTrace();
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
}
public Employee initEmp(Employee emp) throws HibernateMsgException {
Session session = null;
Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
org.hibernate.Hibernate.initialize(emp.getRoles());
session.update(emp);
tran.commit();
} catch (Exception e) {
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
return emp;
}
public static void main(String[] args) throws HibernateMsgException {
// select();
opeRolesOfEmp(new Integer(1), new String[] { "1", "3", "4" });
}
// 检索
public static void select() throws HibernateMsgException {
EmployeeDao dao = new EmployeeDao();
List list = dao.getEmps();
for (int i = 0; i < list.size(); i++) {
Employee emp = (Employee) list.get(i);
System.out.println("eid=" + emp.getEid());
System.out.println("ename=" + emp.getEname());
System.out.println("join_date=" + emp.getJoin_date()); //
// 映射roles属性,lazy=false时,可以立即检索
Set roles = emp.getRoles();
java.util.Iterator ite = roles.iterator();
while (ite.hasNext()) {
Role role = (Role) ite.next();
System.out.println("rolename=" + role.getRolename());
}
System.out.println("===========================================");
}
}
// 保存对象
public static void insert() throws HibernateMsgException {
java.util.Date date = new java.util.Date();
java.text.SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
try {
date = format.parse("2007-10-17");
} catch (ParseException e) {
e.printStackTrace();
}
Employee emp = new Employee(new Integer(1), "张信哲", date);
Session session = null;
Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
boolean b = new EmployeeDao().saveObj(session, emp);
if (b) {
System.out.println("成功保存一个Employee对象");
}
tran.commit();
} catch (Exception e) {
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
}
}
RoleDao.java
------------------------
package com.supersit.hibernate.dao;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.supersit.hibernate.bean.Employee;
import com.supersit.hibernate.bean.Role;
import com.supersit.hibernate.exception.HibernateMsgException;
public class RoleDao extends BaseDao {
/**
* <p>
* 根据角色ID查找角色(传入一个Session对象)
* </p>
*
* @param roleid:角色ID
* @return com.supersit.hibernate.bean.Role
* @throws HibernateMsgException
*/
public com.supersit.hibernate.bean.Role getRoleById(Session session,
Integer roleid) throws HibernateMsgException {
Role role = new Role();
try {
java.util.List list = session.createQuery(
"from Role r where r.roleid=:id").setInteger("id", roleid)
.list();
if (list != null && list.size() > 0)
role = (Role) list.get(0);
} catch (Exception e) {
}
return role;
}
/**
* <p>
* 根据角色ID查找角色(创建一个新的Session)
* </p>
*
* @param roleid:角色ID
* @return com.supersit.hibernate.bean.Role
* @throws HibernateMsgException
*/
public com.supersit.hibernate.bean.Role getRoleById(Integer roleid)
throws HibernateMsgException {
Role role = new Role();
Session session = null;
Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
java.util.List list = session.createQuery(
"from Role r where r.roleid=:id").setInteger("id", roleid)
.list();
if (list != null && list.size() > 0)
role = (Role) list.get(0);
tran.commit();
} catch (Exception e) {
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
return role;
}
public static void main(String[] args) throws HibernateMsgException {
selectEmpsOfEachRole();
}
/**
* <p>
* 查询所有的角色
* </p>
*
* @param session
* @return java.util.List
*/
public static java.util.List getAllRoles(org.hibernate.Session session) {
java.util.List list = new java.util.ArrayList();
list = session.createQuery("from Role r order by r.roleid asc").list();
return list;
}
public static void selectEmpsOfEachRole() throws HibernateMsgException {
org.hibernate.Session session = null;
org.hibernate.Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
java.util.List list = getAllRoles(session);
for (int i = 0; i < list.size(); i++) {
Role role = (Role) list.get(i);
System.out.println("角色编号:" + role.getRoleid());
System.out.println("角色名称:" + role.getRolename());
System.out.println("此角色下的所有雇员>>>");
java.util.Iterator ite = role.getEmps().iterator();
while (ite.hasNext()) {
Employee emp = (Employee) ite.next();
System.out.println("雇员编号:" + emp.getEid());
System.out.println("雇员姓名:" + emp.getEname());
System.out.println("入职时间:" + emp.getJoin_date());
}
System.out
.println("=======================================================");
}
tran.commit();
} catch (Exception e) {
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
}
}
/**
*
* <p>
* 对于持久化类的添加,删除,修改可以通过继承这个类来实现 如果已开启Session缓存,可以传入这个Session对象进行相应的操作,当然也可以
* 不调用此方法,直接调用Session对象相应的方法即可,在这里只是想实现面向接口编程
* 对于没有开启Session缓存的情况,直接调用只有一个参数的方法,在方法体中会自动创建 Session对象,进行相关操作...
* </p>
*
* @author chenwei
* 2007-10-26
*
*/
BaseDao.java
----------------------------
package com.supersit.hibernate.dao;
import org.hibernate.Session;
import com.supersit.hibernate.exception.HibernateMsgException;
public class BaseDao {
/**
* <p>
* 保存一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean saveObj(com.supersit.hibernate.Interface.ObjectIn in)
throws HibernateMsgException {
org.hibernate.Session ses = null;
org.hibernate.Transaction tran = null;
boolean flag = true;
try {
ses = com.supersit.hibernate.factory.HibernateSessionFactory1
.getSession();
tran = ses.beginTransaction();
ses.save(in);
tran.commit();
} catch (Exception e) {
e.printStackTrace();
flag = false;
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(ses);
}
return flag;
}
/**
* <p>
* 保存一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean saveObj(Session session,
com.supersit.hibernate.Interface.ObjectIn in) {
boolean flag = true;
try {
session.save(in);
} catch (Exception e) {
e.printStackTrace();
flag = false;
}
return flag;
}
/**
* <p>
* 修改一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean updateObj(com.supersit.hibernate.Interface.ObjectIn in)
throws HibernateMsgException {
boolean flag = true;
org.hibernate.Session ses = null;
org.hibernate.Transaction tran = null;
try {
ses = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = ses.beginTransaction();
ses.update(in);
tran.commit();
} catch (Exception e) {
flag = false;
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(ses);
}
return flag;
}
/**
* <p>
* 修改一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean updateObj(Session session,
com.supersit.hibernate.Interface.ObjectIn in) {
boolean flag = true;
try {
session.update(in);
} catch (Exception e) {
flag = false;
}
return flag;
}
/**
* <p>
* 删除一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean deleteObj(com.supersit.hibernate.Interface.ObjectIn in)
throws HibernateMsgException {
boolean flag = true;
org.hibernate.Session session = null;
org.hibernate.Transaction tran = null;
try {
session = com.supersit.hibernate.factory.HibernateSessionFactory
.getSession();
tran = session.beginTransaction();
session.delete(in);
tran.commit();
} catch (Exception e) {
flag = false;
com.supersit.hibernate.factory.HibernateSessionFactory
.rollbackTran(tran);
} finally {
com.supersit.hibernate.factory.HibernateSessionFactory
.closeSession(session);
}
return flag;
}
/**
* <p>
* 删除一个com.supersit.hibernate.Interface.ObjectIn对象
* </p>
*
* @author chenwei
* @param com.supersit.hibernate.Interface.ObjectIn
* @return boolean
* @throws HibernateMsgException
*/
public boolean deleteObj(Session session,
com.supersit.hibernate.Interface.ObjectIn in) {
boolean flag = true;
try {
session.delete(in);
} catch (Exception e) {
flag = false;
}
return flag;
}
}
ObjectIn.java
------------------------------
package com.supersit.hibernate.Interface;
public interface ObjectIn {
}
分享到:
相关推荐
藏区特产销售平台--论文.zip
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
该单片机项目可作为课程设计和期末大作业或者毕设,项目完整,有原理图和代码,需要的自行下载即可!
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件太大放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载
文件放服务器下载,请务必到电脑端资源详情查看然后下载