usertype的详细解释和使用实例
java 代码
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.SQLException;
-
- import net.sf.hibernate.HibernateException;
-
-
-
-
-
- public interface UserType {
-
-
-
-
-
-
-
- public int[]sqlTypes();
-
-
-
-
-
-
- public Class returnedClass();
-
-
-
-
-
-
-
-
-
-
-
- public boolean equals(Object x,Object y)throws HibernateException;
-
-
-
-
-
-
-
-
-
-
-
-
-
- public Object nullSafeGet(ResultSet rs,String[] names,Object owner)throws HibernateException,SQLException;
-
-
-
-
-
-
-
-
-
-
-
- public void nullSafeSet(PreparedStatement st,Object value,int index)throws HibernateException,SQLException;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- public Object deppCopy(Object value)throws HibernateException;
-
-
-
-
-
-
- public boolean isMutable();
- }
1.实现UserType接口的EMailList自定义类型
java 代码
- 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;
-
-
-
-
-
- public class EMailList implements UserType {
- private List emails;
- private static final String SPLITTER = ";";
- private static final int[] TYPES = new int[]{
- Types.VARCHAR
- };
-
-
-
- public int[] sqlTypes() {
-
- return TYPES;
- }
-
-
-
-
- public Class returnedClass() {
-
- return List.class;
- }
-
-
-
-
- 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;
- }
-
-
-
-
- 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;
- }
- }
-
-
-
-
- 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);
- }
-
- }
-
-
-
-
- public Object deepCopy(Object value) throws HibernateException {
- List sourcelist = (List)value;
- List targetlist = new ArrayList();
- targetlist.addAll(sourcelist);
- return targetlist;
- }
-
-
-
-
- public boolean isMutable() {
-
- 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:
java 代码
- import java.io.Serializable;
- import java.util.List;
-
-
-
-
-
-
- public class UserTypeUser implements Serializable {
- private Long id;
- private String name;
- private Integer age;
- private List email = new ArrayList();
-
-
-
-
-
-
- public Long getId() {
- return id;
- }
-
-
-
-
-
- public Integer getAge() {
- return age;
- }
-
-
-
-
-
-
- public List getEmail() {
- return email;
- }
-
-
-
-
-
- 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 代码
- <?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.运用:
java 代码
- 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));
- }
- }
- }
分享到:
相关推荐
本资源“商业编程-源码-VC开发工具使用技巧源代码 usertype.zip”包含了一组与VC开发相关的源代码,旨在帮助开发者深入理解和掌握VC开发工具的实用技巧。 1. **VC开发环境设置**:VC不仅仅是一个编译器,它还包括一...
- JavaBean负责数据操作和业务逻辑,虽然未使用接口,但接口的引入有助于提高代码的可维护性和可扩展性。 综上所述,这个Java Web综合实例展示了如何运用相关技术构建一个实际的图书管理系统,涵盖了Web开发的核心...
`customfieldsdemo`这个文件很可能是示例代码的压缩包,包含了一个演示如何实现上述步骤的实例。解压后,你可以查看源码,学习如何在具体项目中应用动态属性。 总结一下,本例子展示了如何在Hibernate中动态添加...
Axios 使用拦截器统一处理所有的 HTTP 请求的方法 ...本文将详细介绍 Axios 使用拦截器统一处理所有的 HTTP ...本文提供了详细的介绍和实例代码,希望对大家有所帮助。如果大家有任何疑问,请随时留言,我将尽快回复。
例如,在提供的代码示例中,定义了一个名为`UserType`的枚举类型,该枚举包含了五个不同的用户类型:学生(`STUDENT`)、教师(`TEACHER`)、家长(`PARENT`)、学校管理员(`SCHOOL_ADMIN`)和未知类型(`UNKNOWN`...
在本实例“Listwidget控件实例1”中,我们将深入探讨`QListWidget`的使用方法,以及如何在实际应用中有效地利用它。 `QListWidget`是Qt库中的一个类,它继承自`QWidget`,并且实现了`QAbstractItemView`的接口。这...
3. **自定义UserType实例**:例如,如果我们需要在`TUSER`表中存储用户的电子邮件,但不想为每个邮箱创建单独的记录,可以使用`UserType`将多个邮箱地址存储在一个`VARCHAR`字段内,以分号分隔。自定义的`Email`类...
合理的命名、避免使用模糊的特殊值、合理使用变量与常量、正确编写SQL语句以及有效地利用宏和自定义函数都是提升SQL编程质量的关键要素。希望这些规范能帮助您在日常工作中编写出更加高效且易于维护的SQL代码。
本文将详细介绍thinkPHP框架中多层控制器和多级控制器的使用,结合实例分析其结构、原理及使用方法。 首先需要了解的是,在ThinkPHP中,控制器是负责接收用户的请求并调用模型和视图完成用户请求处理的任务。而多层...
在开发过程中,可以结合PyQt的文档和示例代码加深理解,同时也可以参考像老猿Python这样的博客资源,获取更多实践经验和技巧。 总结一下,QTreeWidgetItem.ItemType和QListWidgetItem.ItemType是PyQt中用于区分项...
FAQ可能包含了开发者在使用MFC时遇到的常见问题及其解决方案,而MFCFAQ40.ZIP可能是一个压缩包,里面包含了更详细的文档、示例代码或者其他有助于理解MFC的资料。这些资源对于初学者来说极其宝贵,因为它们提供了...
2. org.hibernate.SessionFactory Interface:从该接口中获得 Session 实例,具备多线程安全和重量级特点,一个数据库对应一个 SessionFactory,其创建及销毁消耗资源多。 3. org.hibernate.Session Interface:和...
在这个示例中,我们定义了两个DjangoObjectType类,分别对应 `User` 和 `Blog` 模型。同时,我们还定义了输入类型 `UserInput` 和 `BlogInput`,以及两个Mutation类 `CreateUser` 和 `CreateBlog`,用于创建新的用户...
5. **动态链接库(DLL)**:MFC支持创建和使用DLL,源代码可能包含示例,展示了如何创建MFC DLL并与其他MFC应用程序交互。 6. **ActiveX和COM**:MFC提供了对COM(Component Object Model)的支持,源代码可能包含...
在实际应用中,通常会结合使用这些语句,如示例所示,从游标中读取数据并输出。 其次,存储过程(Stored Procedure)是一组预先编译的SQL语句,可以在需要时重复调用,以提高性能和简化代码。存储过程可以包含输入...
### 使用JDBC访问数据库 #### 一、JDBC概述及MySQL连接 JDBC(Java Database ...以上是使用JDBC访问数据库的一个完整示例,包括数据库和表的创建、基本的CRUD操作以及更高级的MVC分层设计和用户认证功能。
Oracle数据库是企业级广泛使用的数据库管理系统,本文将围绕Oracle笔试中的核心知识点进行详尽的阐述,帮助备考者全面理解和掌握Oracle的相关概念和技术。 首先,Oracle数据库的逻辑结构包括方案、对象、数据块、...
下面将详细介绍这个类的结构、功能和使用方法。 首先,从代码中可以看出,这个类采用单例模式设计,确保在整个应用中只有一个`include_purview`类的实例存在。通过定义`getInstance()`方法,我们可以获取到这个唯一...
9.4.2 使用脱管的实体实例 9.5 在EJB组件中使用Java Persistence 9.5.1 注入EntityManager 9.5.2 查找EntityManager 9.5.3 访问EntityManagerFactory 9.6 小结 第10章 事务和并发 ...