- 浏览: 200443 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
ouyangshixiong:
...
秒杀Eclipse查看Jar包源码乱码问题 -
cs6641468:
WatchKey都没有reset,第二次loop妥妥的捕获不到 ...
Java7 使用WatchService监听文件变化 -
ck_2036:
...
秒杀Eclipse查看Jar包源码乱码问题 -
asialee:
复杂对象就需要使用framedecorator了
Netty对象传输
先吐槽几句,Mybatis的官方文档就只有那一篇User Guide,加上源码覆盖的例子和单元测试,里面覆盖的知识点最多只有7成,剩下的3成功能如果需要用到,那就悲剧了,需选择了看源码,多花一点时间,记得得到巩固,何乐而不为呢。
我的实体对象如下所示。
public class ProcessDefinition {
private String id; private String key; private String name; private long version; private String description; private String language; private ProcessDefinitionResourceMapping mapping; private ProcessDefinitionState state; public ProcessDefinition(String id, String key, String name, Long version, String description, ProcessDefinitionResourceMapping mapping) { super(); this.id = id; this.key = key; this.name = name; this.version = version; this.description = description; // FIXME 现在只支持bpmn this.language = "bpmn"; this.mapping = mapping; this.state = ProcessDefinitionState.UNPUBLISH; } } public class ProcessDefinitionResourceMapping { private String processDefinitionPath; private Set<String> resourcePaths = new HashSet<String>(); public ProcessDefinitionResourceMapping(String processDefinitionPath, Set<String> resourcePaths) { super(); this.processDefinitionPath = processDefinitionPath; this.resourcePaths = resourcePaths; } }
上面的符合对象,想要存储在一个数据库表中。而且映射和数据参数传递都是通构造方法。怎么实现insert和select呢?
- insert
经过大胆的猜测,居然给我猜中了,可以通过 . 调用引用对象的属性,这里没有跟进源码去看到底使用反射,还是get方法。
per namespace="com.apusic.bpm.engine.definition.ProcessDefinition"> <insert id="insertProcessDefinition" parameterType="com.apusic.bpm.engine.definition.ProcessDefinition"> insert into ABPM_RE_PROCESS_DEFINITION (ID_, KEY_, NAME_, VERSION_, DESCRIPTION_, LANGUATE_, PROCESS_DEFINITION_PATH_, RESOURCE_PATHS_, PROCESS_DEFINITION_STATE_) values (#{id,jdbcType=VARCHAR}, #{key, jdbcType=VARCHAR}, #{name, jdbcType=VARCHAR}, 1, #{description, jdbcType=VARCHAR}, #{language, jdbcType=VARCHAR}, #{mapping.processDefinitionPath, jdbcType=VARCHAR}, #{mapping.resourcePaths, jdbcType=VARCHAR, javaType=java.util.Set}, #{state, jdbcType=VARCHAR, javaType=com.apusic.bpm.engine.definition.ProcessDefinitionState}) </insert>
输入的属性映射,在DefaultParameterHandler中进行逻辑处理,感兴趣的童鞋可以跟一下。
- select
比较痛苦的是查询,折腾了好久,通过如下的设置可以完成功能。
<resultMap id="processDefinitionResultMap" type="com.apusic.bpm.engine.definition.ProcessDefinition"> <constructor> <idArg column="ID_" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="KEY_" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="NAME_" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg column="VERSION_" jdbcType="INTEGER" javaType="java.lang.Long" /> <arg column="DESCRIPTION_" jdbcType="VARCHAR" javaType="java.lang.String" /> <arg javaType="com.apusic.bpm.engine.definition.ProcessDefinitionResourceMapping" resultMap="resourceMappingResultMap" /> </constructor> </resultMap> <resultMap id="resourceMappingResultMap" type="com.apusic.bpm.engine.definition.ProcessDefinitionResourceMapping"> <constructor> <arg column="PROCESS_DEFINITION_PATH_" jdbcType="VARCHAR" javaType="java.lang.String"/> <arg column="RESOURCE_PATHS_" jdbcType="VARCHAR" javaType="java.util.Set" /> </constructor> </resultMap>
Mybatis通过NestedResultSetHandler,起到一个构造和映射的功能,将jdbc查询到的ResuleSet,进行resultMap对象的构造,传参。更详细的构造和传参构成,是在它的父类FastResultHandler中进行的,createParameterizedResultObject方法负责构造映射对象,并映射<constructor>属性,applyPropertyMappings负责映射属性<result>。再吐槽几句,svn拉下来的源码一句注视也没有,是作者没写映射,还是故意不暴露呢。
还发现了一个问题。<constructor>中使用resultMap的时候,resultMap的<result/>配置对父级别中的<constructor>不起效,进过调试,发现在构造对象之后,源码没有进入applyPropertyMappings进行属性赋值,在就想到郁闷了,如果在这个情景中,我只能通过<constructor>赋值。没确定是不是BUG。
发表评论
-
Netty对象传输
2013-03-06 15:45 3134转自:http://www.xiaoyaochong.ne ... -
Java ArrayBlockingQueue源码解析
2013-03-01 17:43 4812转自:http://www.xiaoyaoch ... -
Eclipse常用快捷键
2013-03-01 15:10 964Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ct ... -
Java7 TransferQueue入门实例
2013-03-01 10:10 2669转自:http://www.xiaoyaochong.ne ... -
Java7 使用WatchService监听文件变化
2013-02-26 13:56 8957Watch service 用来观察被注册了的对象的变化和 ... -
Java7 AutoCloseable入门实例
2013-02-26 10:03 5019本文转自:http://www.xiaoyaochong. ... -
Java7 ForkJoin入门实例
2013-02-19 10:37 10017本文转自:http://www.xiaoyaochong. ... -
EclipseLink 2.4新特性
2013-01-17 16:55 1613RESTFul持久化 使用SJON和XML媒介,通过RE ... -
影响MySQL性能的主要因素
2013-01-17 14:09 2178业务需求对MySQL性能的影响 应用系统中的每一个功能在 ... -
MySQL架构
2013-01-16 10:18 2464麻雀虽小,五脏俱全。MySQL虽然以简单著称,但其内部结构 ... -
Memcached分布式结构和Consistent Hashing算法
2013-01-10 09:38 1468本文转自:http://www.xiao ... -
Java原子变量与ABA问题(转发)
2013-01-07 23:12 4385原文地址:http://www.xiaoyaochong.ne ... -
Java简单迭代器例子
2013-01-04 14:18 3858一直好奇Foreach的语法,想ArrayList和HashM ... -
Java NIO实例
2012-12-28 09:48 1539一个可运行的简单NIO实例,首先是一个抽象的服务端类Abstr ... -
Java NIO选择器Selector
2012-12-27 13:07 1603Selector消息选择器一般作为SelectableChan ... -
MySQL存储引擎
2012-12-25 12:14 1020MySQL插件式存储引擎体 ... -
Java Channel解析与实例
2012-12-24 16:09 1310文件IO FileChannel是处理 ... -
MySQL资料汇总
2012-12-21 09:47 798官方参考手册:http://dev.mysql.com/doc ... -
Java Comparable接口分析与实践
2012-12-20 14:22 1336此接口对实现它的每个类的对象进行整体排序。这种排序被称为类的自 ... -
PHP远程调用Java服务
2012-12-18 14:16 2384一种比较常见的语言搭配:PHP + Java。 整体架构时这 ...
相关推荐
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以将你从繁琐的JDBC代码中解放出来,让你更专注于SQL本身,...
MyBatis是一个优秀的持久层框架,支持普通的SQL查询、存储过程以及高级映射。其主要功能包括消除JDBC代码和参数的手工设置以及结果集的检索工作。MyBatis使用简单的XML或注解进行配置和原始映射,可以将接口和Java的...
通过配置XML映射文件或注解,MyBatis可以将Java对象与数据库表中的记录进行映射,实现了数据的CRUD(Create、Read、Update、Delete)操作。例如,当用户发布一条新动态时,MyBatis可以帮助将这个动态对象存入数据库...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Spring则是一个全方位的应用框架,提供依赖注入(DI)、面向切面编程(AOP)等...
本文将详细讲解基于Flutter开发的混合电影App以及其后端架构,主要涉及Spring Boot、MyBatis和MySQL数据库的相关知识。 首先,让我们从Flutter开始。Flutter是Google推出的一款开源跨平台移动应用开发框架,它使用...
1. **Model**:模型层通常由Java实体类(Entity)组成,这些类代表数据库中的表或对象。MyBatis通过Mapper接口和XML配置文件或注解来处理数据库操作,实现数据的增删查改。 2. **View**:视图层由JSP页面构成,它们...
Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mapper.xml文件是Mybatis的核心组件,它包含了数据库操作的SQL语句和映射规则。 在处理字符串形式的多选参数时,我们通常会先在服务层将...
在本文中,我们将深入探讨如何将MyBatis集成到SpringBoot框架中,以...在实际项目中,可以根据需求进一步优化配置,比如使用Spring Data JPA和MyBatis的混合模式,或者利用Spring Boot的自动配置功能来简化更多步骤。
4. **Mybatis**:Mybatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。Mybatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。Mybatis可以使用简单的XML或注解进行配置和原始映射,将...
- **ORM与MyBatis对比**:对象关系映射(ORM)是一种编程技术,用于将对象模型与关系型数据库模型相互转换,而MyBatis提供了更灵活的解决方案,允许开发者直接编写SQL语句。 #### 三、数据库操作(CRUD) - **核心...
MyBatis是一个优秀的Java持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
在本项目"电商网站Java+mybatis+mysql.rar"中,开发者使用了Java作为主要的后端编程语言,MyBatis作为持久层框架,以及MySQL作为数据库系统来构建一个电商网站。这个项目虽未采用前后端分离的架构,但包含了购物车、...
MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 【MySql】 MySQL是一个开源的关系型数据库管理系统,广泛应用于互联网...
在这个项目中,Servlet、JSP(JavaServer Pages)和JDBC(Java Database Connectivity)是主要的技术栈,而MyBatis作为ORM(对象关系映射)框架,简化了数据库操作。 **Servlet**: Servlet是Java Web开发中的核心...
在这个基础框架中,MySQL作为数据存储后端,配合MyBatis进行数据查询和更新。 **JSP** JavaServer Pages (JSP) 是一种用于创建动态Web页面的技术,它将HTML和Java代码混合在一起,使开发者能够方便地在服务器端生成...
【标题】"基于Spring+SpringMvc+Mybatis+Mysql的单体项目,前端技术使用jsp单车共享租用系统.zip" 描述了一个完整的Web应用程序开发框架,它利用了Java生态系统中的核心技术和组件来构建一个单车共享租用系统。...
MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。在CicadasCMS中,MyBatis用于处理数据库操作,通过XML或注解方式定义SQL语句,与Java对象进行绑定,提高了数据库访问的灵活性和可维护性。 ...
**对象持久化**是指将对象的状态信息(即对象的数据成员)保存到某种持久性存储介质(如硬盘、磁盘等)上的过程。这种方式可以确保即使在应用程序关闭后,对象的状态仍然能够被保留下来,并在需要时重新加载。在Java...
Hibernate通过对象关系映射(Object-Relational Mapping,ORM)技术,将Java对象与数据库表对应起来,使得开发者无需直接编写SQL语句,即可进行数据的增删查改操作。这大大提高了开发效率,同时也降低了数据库操作的...