- 浏览: 365519 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (186)
- J2EE (46)
- spring (4)
- Applet (7)
- 网页前端 (10)
- 生活与工作 (55)
- 开放的世界 (10)
- linux (16)
- j2me (2)
- android (5)
- ExtJS (1)
- 架构师与设计 (7)
- 开发平台 (2)
- Eclipse (4)
- 教育 (0)
- 数据库 (9)
- English (1)
- Jetty (2)
- 未分类 (1)
- 工具 (2)
- flex (2)
- synchronized (1)
- maven (2)
- command (0)
- shell (1)
- web (1)
- qq (3)
- wine (3)
- chrome (1)
- extensions (1)
- plugin (1)
- 插件 (1)
- ssh (1)
- 内网 (1)
- J2EE excel (1)
- ubuntu (4)
- storm (2)
- hadoop (1)
最新评论
-
skzr.org:
jdbc:mysql://localhost:3306/?us ...
storm topology all in one spring文件合并 -
chenghong726:
你好,我用你这个方法,上传文件72M一直卡在 mapper.s ...
超大excel读取 43万记录 26M文件 -
海hai:
您好我对这篇文章很敢兴趣可以和你请教下吗?我qq9034418 ...
淘宝top自动授权页面,方便大家调试top应用 -
skzr.org:
首先感谢你的关注:)yaerfeng1989 写道最代码上有更 ...
[MAVEN]web工程的调试 -
skzr.org:
最新消息2013-12-17:腾讯再次弹出消息,我的QQ201 ...
ubuntu 12.04安装QQ2012
首先感谢您百忙之中的阅读 :)
下面进入正题
在3.6.3中UserType已经过时了,所以直接实现接口Type
使用jackson json实现的,希望可以交流相关的实现。
对于月表hibernate是不是也能实现crud?期待您的交流
- 数据库:
create table TEST ( id int, json1 varchar(100), json2 varchar(100) ) engine = innodb comment 'test';
- 类型定义:
public class Test { /** 标识 */ private Integer id; private JsonNode json1; private JsonNode json2; ... }
重点在这个类JsonNodeTypepublic class JsonNodeType extends AbstractType { private static final long serialVersionUID = 1L; protected static transient ILocalLogger logger = LocalLoggerFactory.getLogger(JsonNodeType.class); @Override public int[] sqlTypes(Mapping mapping) { return new int[] {StringType.INSTANCE.sqlType()}; } @Override public int getColumnSpan(Mapping mapping) { return 1; } @Override public Class<JsonNode> getReturnedClass() { return JsonNode.class; } @Override public boolean isDirty(Object oldState, Object currentState, boolean[] checkable, SessionImplementor session) { return !isSame(oldState, currentState, session.getEntityMode()); } @Override public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws SQLException { return nullSafeGet(rs, names[0], session, owner); } @Override public Object nullSafeGet(ResultSet rs, String name, SessionImplementor session, Object owner) throws SQLException { return toJsonNode(StringType.INSTANCE.nullSafeGet(rs, name, session)); } @Override public void nullSafeSet(PreparedStatement st, Object value, int index, boolean[] settable, SessionImplementor session) throws SQLException { StringType.INSTANCE.nullSafeSet(st, toJsonStr(value), index, settable, session); } @Override public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws SQLException { StringType.INSTANCE.nullSafeSet(st, toJsonStr(value), index, session); } @Override public void setToXMLNode(Node node, Object value, SessionFactoryImplementor factory) { StringType.INSTANCE.setToXMLNode(node, toJsonStr(value), factory); } @Override public String toLoggableString(Object value, SessionFactoryImplementor factory) { return StringType.INSTANCE.toLoggableString(toJsonStr(value), factory); } @Override public Object fromXMLNode(Node xml, Mapping factory) { return StringType.INSTANCE.fromXMLNode(xml, factory); } @Override public String getName() { return "jsonNode"; } @Override public Object deepCopy(Object value, EntityMode entityMode, SessionFactoryImplementor factory) { return value == null ? null : toJsonNode(value.toString()); } @Override public boolean isMutable() { return false; } @Override public Object replace(Object original, Object target, SessionImplementor session, Object owner, @SuppressWarnings("rawtypes") Map copyCache) { if (original == null) return null; if (original.equals(target)) return target; return toJsonNode(original.toString()); } @Override public boolean[] toColumnNullness(Object value, Mapping mapping) { return StringType.INSTANCE.toColumnNullness(value, mapping); } } /** json操作 */ public static final ObjectMapper JSON_MAPPER = new ObjectMapper(); static { JSON_MAPPER.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false); JSON_MAPPER.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); JSON_MAPPER.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); } /** * json对象转化为字符串 * @param value json对象 * @return */ public static String toJsonStr(Object value) { try { return JSON_MAPPER.writeValueAsString(value); } catch (IOException e) { throw new IllegalArgumentException(logger.getText(I10NFramework.convertJsonFail, value), e); } } /** * String转化为JsonNode对象 * @param value * @return JsonNode */ public static JsonNode toJsonNode(String value) { try { return value == null ? null : JSON_MAPPER.readValue(value, JsonNode.class); } catch (IOException e) { throw new IllegalArgumentException(logger.getText(I10NFramework.convertJsonFail, value), e); } }
- hbm配置:
<class name="Test" table="TEST"> <id name="id"/> <property name="json1" type="jsonNode"/> <property name="json2" type="jsonNode"/> </class>
- spring配置:typeDefinitions中配置的typeName=jsonNode对应hbm中的type=jsonNode
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.show_sql">${hibernate.show_sql}</prop> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <prop key="hibernate.jdbc.fetch_size">${hibernate.jdbc.fetch_size}</prop> <prop key="hibernate.jdbc.batch_size">${hibernate.jdbc.batch_size}</prop> <prop key="hibernate.connection.autocommit">${jdbc.autoCommit}</prop> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> </props> </property> <property name="typeDefinitions"> <list> <bean class="org.springframework.orm.hibernate3.TypeDefinitionBean"> <property name="typeName" value="jsonNode"/> <property name="typeClass" value="org.skzr.framework.dao.model.JsonNodeType"/> </bean> </list> </property> <property name="mappingLocations"> <list> <value>${hibernate.mappingLocations}</value> </list> </property> </bean>
- 经过测试一切OK
@Test public void testJsonType() { List<Test> funs = baseDao.loadAll(Test.class); Assert.assertFalse(funs.isEmpty()); for (Test fun : funs) { ((ObjectNode) fun.getJson1()).put("abc", 123); ((ObjectNode) fun.getJson2()).put("abc2", "123"); } baseDao.saveOrUpdateAll(funs); }
总结:目前基本没有遇到其他问题。
参考:
jackson json官网
jackson json引号问题:别人的问题
hibernate官网:5.2.3. Custom value types 和 6.4. Custom types
发表评论
-
答复: 再谈一个关于final的不一致编译的低级错误
2012-09-25 09:13 1077tlde_ti 写道 我是觉得连依赖管理工具都不用的项目实在 ... -
[MAVEN]web工程的调试
2011-12-18 21:48 4106接上篇:[MAVEN]maven最佳实践 mav ... -
[jetty]jetty学习
2011-12-27 16:19 2535Jetty源码学习 图源码:jetty.dia ... -
[jetty]start.jar启动
2011-12-27 16:16 2747概图 关键点 org.eclipse.jetty ... -
在java中怎样执行系统命令?
2011-12-05 00:12 0linux比较容易实现,windows下问题千奇百怪。 ... -
[MAVEN]maven最佳实践
2011-12-06 11:00 2234参考资料: 官方:http://maven.ap ... -
java点滴
2011-11-25 00:18 0main静态方法调用: 意思的在method ... -
[java]synchronized我的理解
2011-11-18 21:56 1816多线程、同步、锁,搞 ... -
tomcat攻略
2011-07-23 10:51 6885以下是常见的tomcat配置和问题 以下总结来自实践(OS: ... -
[web工程]Struts2+Spring3.1+Hibernate3.6的集成
2011-05-20 00:32 2020背景:如果选择struts2+Spring+Hibernate ... -
[web工程]集成struts2 mvc
2011-05-20 00:30 2165返回:[web工程]Struts2+Spring3 ... -
[web工程]集成hibernate
2011-05-20 00:28 1472返回:[web工程]Struts2+Spring3.1+ ... -
[web工程]创建web工程
2011-05-19 21:30 1964返回:[web工程]Struts2+Spring3.1+Hib ... -
[分享][Hibernate]公用DAO
2011-05-15 23:27 1968通过Hibernate的元信息处理组件等等,利用spring封 ... -
hibernate和jdbc加载对象性能
2011-05-03 21:49 1985skzr.org 写道 core2 P8400 ... -
java远程调用通讯协议比较
2011-04-12 16:11 1525我的测试: 环境: 使用spring做为粘合剂 ... -
svn经验
2011-03-30 12:55 1429一下内容摘录自自己的wiki,所以链接可能有问题! 目录 ... -
完善包注释[javadoc package-info.java]
2011-03-27 14:03 6474包级注释 说明: 包级注释,有时候是非常有用的,可以清晰的 ... -
Tomcat7新特性?cookie HttpOnly的那些事(sessionid获取麻烦了)
2011-03-26 10:46 13207环境: tomcat6和tomcat7, ... -
weblogic部署应用
2011-02-16 19:59 1175weblogic部署应用 weblogic 1 怎样 ...
相关推荐
Hibernate.3.6.3.chm是根据hibernate-distribution-3.6.3.Final中的javadocs,使用chm文档生成工具 生成的chm格式的帮助文档
【标题】"Hibernate 3.6.3 入门程序" 【内容详解】 Hibernate 是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在数据库中操作对象的简便方法。Hibernate 3.6.3是该框架的一个稳定版本,提供了许多...
以下将详细介绍Python 3.6.3版本中的重要知识点: 1. 字典类型改进:Python 3.6引入了有序字典(insertion-ordered dictionaries),这意味着字典中的元素将按照它们被插入的顺序来迭代。这一特性在后续版本中得到...
最新Hibernate 3.6.3 API
Hibernate3 框架,免费下载 Hibernate 是一个开放源代码的对象关系映射框架, 它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系, 是一个全自动的 orm 框架,hibernate 可以自动生成SQL语句,...
在这个“Hibernate 3.6.7.Final.rar”压缩包中,包含的是Hibernate 3.6版本的源代码,这个版本在当时是一个稳定且广泛使用的版本。 在Hibernate 3.6中,有几个重要的知识点值得深入探讨: 1. **对象关系映射(ORM...
hibernate-c3p0.jar 各个版本,免费下载 C3PO JDBC 连接池工具
在本文中,我们将深入探讨Maven 3.6.3版本的关键特性、工作原理以及如何利用它进行项目构建。 **一、Maven 3.6.3 版本特点** 1. **性能提升**:Maven 3.6.3对内部算法进行了优化,提高了依赖解析和构建速度,降低...
文档制作不易,请尊重劳动成果,python 3.6.3中文手册
3. **自定义安装选项**:在安装过程中,用户可以选择自定义安装路径、是否添加Python到系统环境变量、是否创建桌面快捷方式等。 4. **安装组件**:Python 3.6.3通常会包含Python解释器、标准库、pip(包管理器)等...
maven资源包3.6.3
通过下载、编译和安装Python 3.6.3源码包,开发者可以深入了解Python的内部工作原理,并根据特定需求进行自定义配置,以满足特定环境或项目的需求。同时,这也是学习Python内核和C语言扩展的良好实践。
- **类型注解(Type Annotations)**:3.6版本对类型注解的支持更加强大,有助于静态类型检查和代码理解。 2. **性能提升**: - **字典优化**:Python 3.6对字典进行了内部优化,使其在插入和查找操作上速度更快...
apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-maven-3.6.3-bin。apache-...
【PORTAL页面自定义配置】是SANGFOR WAC V3.6.3版本中的一项重要功能,允许管理员根据自身需求调整用户在接入无线网络时所看到的认证页面的外观和内容。以下是对该配置手册内容的详细解读: 1. **修改页面Logo**: ...
11.1.2 Java时间和日期类型的Hibernate映射类型 11.1.3 Java大对象类型的Hibernate映射类型 11.1.4 JDK自带的个别Java类的Hibernate映射类型 11.1.5 使用Hibernate内置映射类型 11.2 客户化映射类型 ...
- 在安装向导中,你可以选择自定义安装路径,推荐将Python添加到系统路径,以便在命令行中直接使用Python和pip。 - 检查是否勾选“Add Python to PATH”,这会自动将Python添加到系统的PATH环境变量中。 - 完成...
在实际应用中,LineCount3.6.3可以帮助开发者追踪代码的增长情况,发现可能的冗余或过度注释问题。对于团队协作来说,它能定期提供项目进度的量化反馈,使团队成员对各自的工作量有清晰的认识。对于管理者,这些数据...