`
jstudio
  • 浏览: 8636 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

使用Jorm处理特殊字段

 
阅读更多
> 引言
有时候我们有这样的需求,对象有一个属性可能有多个值,需要在数据库中作为一个字段存储

还是以User为例,career存储多个职业

> 建表
以MySQL为例,执行下面的sql建立数据表
CREATE TABLE `t_user` (               
        `id` int(11) NOT NULL,              
        `name` varchar(50) DEFAULT NULL,    
        `sex` char(4) DEFAULT NULL,         
        `age` int(11) DEFAULT NULL,         
        `career` varchar(100) DEFAULT NULL, 
        PRIMARY KEY (`id`)                  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

> 代码
实体类 User.java
@Entity(table = "t_user")
@PK(value = "id")
public class User implements Serializable {

    /** desc */
    private static final long serialVersionUID = -4750351638245912867L;

    @Id
    private int id;

    private String name;

    private String sex;

    private Integer age;

    @Basic(processor=DefinedFieldProcessor.class)
    private String[] career;

    @NoColumn
    private int kvalue;

    public JawaUser() {
        super();
    }

    public JawaUser(String name, String sex, Integer age, String[] career) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.career = career;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String[] getCareer() {
        return career;
    }

    public void setCareer(String[] career) {
        this.career = career;
    }

    public int getKvalue() {
        return kvalue;
    }

    public void setKvalue(int kvalue) {
        this.kvalue = kvalue;
    }

    public String toString() {
        return "User [age=" + age + ", career=" + Arrays.toString(career)
                + ", id=" + id + ", kvalue=" + kvalue + ", name=" + name
                + ", sex=" + sex + "]";
    }
}


属性字段处理类 DefinedFieldProcessor.java

import java.lang.reflect.Field;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.javaclub.jorm.Session;
import org.javaclub.jorm.common.CommonUtil;
import org.javaclub.jorm.common.Reflections;
import org.javaclub.jorm.jdbc.process.FieldProcessor;

public class DefinedFieldProcessor implements FieldProcessor {

    public Object insert(Session session, Object entity, Field field) {
        String[] crs = (String[]) Reflections.getFieldValue(entity, field);
        if(!CommonUtil.isEmpty(crs)) {
            StringBuilder sbf = new StringBuilder();
            for (int i = 0; i < crs.length; i++) {
                if(i > 0) {
                    sbf.append(",");
                }
                sbf.append(crs[i]);
            }
            return sbf.toString();
        }
        return "";
    }

    public void load(Session session, Object entity, Field field, ResultSet rs,
            int idx) throws SQLException {
        String str = rs.getString(idx);
        String[] crs = str.split(",");
        Reflections.setFieldValue(entity, field, crs);
    }

}

> 测试

import org.javaclub.jorm.Jorm;
import org.javaclub.jorm.Session;
import org.javaclub.jorm.common.Numbers;
import org.javaclub.jorm.common.Strings;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

public class FieldProcessorTest {

    static Session session;

    @BeforeClass
    public static void setUpBeforeClass() {
        session = Jorm.getSession();
    }

    @AfterClass
    public static void destroy() {
        Jorm.free();
    }

    @Test
    public void test_save() {

        session.clean(User.class);
        User u;
        for (int i = 0; i < 100; i++) {
            String sex = (i % 2 == 0 ? "男" : "女");
            String[] cr = {};
            if(i % 3 == 0) {
                cr = new String[] {Strings.fixed(2), Strings.random(5), Strings.fixed(6)};
            } else if(i % 3 == 1) {
                cr = new String[] {Strings.fixed(2), Strings.random(5)};
            } else {
                cr = new String[] {Strings.fixed(2)};
            }
            u = new User(Strings.fixed(6), sex, Numbers.random(100), cr);
            session.save(u);
        }

        for (int i = 0; i < 10; i++) {
            u = session.read(User.class, i + 1);
            System.out.println(u);
        }
    }
}

Jorm项目地址:http://javaclub.sourceforge.net/jorm.html
0
0
分享到:
评论

相关推荐

    jorm-1.0.7.GA-javadoc

    jorm-1.0.7.GA-javadoc

    JORM_2.9_bin

    JORM的核心特性之一是它支持EJB 2.0 Container Managed Persistence (CMP),这是Java企业版(J2EE)中的一项重要规范,用于处理Java实体Bean的持久性。通过JORM,开发者可以将Java对象轻松地映射到数据库表,简化了...

    p4jorm 1.0.1版本

    P4JORM,全称为“Perforce JORM”,是一款专为Java应用程序设计的对象关系映射(ORM)框架,它旨在简化数据库操作,通过提供一个高级接口来处理SQL查询和数据持久化。在P4JORM 1.0.1版本中,主要修复了一个与Java ...

    p4jorm 1.0.3版本

    随着新版本的发布,官方文档应该也得到了相应的更新,对新增功能和改进进行了详细的解释,以便开发者更好地理解和使用P4JORM 1.0.3。 7. **兼容性增强**: P4JORM 1.0.3可能增强了对不同JVM版本、数据库系统以及...

    p4jorm 1.6编译版本

    开始那个版本是1.7,有些同学遇到“java.lang.UnsupportedClassVersionError: Bad version ”问题,如果是jdk 1.6,请用此版本,或者自己编译一个,因为已发布源码

    jorm轻量级的orm框架

    不用写sql啦,不用创建表啦,一个比mybatis更轻量级,比hibernate好用的orm!

    java轻量级ORM实现-jorm (Just ORM)

    This project is based on Java, is a lightweight ORM model. Only concerned about the Object-Relationl Mapping, therefore more simple and easier to use, easier to control. Key support functions and ...

    p4jorm 源码 文档 示例

    你还写jdbc呢?还在反复HQL拼写工作?p4jorm让你无需写一行代码,即可进行CURD,真正的简单易学。本人用了3天时间完成,还请各位多多指点 http://blog.csdn.net/partner4java/article/details/8559661 ...

    jorm-unit:JUnit扩展可协助服务器外自动化JPA测试

    "Java" 标签明确了这个工具是为Java开发者设计的,特别是那些使用JPA(Java Persistence API)来处理数据库操作的项目。JPA是Java EE(现在称为Jakarta EE)的一部分,提供了一种标准的方式来映射对象关系模型(ORM...

    java OR-Mapper-开源

    在描述中提到,该OR-Mapper坚持使用简单的Pojo(Plain Old Java Object)或者处理复杂的对象图。Pojo是指没有任何特殊框架依赖或注解的普通Java对象,它们易于理解和维护。通过ORM,这些Pojo可以直接与数据库表对应...

    92个经典开源项目集锦

    McKoi, Xindice, OJB, Hibernate, Castor, Torque, JORM, XMLBeans, JiBX, JAXB Reference Implementation, JaxMe**:这些是数据库访问和对象关系映射(ORM)工具,它们帮助开发者在 Java 应用中更方便地处理数据库...

    面向对象设计 PPT

    其间,也诞生了许多优秀的MVC框架,如专注于控制层的Struts、WebWork, Struts2, JSF等框架,专注于业务逻辑方面的Spring框架、专注于持久层的Hibernate、iBatis、Castor、JORM等框架。由于最近用了一次SSI框架,因此...

    最近收到的书

    特殊父母的孩子。 纽约:霍沃斯出版社,1983 年,109 页,20.00 美元。 弗兰克,M.(主编)。 美国新移民:儿童和家庭。 纽约:霍沃斯出版社,1983 年,98 页,19.95 美元。 HUBBARD, LR 工作问题。 洛杉矶:Bridge ...

    HealthDeterminants:健康可视化的社会决定因素

    健康的决定因素 健康的社会决定因素的开源可视化。 参考 NCHHSTP健康的社会决定因素。 (2014)。 检索自2016年3月14日,从检索 健康的决定因素。...和Jorm,L.(2010年12月)。 公共卫生分类项目(共和

Global site tag (gtag.js) - Google Analytics