- 浏览: 200868 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ouyangshixiong:
...
秒杀Eclipse查看Jar包源码乱码问题 -
cs6641468:
WatchKey都没有reset,第二次loop妥妥的捕获不到 ...
Java7 使用WatchService监听文件变化 -
ck_2036:
...
秒杀Eclipse查看Jar包源码乱码问题 -
asialee:
复杂对象就需要使用framedecorator了
Netty对象传输
Mybatis3的资源优先,官方除了用户指南之外,没有别的资料。源码中的单元测试也没有完整的覆盖业务。
遇到这样的问题,在一个JavaBean中,有一个Map属性,希望这个属性可以映射到Table中的一列。
public class TaskEntity implements Task, Serializable, PersistentObject { protected Map<String, String> properties = new HashMap<String, String>(); public String getProperty(String key) { return properties.get(key); } public void setProperty(String key, String value) { properties.put(key, value); } }
希望properties可以映射 column="EXECUTION_ID_"。
很明显,需要实现一个TypeHandler,将这个实现命名为 MapTypeHandler
public class MapTypeHandler implements TypeHandler<Map<String, String>> { private static JsonBinder binder = JsonBinder.buildNonDefaultBinder(); @Override public Map<String, String> getResult(ResultSet rs, String columnName) throws SQLException { String value = rs.getString(columnName); return binder.fromJson(value, Map.class); } @Override public Map<String, String> getResult(CallableStatement cs, int columnIndex) throws SQLException { String value = cs.getString(columnIndex); return binder.fromJson(value, Map.class); } @Override public void setParameter(PreparedStatement ps, int i, Map<String, String> parameter, JdbcType jdbcType) throws SQLException { if (parameter == null) { ps.setNull(i, Types.VARCHAR); } else { ps.setString(i, binder.toJson(parameter)); } } }
setParameter是在Jdbc insert,update会调用到的方法。getResult是在Jdbc select会调用到的方法。
MapTypeHandler中的逻辑很简单,就是用json将Map进行序列化和反序列化,将json格式的内容存储在 column="EXECUTION_ID_"中。
我们有了MapTypeHandler之后,怎么让他在转换类型时生效呢?
答案就是配置类型映射。配置javaType="java.util.Map"与jdbcType="VARCHAR"之间的转换,使用MapTypeHandler。这个配置要写入mappings.xml中。
<configuration> <settings> <setting name="lazyLoadingEnabled" value="false" /> </settings> <typeHandlers> <typeHandler handler="com.apusic.bpm.engine.persistence.MapTypeHandler" javaType="java.util.Map" jdbcType="VARCHAR" /> </typeHandlers> <mappers> <mapper resource="com/apusic/bpm/db/mapping/entity/Task.xml" /> </mappers> </configuration>
最后一步就是配置Entity具体的信息,Task.xml中Insert,Update,resultMap中,只要指定property="properties" column="EXECUTION_ID_" javaType="java.util.Map" jdbcType="VARCHAR",系统就会调用MapTypeHandler进行类型映射。
<mapper namespace="com.apusic.bpm.engine.task.impl.TaskEntity"> <!-- TASK INSERT --> <insert id="insertTask" parameterType="com.apusic.bpm.engine.task.impl.TaskEntity"> insert into ACT_RU_TASK (EXECUTION_ID_) values ( #{properties, jdbcType=VARCHAR, javaType=java.util.Map} ) </insert> <update id="updateTask" parameterType="com.apusic.bpm.engine.task.impl.TaskEntity"> update ACT_RU_TASK <set> EXECUTION_ID_ = #{properties, jdbcType=VARCHAR, javaType=java.util.Map} </set> </update> <resultMap id="taskResultMap" type="com.apusic.bpm.engine.task.impl.TaskEntity"> <result property="properties" column="EXECUTION_ID_" javaType="java.util.Map" jdbcType="VARCHAR"/> </resultMap></mapper>
发表评论
-
Netty对象传输
2013-03-06 15:45 3140转自:http://www.xiaoyaochong.ne ... -
Java ArrayBlockingQueue源码解析
2013-03-01 17:43 4825转自:http://www.xiaoyaoch ... -
Eclipse常用快捷键
2013-03-01 15:10 967Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ct ... -
Java7 TransferQueue入门实例
2013-03-01 10:10 2674转自:http://www.xiaoyaochong.ne ... -
Java7 使用WatchService监听文件变化
2013-02-26 13:56 8969Watch service 用来观察被注册了的对象的变化和 ... -
Java7 AutoCloseable入门实例
2013-02-26 10:03 5024本文转自:http://www.xiaoyaochong. ... -
Java7 ForkJoin入门实例
2013-02-19 10:37 10029本文转自:http://www.xiaoyaochong. ... -
EclipseLink 2.4新特性
2013-01-17 16:55 1617RESTFul持久化 使用SJON和XML媒介,通过RE ... -
影响MySQL性能的主要因素
2013-01-17 14:09 2185业务需求对MySQL性能的影响 应用系统中的每一个功能在 ... -
MySQL架构
2013-01-16 10:18 2468麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构 ... -
Memcached分布式结构和Consistent Hashing算法
2013-01-10 09:38 1472本文转自:http://www.xiao ... -
Java原子变量与ABA问题(转发)
2013-01-07 23:12 4388原文地址:http://www.xiaoyaochong.ne ... -
Java简单迭代器例子
2013-01-04 14:18 3864一直好奇Foreach的语法,想ArrayList和HashM ... -
Java NIO实例
2012-12-28 09:48 1567一个可运行的简单NIO实例,首先是一个抽象的服务端类Abstr ... -
Java NIO选择器Selector
2012-12-27 13:07 1611Selector消息选择器一般作为SelectableChan ... -
MySQL存储引擎
2012-12-25 12:14 1026MySQL插件式存储引擎体 ... -
Java Channel解析与实例
2012-12-24 16:09 1318文件IO FileChannel是处理 ... -
MySQL资料汇总
2012-12-21 09:47 803官方参考手册:http://dev.mysql.com/doc ... -
Java Comparable接口分析与实践
2012-12-20 14:22 1342此接口对实现它的每个类的对象进行整体排序。这种排序被称为类的自 ... -
PHP远程调用Java服务
2012-12-18 14:16 2389一种比较常见的语言搭配:PHP + Java。 整体架构时这 ...
相关推荐
在SpringBoot和Mybatis的集成应用中,我们经常需要处理数据映射,特别是从数据库查询结果转换成Java对象。在Java编程中,驼峰命名法(Camel Case)是常用的变量和方法命名规则,它使得代码更易读、更符合编程规范。...
Springboot 中 MyBatis 表关联映射关系(一对一) 在 Springboot 中,MyBatis 提供了强大的表关联映射关系机制,可以实现一对一、多对一、多对多等各种关联关系。在本文中,我们将详细介绍 Springboot 中 MyBatis ...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。在MyBatis中,SQL映射文件起着至关重要的作用,它是连接数据库和Java代码的桥梁,允许开发者灵活地控制SQL语句的编写。本文将深入探讨...
传统的MyBatis默认会将每一行数据的字段名作为Key,字段值作为Value存入Map,但这并不适用于多条数据的情况,因为相同字段名的Key可能会覆盖之前的值。在这种情况下,我们可以利用MyBatis提供的ResultHandler接口来...
这个map当中的property的定义,是我们在定义ResultHandler的时候,需要用到的.column是我们做sql查询的时候mysql中字段的名称,注意这里不支持驼峰自动映射,例如这里写了commodityCode,后面需要用AS来处理一下。...
注解只有一个属性,即`value`,用来指定映射到Map的键所对应的字段名。 例如,假设我们有一个需求,批量查询数据库中的记录,每个记录包含`id`和`name`两个字段。如果我们直接返回`Map, Object>`,那么Mybatis会将...
下面是一个简单的`resultMap`示例,展示了如何将数据库的`STUDENT_ID`、`STUDENT_NAME`和`STUDENT_SEX`字段映射到`StudentEntity`类的相应属性: ```xml ``` 接下来,我们讨论在MyBatis中实现CRUD操作: ...
一个示例的Mybatis映射文件片段如下: ```xml <select id="getUser" resultType="java.util.Map" parameterType="java.lang.String" statementType="STATEMENT"> SELECT ${columns} FROM ${tableName} WHERE ...
在循环中,我们通过遍历`dataMap`的key来构造动态的字段名,这将在MyBatis的映射文件中使用。 ```java // 构建动态字段 for (String key : dataMap.keySet()) { lineColumn += key + ","; } // 添加id字段,假设id...
在这个映射中,`resultMap`定义了一个`Blog`对象,包含了`authorID`和`authorName`字段,并通过`collection`标签映射了一对多关系,即每个作者有多篇博客,每篇博客由`Post`对象表示。 ### 三、获取自增主键 ...
MyBatis支持自动映射(基于字段名称相似性)和手动映射(通过resultMap元素定义)。 8. **缓存机制**:MyBatis提供了本地缓存和二级缓存,可以提高数据访问效率。本地缓存作用于单个SqlSession,而二级缓存则可以在...
3. 自动映射:MyBatis可以自动将数据库字段名与Java对象的驼峰命名属性进行映射。 三、动态SQL MyBatis的动态SQL功能非常强大,可以在XML映射文件中使用条件语句、foreach循环等,灵活构建SQL语句。例如,`<if>`,`...
- 利用反射、内省等底层技术,自动将实体与表进行属性与字段的映射。 ### 3. Mybatis框架设计 #### 3.1 核心组件 Mybatis框架的核心组件包含以下几个部分: - `SqlSessionFactoryBuilder`:用来构建`...
在MyBatis-Plus框架中,查询结果可以返回实体对象或Map,选择哪种方式取决于具体的应用场景和需求。MyBatis-Plus是一个基于MyBatis的扩展工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它...
在Mybatis中,结果集映射是用于将数据库查询的结果转换为Java对象的过程。自动映射功能使得这一过程更为便捷,无需显式地编写复杂的resultMap配置。在某些情况下,我们只需要简单地指定`resultType`属性,Mybatis就...
-- 这里添加Light对象的字段映射 --> <!-- 其他Light对象的属性映射... --> <select id="selectH5ListByDeployId" resultMap="jxhJSZBH5ListMap"> <!-- SQL查询语句,获取与Car关联的所有Light对象 --> ``...
结果集映射则通过`<result>`标签定义字段与Java属性的对应关系,确保查询结果能够正确地转化为实体对象。 六、动态SQL MyBatis的强大力量之一是其动态SQL功能。通过`<if>`, `<choose>`, `<when>`, `<otherwise>`, `...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
这是因为MyBatis已经根据`<result>`标签进行了字段映射,再次在查询语句中指定相同的别名会导致混乱。 为了避免这类问题,我们应该遵循以下最佳实践: 1. 当使用Map接收查询结果时,考虑处理null值的情况,或者在...