Spring MVC+MyBatis开发从入门到项目实战,Spring+Spring MVC+MyBatis整合开发实战 pdf

  Spring MVC+MyBatis开发从入门到项目实战,Spring+Spring MVC+MyBatis整合开发实战 pdf

  最近公司经过对camel的研究,在之前的项目中使用camel做了很多工作。连数据库的操作都是由camel来完成的。至于使用camel操作数据库的优势,目前从我自己的经验来看,使用camel可以简化CRUD操作服务层的代码。在使用camel之前,我会有相应的服务来处理每个对象的CRUD操作。尽管这些服务中有许多只是简单地继承了一个CrudServcie,然后用泛型来限制服务所处理的实体对象。这种服务的接口和实现类很多,但是重复率极高。如果使用了camel,那么我们就可以用camel写一个通用服务,这样不管你操作的是什么实体类,传入类型和要调用的方法名称就可以了。因为涉及公司机密,我就不贴成熟的源代码了,但是我可以提供自己的清单。我觉得只要从这个清单出发,做一些改进,就能达到上述效果。

  bean id= my data source destroy-method= close

  属性名=driverClassName 值=com.mysql.jdbc.Driver /

  property name= URL value= JDBC:MySQL://localhost:3306/test?characterEncoding=utf-8 /

  属性名=用户名值=根/

  属性名=密码值=fanly /

  属性名称=defaultAutoCommit 值=false /

  /bean

  bean id=transactionManager

  属性名= data source ref= my data source /

  /bean

  bean id=sqlSessionFactory

  属性名= data source ref= my data source /

  属性名=configLocation 值=classpath:SqlMapConfig.xml /

  /bean

  bean id=必需

  属性名称= transaction manager ref= transaction manager /

  属性名称=propagationBehaviorName 值=PROPAGATION_REQUIRED /

  /bean

  bean id=mybatis

  属性名= sqlSessionFactory ref= sqlSessionFactory /

  /bean

  !-数据源配置结束-

  注意最后一项的配置。通过mybatisComponent类,camel知道如何通过用户设置的路线与MyBatis进行交互。这个MyBatiscomponent实现了camel的组件接口。至于组件接口是做什么用的,可以参考我的博文或者查看官方手册。实际上,你可以简单地把组件理解为camelContext和其他系统之间的通信标准。不同的系统实现了组件接口,所以可以通过这个接口与camel标准API进行通信。

  这里需要注意的是,MyBatisComponent有一个configurationUri属性,它的默认值是SqlMapConfig.xml,也就是说,默认情况下,MyBatisComponent会在类路径下加载sqlmapconfig.xml来初始化用户编写的一些配置和映射器文件。当然,您可以修改这个默认行为,如何修改呢?通过属性注入您的配置文件位置。这里需要指出的是,之前我们单独使用mybatis时,有一种方法是定义一个mapper接口,然后在对应的mapper.xml中设置mapper要价的命名空间作为mapper接口的完整路径,这样在运行时,mybatis就会使用mapper.xml生成的代理类作为mapper接口的实现类,为程序提供数据访问层服务。那么当我们使用MyBatisComponent与数据库交互时,是否需要定义mapper接口呢?事实证明,我们不再需要定义mapper接口,我们只需要实现mapper.xml,那么MyBatisComponent如何加载到我们已经实现的mapper.xml中呢?我们只需要在SqlMapConfig.xml中指定我们的mapper.xml文件。此示例代码的SqlMapConfig.xml文件的内容如下:

  ?xml版本=1.0 编码=UTF-8 ?

  !DOCTYPE配置PUBLIC -//mybatis . org//DTD Config 3.0//EN http://mybatis . org/DTD/mybatis-3-Config . DTD

  配置

  设置

  设置name= cache enabled value= true /

  /设置

  地图绘制者

  映射器资源= com/u garden/mapper/user mapper . XML /

  /地图绘制者

  /配置

  ?xml版本=1.0 编码=UTF-8 ?

  ! DOCTYPE Mapper PUBLIC -//mybatis . org//DTD Mapper 3.0//EN http://mybatis . org/DTD/mybatis-3-Mapper . DTD

  映射器命名空间= com。u花园。知识库。用户映射程序

  结果映射id= user result type= com。u花园。实体。用户

  结果属性=id 列=id /

  结果属性=电子邮件列=电子邮件/

  结果属性=真实姓名列=real_name /

  结果属性=密码列=密码/

  /结果映射

  sql id=列

  ![CDATA[

  身份证,密码、电子邮件、显示姓名、真实姓名

  /sql

  insert id= batchInsertUsers 参数type= list useGeneratedKeys= false

  ![CDATA[

  插入到kf _用户(

  id,

  密码,

  电子邮件,

  真实姓名

  )值

  foreach collection= list item= item separator=,

  ![CDATA[

  #{item.id},

  #{item.password},

  #{item.email},

  #{item.realName}

  /foreach

  /插入

  插入id=insert 参数type= com。u花园。实体。用户 useGeneratedKeys= false 密钥属性= id

  ![CDATA[

  插入到kf _用户(

  id,

  密码,

  电子邮件,

  真实姓名

  )值(

  #{id},

  # {密码},

  # {电子邮件},

  #{realName}

  /插入

  更新id=update 参数Type=com.ugarden.entity.User

  ![CDATA[

  更新kf _用户集

  密码=# {密码},

  email=#{email},

  real_name=#{realName},

  在哪里

  id=#{id}

  /更新

  删除id= deleteUsersRolesById 参数Type=string

  ![CDATA[

  从kf _用户_角色中删除

  在哪里

  user_id=#{userId}

  /删除

  /映射器

  我们在这里也设置了命名空间= com。u花园。知识库。用户映射器,但是我的项目里是没有对应的接口的,这里不设置会不会出问题在写本文的时候还没有试验。写上总是好些,免得让人感到迷茫。

  User User=new User();

  用户。设置电子邮件( fanly 系统。当前时间millis() @ 126。com’);

  用户。设置密码( 123456 );

  用户。setid(字符串。(系统的值。当前时间毫秒()));

  user.setRealName(张双);

  换进来=这个。骆驼语境。获取端点(“direct:start”).createExchange(ExchangePattern .InOut);

  in.getIn().setBody(用户);

  换出来=这个。生产者模板。发送(我的batis:插入?statementType=Insert ,in);

  if (null!=out.getException()) {

  扔出去。get异常();

  }

  略懂骆驼的童鞋们立马就明白了,这里首先通过骆驼语境获取到一个端点,然后获取到输入过程的交换对象,由于数据的来源是我们程序提供的,所以端点的上呼吸道感染就设置为直接:开始。然后将我们要添加的用户对象添加到消息对象的身体中,再将我们的消息对象路由到数据库中,我们是通过生产者模板对象向骆驼语境对象发出消息的,路由信息附加在了第一个参数中,即mybatis:插入?语句类型=插入如果你不懂这个参数的意思,去骆驼官方看看骆驼-麦巴蒂斯的说明就明白了。这句的意思大概就是告诉骆驼语境对象,我要通过框架这个成分对象调用一个名叫插入的方法,该方法的声明类型为插入类型,将消息对象身体里的数据插入到数据库。

  你可能会问,你这个服务里面的生产模板,骆驼上下文是哪里来的,为什么你通过一个mybatis:插入?语句类型=插入参数,骆驼上下文就知道要去找那个成分来进行路由呢?

  !-骆驼语境inti -

  camel上下文id= camel trace= true xmlns= http://camel。阿帕奇。组织/架构/春天

  package com.ugarden /package

  /骆驼上下文

  骆驼语境就是这样来的,春天一启动的时候他就存在了,如果你有多个骆驼语境实例的时候,你就要用编号来区分注入了。

  那生产者模板是哪里来的呢?刚开始我也纠结这个问题,最后看了一下骆驼语境的createProducerTemplate的方法注释,发现它是和骆驼语境一起初始化的,这样就能解释为什么春天能帮我们注入了。

  那骆驼如何知道mybatis:插入?语句类型=插入中框架指的是哪个呢?您还记得这段配置吗?

  bean id=mybatis

  属性名= sqlSessionFactory ref= sqlSessionFactory /

  /bean

  你看看他的ID,我想如果有多个数据源的时候,我再做如下配置:

  bean id=mybatis1

  属性名= sqlSessionFactory ref= sqlSessionFactory /

  /bean

  那么我能通过“我的batis1:insert”吗?语句类型=插入。怎么这样路由?不试试不知道吗?我写完了就试试看。camel官方的uri支持范围里绝对没有mybatis1这种东西。

  现在回到文章开头的问题,如何通过camel做一个统一的服务层?很简单。我们只需要要调用的方法的名称,以及要路由到数据库的主体中的对象。难道它不能通过作为参数传入来适应所有的变化吗?从现在开始,我们只需要通过数据表生成下面的mapper.xml,感谢特殊的sql。只要是数据库的操作,我们都可以通过camel实现的一个超服务类来完成。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • kotlon协程,深入理解kotlin协程pdf,一文彻底搞懂Kotlin中的协程
  • 深入解析C#(第4版),深入解析css pdf,深入解析contentWindow, contentDocument
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf
  • java 反射机制原理与用法详解视频,java 反射机制原理与用法详解pdf,Java 反射机制原理与用法详解
  • ,,Java使用iTextPDF生成PDF文件的实现方法
  • ,,Python利用PyMuPDF实现PDF文件处理
  • 漫画算法小灰的算法之旅pdf,漫画算法2-小灰的算法进阶
  • devops和自动化运维实践 PDF,devops思想在运维方面的具体实践
  • pdf如何去除水印,pdf去水印的三种方法
  • 把a4的内容打印成a3小册子,a4的pdf文档如何打印成a3
  • nlp自然语言处理入门pdf,精通python自然语言处理 pdf
  • 容器docker基本操作,每天5分钟玩转docker容器技术 pdf
  • sklearn中文手册pdf下载,sklearn库模块及函数
  • 留言与评论(共有 条评论)
       
    验证码: