UserType实例——User的Email列表
来源:互联网 发布:imagesloaded.js用法 编辑:程序博客网 时间:2024/04/27 15:36
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));
}
}
}
- UserType实例——User的Email列表
- usertype的详细解释和使用实例
- Hibernate的自定义数据类型实现接口——UserType详解
- Hibernate的自定义数据类型实现接口——UserType详解
- Hibernate的自定义数据类型实现接口——UserType详解
- User.UserType: NoLogin 不是SQL Server 2005 的有效选项 的解决方案
- Hibernate的自定义数据类型实现接口之一——UserType祥解
- 关于 hiberate 的 userType
- 配置Git的user name和email
- git user.name user.email到底是干嘛用的
- Hibernate中的自定义类型——UserType、CompositeUserType
- sql2005生成sql2000脚本的时候出现“User.UserType: NoLogin 不是SQL Server 2005 的有效选项“ 的解决方案
- hibernate中的 UserType 的使用
- 五.SpringBoot集成实例系列-邮件email文章列表
- Python模块学习——email(实例)
- git bash笔记-配置/修改git的user.name/email
- Hibernate对自定义类型UserType的用法
- Hibernate对自定义类型UserType的用法
- AT45DB041B
- servlet的web.xml配置
- 检测和解决 SQL Server 2000 SP 4 中的延迟和阻塞 I/O 问题
- cookieless为true时,Request.Form无法获取htm表单数据的原因及解决方案
- SUN工作站显示部分系统管理初步
- UserType实例——User的Email列表
- 两种必读的东西
- Symbian 智能指针
- 最近想做一些windwos的项目!
- 后门狂奔者reper.exe专杀
- http://www.howstuffworks.com/
- servlet的配置方法
- C#中对数据库的调用
- 迁移到 ASP .NET:需考虑的重要问题