springmvc camel mybatis集成实例及分析 (一)

2014-11-24 11:54:52 · 作者: · 浏览: 14

最近在学习camel,公司之前做过的项目使用到了camel进行了很多工作。就连数据库的操作也是通过camel来完成的。至于用camel来操作数据库有什么优点,目前就我自己的体会来说,利用camel能简化CRUD操作service层的代码。没用camel以前,各个对象的CRUD操作我都会有对应的service去处理。即使这些service很多都只是简单地继承一个CrudServcie然后用泛型限制一下该service处理的实体对象。这样service的接口和实现类看上去很多,但是重复率极高。如果使用了camel,那么我们就可以用camel来写一个通用的service,这样不管你是什么实体类的操作,只要传入类型和要调用的方法名就可以了。由于涉及到公司机密,所以我不会贴出成熟的源代码,但是我可以提供一个自己的列子。我想只要从这个列子出发,稍作改进就能达到上文所提的效果。


例子的架构是这样的:springmvc camel mybatis
依赖由maven来管理,其pom.xml的内容请下载列子源代码查看。
springmvc的配置就不用贴出来了,随处可见。
这里重点讲一下spring跟配置文件里的一些配置项目,尤其是下面这一段:
[html]

destroy-method="close">







class="org.springframework.jdbc.datasource.DataSourceTransactionManager">














destroy-method="close">





class="org.springframework.jdbc.datasource.DataSourceTransactionManager">













需要注意的是最后一项的配置,通过MyBatisComponent类,camel就知道如何通过用户设置的路由来和mybatis进行交互了。这个MyBatisComponent实现了camel的component接口,至于component接口是用来干什么的,可以参考我的博文或者去查看官方手册。其实你可以把component简单里理解为camelContext和其他系统通信的标准,不同的系统实现了component接口,就可以通过这个接口实现用camel标准API进行通信。
这里需要注意的是,MyBatisComponent有一个configurationUri属性,他的默认值为SqlMapConfig.xml,也就是说在默认情况下MyBatisComponent会去加载类路径下的SqlMapConfig.xml去初始化一些配置和用户编写的mapper文件,你当然可以修改这个默认行为,怎么修改呢?通过property注入你的配置文件位置呗。这里需要指出的是,之前我们单独使用mybatis的时候,一种方式是定义一个mapper接口,然后在对应的mapper.xml中将该mapper问价的namespace设置为mapper接口的全路径,这样在运行时,mybatis会利用mapper.xml生成的代理类来作为mapper接口的实现类为程序提供数据访问层的服务。那么我们使用MyBatisComponent来和数据库交互的时候,还要不要定义mapper接口呢?事实证明,我们不再需要定义mapper接口,我们只需要实现mapper.xml即可,那么MyBatisComponent是如何加载到我们所实现的mapper.xml的呢?我们只要在SqlMapConfig.xml中指定我们的mapper.xml文件即可。本实例代码的SqlMapConfig.xml文件内容如下所示:
[html]
< xml version="1.0" encoding="UTF-8" >
http://mybatis.org/dtd/mybatis-3-config.dtd">











< xml version="1.0" encoding="UTF-8" >
http://mybatis.org/dtd/mybatis-3-config.dtd">







我们再看看UserMapper.xml的内容:
[html]
< xml version="1.0" encoding="UTF-8" >
http://mybatis.org/dtd/mybatis-3-mapper.dtd" >











id,password,email,show_name,real_name
]]>



INSERT INTO kf_user (
id ,
password ,
email ,
real_name
) VALUES
]]>

(
#{item.id} ,
#{item.password} ,
#{item.email} ,
#{item.realName}
)
]]>




INSERT INTO kf_user (
id ,
password ,
email ,
real_name
) VALUES (
#{id} ,
#{password} ,
#{email} ,
#{realName}
)
]]>



UPDATE kf_user SET
password = #{password} ,
email = #{email} ,
real_name = #{realName} ,
WHERE
id = #{id}
]]>



DELETE FROM kf_user_role
WHERE
user_id = #{userId}
]]>


< xml version="1.0" encoding="UTF-8" >
http://mybatis.org/dtd/mybatis-3-mapper.dtd" >







id,password,email,show_name,real_name
]]>


INSERT INTO kf_user (
id ,
password ,
email ,
real_name
) VALUES
]]>

(
#{item.id} ,
#{item.password} ,
#{item.email} ,
#{item.r