- 浏览: 522366 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
Zhouchenyu:
谢谢
1、junit学习之junit的基本介绍 -
wenjieyatou:
1、junit学习之junit的基本介绍 -
huabengao:
不错 很好
1、junit学习之junit的基本介绍 -
prayjourney:
写的不错,很有启发!
1、junit学习之junit的基本介绍 -
wangzhenyu1260:
assertEqualspublic static void ...
1、junit学习之junit的基本介绍
1、新建一个Email类型的字段
package cn.ehoo.hibernate; import java.io.Serializable; 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 org.hibernate.Hibernate; import org.hibernate.HibernateException; import org.hibernate.usertype.UserType; /** * @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; } /** * 从email 中取出email字段,并将其解析为list类型后返回 */ 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; } } /** * 将List型的email信息组装成字符串之后保存在email字段 */ 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; } @Override public Object assemble(Serializable arg0, Object arg1) throws HibernateException { // TODO Auto-generated method stub return null; } @Override public Serializable disassemble(Object arg0) throws HibernateException { // TODO Auto-generated method stub return null; } @Override public int hashCode(Object arg0) throws HibernateException { // TODO Auto-generated method stub return 0; } @Override public Object replace(Object arg0, Object arg1, Object arg2) throws HibernateException { // TODO Auto-generated method stub return null; } }
2、POJO类
package cn.ehoo.hibernate; import java.io.Serializable; import java.util.ArrayList; import java.util.List; /** * @author hy-he * @hibernate.class table = "USER_TYPE_USER" */ public class UserTypeUser implements Serializable { private static final long serialVersionUID = 1L; 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、POJO类的映射
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="eg"> <class name="cn.ehoo.hibernate.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="cn.ehoo.hibernate.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、测试的两个方法
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.getSession(); Transaction tx = session.beginTransaction(); session.save(user); tx.commit(); HibernateUtil.closeSession(); } public static void display() throws HibernateException { Session session = HibernateUtil.getSession(); Query query = session.createQuery("from UserTypeUser"); List users = query.list(); 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)); } } }
发表评论
-
hibernate component的使用
2011-11-30 14:35 3344第一次看到component这样使用。所以记下来。只记类与h ... -
hibernate一对一之唯一外键关联(双向关联)
2011-11-08 17:20 1032其内容与http://huihai.iteye.com/blo ... -
hibernate一对一之唯一外键关联(单向关联)
2011-11-08 17:03 5006新新一个java项目,并新建javabean。如下: ... -
Hibernate的事务处理机制
2011-10-21 17:34 995Hibernate是对JDBC的轻量级对象封装,Hiberna ... -
hibernate+tomca5.5t+JOTM 2.10 JTA配置
2011-10-20 16:29 22801,从官网上下载tomcat5.5,在tomcat下的conf ... -
hibernate连接池之tomcat6的配置
2011-10-17 13:59 1641新建一个web项目,然后在tomcat中的的server.xm ... -
hibernate配置文件中的properties属性
2011-08-15 15:56 3661假如现在有班级Class类与学生student类,但是在映射时 ... -
【转】hibernate二级缓存攻略
2011-08-02 11:40 1035转的原因是:原文排版不太好。我想整理的清楚点 很多人对 ... -
【转】Hibernate-Session
2011-08-02 09:35 1223当讨论Hibernate的Session时 ... -
hibernate一对多,多对一,一对多双向关联
2011-02-04 22:12 1523hibernate之多对一。在多对一中,在多的一方设置many ... -
hibernate flush与update区别
2011-01-07 10:34 1341a)update操作的是在自由态或脱管状态(detached ... -
hibernate lock方法的使用
2011-01-07 10:13 2232hibernate中lock方法到网上没有找到几个例子,所以自 ... -
Hibernate update与lock区别
2011-01-06 17:48 1298a)update是把一个已经更改过的脱管状态(detached ... -
Hibernate三种对象状态
2011-01-06 17:19 973hibernate的三种状态 a)瞬时状态(Transient ... -
hibernate中get与load区别
2011-01-06 16:52 1071在hibernate中有get与load两个都是查询指定的一条 ...
相关推荐
- **映射一对多关联**: 如何在一对多关联中使用外键或联合表。 - **自然id**: 使用非主键属性作为唯一标识。 - **任意**: 映射任意类型的数据。 - **属性**: 更多关于属性映射的细节。 - **hbm.xml特异性**: 在`.hbm...
在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作。在本例中,我们定义了一个名为 CustomLong 的类,该类...
《Hibernate3中文手册》是Java开发领域中关于对象关系映射框架Hibernate的重要参考资料,它详尽地阐述了Hibernate3的使用方法和核心概念。Hibernate是一个开放源代码的对象关系映射框架,它允许开发者将数据库操作与...
在Java的Hibernate框架中,自定义类型是一种非常实用的功能,它允许开发者根据特定业务需求扩展Hibernate内置的数据类型。当我们发现Hibernate默认的数据类型无法满足我们存储数据的特殊要求时,例如需要处理复杂...
在Hibernate的映射文件(.hbm.xml)中,可以使用`<typedef>`元素定义枚举类型映射,例如: ```xml <param name="enumClass">com.example.MyEnum</param> ``` 然后在实体类的属性上使用这个类型: ```xml ...
在Hibernate的配置中,我们可以指定使用这个方言,使得Hibernate在处理`TEXT`字段时能够使用正确的SQL语句。 以下是一些关键步骤,以使Hibernate支持MySQL的`TEXT`字段: 1. **创建或扩展方言类**: - 如果现有的...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑解耦,通过面向对象的方式处理数据。本文将深入探讨如何使用Hibernate实现领域对象的自定义字段,这涉及到对...
1.1.3 在Java中使用SQL 1.1.4 面向对象应用程序中的持久化 1.2 范式不匹配 1.2.1 粒度问题 1.2.2 子类型问题 1.2.3 同一性问题 1.2.4 与关联相关的问题 1.2.5 数据导航的问题 ...
我们在 Hibernate 应用中使用最广泛的接口,也被称为持久化管理器,提供了相关的数据库操作,比如添、更、删、加、查等基本操作。特点:非线程安全,轻量级,其创建及销毁消耗资源少。每个客户请求对应一个 Session...
在Java开发中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者使用面向对象的方式来操作数据库,而无需关心底层SQL语句。本文将深入探讨如何在Hibernate配置中设置与数据库字段的对应关系,以及...
当需要持久化某些来自第三方库的Java类型时,如果这些类型没有提供适当的getter和setter方法,可以考虑实现`org.hibernate.UserType`接口来定义自定义类型。这样可以在不修改原有类的情况下完成持久化任务。 #### ...
在使用Hibernate时,确保正确配置并包含必要的JAR(Java Archive)文件至关重要,因为这些库提供了框架运行所需的功能。下面我们将详细探讨Hibernate所需的JAR包及其作用。 1. **hibernate-core.jar**:这是...
在Hibernate中,动态添加属性的一个常见方法是使用动态扩展的Entity(Dynamic-Entity)。动态扩展Entity允许我们在运行时添加或移除属性,而无需重新编译和部署应用程序。这通常通过实现`org.hibernate.usertype....
Hibernate 是一个强大的 Java 持久化框架,它简化了数据库与对象之间的交互。通过提供一组丰富的API,Hibernate使得开发者能够在应用中轻松地管理和操作数据库数据。...理解并熟练使用这些接口是掌握Hibernate的关键。
在Hibernate中,使用`UserType`可以提升代码质量。`UserType`允许我们自定义数据类型的映射,以便更好地适应特定业务需求。 3. **自定义UserType实例**:例如,如果我们需要在`TUSER`表中存储用户的电子邮件,但不...
《Hibernate Annotations 中文文档》是针对Hibernate框架注解配置的详细指南,旨在帮助开发者更深入地理解和使用Hibernate的注解功能。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发人员将数据库...
11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 11.2.1 用客户化映射类型取代Hibernate组件 11.2.2 用UserType映射枚举类型 11.2.3 实现CompositeUserType接口 11.2.4 运行本节范例程序 11.3 ...
在Hibernate中,你可以通过实现UserType接口来自定义数据类型的映射,使非标准的Java类型能够被持久化。"BKBLX"可能是对“备份策略”的简称,表明这部分内容可能涉及到如何自定义类型以适应特定的备份需求。 7. **...
**hibernate3.2 API** 是一个针对Java开发者的重要框架,主要用于简化对象关系映射(ORM)的工作,使得在Java应用中操作数据库变得更加便捷。这个API提供了丰富的接口和类,帮助开发者将业务对象和数据库表之间的...