本站首页    管理页面    写新日志    退出


«October 2025»
1234
567891011
12131415161718
19202122232425
262728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7644295
建立时间:2006年5月29日




[Hibernate]UserType实例——User的Email列表
软件技术

lhwork 发表于 2007/2/2 17:25:56

1.实现UserType接口的EMailList自定义类型 import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Types;import java.util.ArrayList;import java.util.List; import org.apache.commons.lang.StringUtils; import net.sf.hibernate.Hibernate;import net.sf.hibernate.HibernateException;import net.sf.hibernate.UserType;import net.sf.hibernate.hql.Parser; /** * @author hy-he * */public class EMailList implements UserType { private List emails; private static final String SPLITTER = ";"; private static final int[] TYPES = new int[]{  Types.VARCHAR }; /* (non-Javadoc)  * @see net.sf.hibernate.UserType#sqlTypes()  */ public int[] sqlTypes() {  // TODO Auto-generated method stub  return TYPES; }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#returnedClass()  */ public Class returnedClass() {  // TODO Auto-generated method stub  return List.class; }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#equals(java.lang.Object, java.lang.Object)  */ public boolean equals(Object x, Object y) throws HibernateException {  if(x == y) return true;  if(x != null && y != null){   List xList = (List)x;   List yList = (List)y;   if(xList.size() != yList.size()) return false;   for(int i = 0;i<xList.size();i++){    String str1 = (String)xList.get(i);    String str2 = (String)yList.get(i);    if(!str1.equals(str2)) return false;   }   return true;  }  return false; }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#nullSafeGet(java.sql.ResultSet, java.lang.String[], java.lang.Object)  */ public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException {  String value = (String)Hibernate.STRING.nullSafeGet(rs,names[0]);  if( value != null){   return parse(value);  }else{   return null;  } }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#nullSafeSet(java.sql.PreparedStatement, java.lang.Object, int)  */ public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException {  System.out.println("Set method excecuted");  if(value != null){   String str = assemble((List)value);   Hibernate.STRING.nullSafeSet(st,str,index);  }else{   Hibernate.STRING.nullSafeSet(st,value,index);  }  }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#deepCopy(java.lang.Object)  */ public Object deepCopy(Object value) throws HibernateException {  List sourcelist = (List)value;  List targetlist = new ArrayList();  targetlist.addAll(sourcelist);  return targetlist; }  /* (non-Javadoc)  * @see net.sf.hibernate.UserType#isMutable()  */ public boolean isMutable() {  // TODO Auto-generated method stub  return false; } private String assemble(List emailList){  StringBuffer strBuf = new StringBuffer();  for(int i = 0;i<emailList.size()-1;i++){   strBuf.append(emailList.get(i)).append(SPLITTER);  }  strBuf.append(emailList.get(emailList.size()-1));  return strBuf.toString(); } private List parse(String value){  String[] strs = StringUtils.split(value,SPLITTER);  List emailList = new ArrayList();  for(int i = 0;i<strs.length;i++){   emailList.add(strs[i]);  }  return emailList; }} 2.POJO: import java.io.Serializable;import java.util.List; /** * @author hy-he * @hibernate.class * table = "USER_TYPE_USER" */public class UserTypeUser implements Serializable { private Long id; private String name; private Integer age; private List email = new ArrayList(); /**  * @hibernate.id  * column = "USER_ID"  * generator-class = "increment"  * @return  */ public Long getId() {  return id; } /**  * @hibernate.property   * column = "AGE"  * @return  */ public Integer getAge() {  return age; } /**  * @hibernate.property   * column = "EMAIL"  * type = "hibernate.usertype.EMailList"  * @return  */ public List getEmail() {  return email; } /**  * @hibernate.property   * column = "NAME"  * @return  */ public String getName() {  return name; } public void setAge(Integer age) {  this.age = age; } public void setEmail(List email) {  this.email = email; } public void setId(Long id) {  this.id = id; } public void setName(String name) {  this.name = name; } }3.xml: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"     "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping>    <class        name="hibernate.usertype.UserTypeUser"        table="USER_TYPE_USER"        dynamic-update="false"        dynamic-insert="false"    >         <id            name="id"            column="USER_ID"            type="java.lang.Long"        >            <generator class="increment">            </generator>        </id>         <property            name="age"            type="java.lang.Integer"            update="true"            insert="true"            access="property"            column="AGE"        />         <property            name="email"            type="hibernate.usertype.EMailList"            update="true"            insert="true"            access="property"            column="EMAIL"        />         <property            name="name"            type="java.lang.String"            update="true"            insert="true"            access="property"            column="NAME"        />         <!--            To add non XDoclet property mappings, create a file named                hibernate-properties-UserTypeUser.xml            containing the additional properties and place it in your merge dir.        -->     </class> </hibernate-mapping>4.运用: insert方法: public static void insertUser() throws HibernateException {  UserTypeUser user = new UserTypeUser();  user.setAge(new Integer(23));  user.setName("Test UserType");  user.getEmail().add("rever@hotmail.com");  user.getEmail().add("rever1@hotmail.com");  user.getEmail().add("rever2@hotmail.com");  user.getEmail().add("rever3@hotmail.com");  Session session = HibernateUtil.currentSession();  Transaction tx = session.beginTransaction();  session.save(user);   tx.commit();  HibernateUtil.closeSession(); } display方法:  public static void display() throws HibernateException {  Session session = HibernateUtil.currentSession();  List users = session.find("from UserTypeUser");  HibernateUtil.closeSession();   for (ListIterator iterator = users.listIterator(); iterator.hasNext();) {   UserTypeUser pu = (UserTypeUser) iterator.next();   System.out.println(pu.getName());   List emails = pu.getEmail();   for(int i = 0;i<emails.size();i++){    System.out.println(emails.get(i));   }  } }


阅读全文(3395) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.639 second(s), page refreshed 144801060 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号