使用Spring+MyBatis搭建项目的点滴知识梳理

来源:互联网 发布:数据字典作用是什么 编辑:程序博客网 时间:2024/06/06 00:44

又是一篇,作用于不让自己忘记已用知识的梳理文。

之前大概2个月的时间,为客户搭建了一套接口转换平台,项目全权交给我,所以我选择了Spring+MyBatis,尽管我真的在实际项目中使用过。。。吧。。。

首先摘出MyBatis单独总结:

1.使用MyBatis环境搭建的核心文件:mybatis3.2.0.jar。有这个jar包就够了,其它流程,不说了。

2.MyBatis的核心文件基本包含:

配置文件xml:(一般命名configrelation.xml ) 配置数据源、映射关系的核心文件。

实体类java:生成ORM中的Object的必需品。

映射文件xml:Object实体对应的xml文件,该文件中包含了所有针对该实体类的数据操作。

接口文件java:Mapper接口,与映射文件xml对应,接口中包含所有针对实体类的数据操作方法。

3.使用细节:

首先configrelation.xml文件中,跟节点<configuration></configuration>,其中<typeAliases>,用于映射实体类的节点。<mappers>,用于映射实体类对应xml文件的节点。

例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD SQL Map Config 3.0//EN"  "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><typeAliases>             <typeAlias alias="ITSCont" type="com.its.entity.ITSCont"/><span style="white-space:pre"></span></typeAliases><mappers>      <!-- 保单 -->      <mapper resource="mybatis/entity/ITSCont.xml"/> </mappers></configuration>


实体类例:

public class ITSCont{    /** 合同号码 */    private String ContNo;public String getContNo() {return ContNo;}public void setContNo(String contNo) {ContNo = contNo;}}


实体类的xml映射文件用于具体实现针对当前实体类的数据操作,其中包含一个<mapper>节点,用于映射对应的接口类,实现面向接口编程。其中包含字段列及类属性的映射标签<resultMap><result/></resultMap>,配置一个数据集,并通过column及property属性分别标记列名及类属性名,还可以使用jdbcType属性定义字段数据类型。使用<select><insert><delete><update>标签实现数据操作,使用过程中还包含一些动态控制标签如<if><else><foreach><set>等等,不做赘述。

例:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.its.mapper.ContMapper"><resultMap type="ITSCont" id="contMap"><result column="CONTNO" property="ContNo" jdbcType="VARCHAR" /></resultMap><select id="findContByContNo" resultType="ITSCont">select * from ITSCONT where CONTNO = #{ContNo}</select><delete id="deleteITSCont" parameterType="string">delete from ITSCONT where CONTNO = #{ContNo}  </delete><insert id="insertITSCont" parameterType="ITSCont">insert into ITSCont (CONTNO,PROPOSALCONTNO,PRTNO,CONTTYPE,MANAGECOM,AGENTCOM,AGENTCODE, AGENTGROUP,SALECHNL,PAYINTV,SIGNDATE,SIGNTIME,CURRENCY,MULT,PREM, AMNT,SUMPREM,CVALIDATE,SALECHNLDETAIL,INTERAGENTNAME, INTERAGENTCODE,INTERAGENTPHONE,CUSTOMERMANAGERCODE,PAYTODATE,BALAPREM) values (#{ContNo},#{ProposalContNo},#{PrtNo},#{ContType},#{ManageCom},#{AgentCom},#{AgentCode},#{AgentGroup},#{SaleChnl},#{PayIntv},#{SignDate},#{SignTime},#{Currency},#{Mult},#{Prem},#{Amnt},#{SumPrem},#{CValiDate},#{SaleChnlDetail},#{InterAgentName},#{InterAgentCode},#{InterAgentPhone},#{CustomerManagerCode},#{PaytoDate},#{BalaPrem jdbcType=NUMERIC}) </insert></mapper>


接口类主要实现了面向接口编程的设计思想,通过调用接口的数据操作方法实现对数据库的增删改查操作,无关实现。

例:

public interface ContMapper {/** * 单量保存保单数据 * @param itscont */public void insertITSCont(ITSCont itscont);/** * 批量保存保单数据 * @param itscont */public void insertITSCont(List<ITSCont> itscont);}

如上,基本描述了在Spring环境下使用MyBaits的过程及核心文件涉及,其中dataSource是在搭建Spring时,在其核心配置文件Application.xml中配置JDBC连接时实现的,下文再述。当然如果单独使用MyBatis,也可以在其核心配置文件configrelation.xml文件中,通过<transactionManager>和<dataSource>标签配置。

===========================================================================================================


接下来是在项目中使用到的Spring:

Spring本身,我理解是从众多项目中抽取出来的优点集成,众多设计模式、开发理念、设计思想的集合。在实际使用它的过程中,这种想法会贯穿始终。


只谈本次项目中用到的功能:

首先,Spring环境搭建:官网的jar文件,习惯性全部引入。Spring集成了众多功能包含:SPRING CORE 【IoC(Inversion of Control)或者叫DI(Dependency Injection)就在这里面了】,SPRING AOP,SPRING DAO, SPRING ORM ,SPRING WEB ,SPRING CONTEXT,SPRING MVC。各个功能有独立的jar文件可以单独使用单独引入。


其次,Spring的核心配置文件Application.xml。其中要配置的内容:

1.dataSource,配置项目的数据源。

2.serviceBEAN,通过配置实现控制反转。

3.aop:config,AOP的切面范围定义。

4.Spring+Mybatis一些集成配置,包含jdbc定义、sessionFactory获取等。

例:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">    <property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>   <property name="jdbcUrl" value="jdbc:oracle:thin:@**.*.**.***:****:*****"/><property name="user" value="lisopr"></property><property name="password" value="<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">*****</span><span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">"></property></span><property name="minPoolSize" value="<span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">*****</span><span style="font-size: 12px; font-family: Arial, Helvetica, sans-serif;">" /></span><property name="maxPoolSize" value="**" /><property name="maxIdleTime" value="*****" /><property name="acquireIncrement" value="**" /><property name="maxStatements" value="**" /><property name="initialPoolSize" value="**" /><property name="idleConnectionTestPeriod" value="***" /><property name="acquireRetryAttempts" value="***" /><property name="breakAfterAcquireFailure" value="true" /><property name="testConnectionOnCheckout" value="false" /></bean><bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">   <property name="dataSource" ref="dataSource"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:mybatis/config.xml"/></bean><bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg></bean><!-- 扫描 basePackage下所有的接口,根据对应的mapper.xml为其生成代理类--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.its.mapper" /></bean><bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">       <property name="dataSource" ref="dataSource"></property> </bean><aop:config><aop:pointcut id="pc" expression="execution(* com.its.services.service..*(..)) or execution(* com.its.client.service..*(..))"/><aop:advisor pointcut-ref="pc" advice-ref="txAdvice" /></aop:config></beans>

例文件中未包含service配置,可以通过一行

<import resource="ApplicationContext-service.xml"/>引入另一个单独配置service的xml配置文件,保证文件整洁可读性强。

例:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- C03保单登记控制 --><bean id="policyRegController" class="com.its.client.control.PolicyRegController" scope="prototype"/><bean id="policyRegService" class="com.its.client.service.impl.PolicyRegServiceImpl"/></beans>

然后,就是通过具体实现配置文件中的实现类,以控制反转的形式,实现面向接口编程,在实际开发过程中很少使用new出某个类去使用其方法,通常直接注入接口的实现对象,实现过程中直接调用接口方法。

例:

public class PolicyRegController {//记录日志@Resourceprivate ITSDataLogService itsDataLogService;//业务处理@Resourceprivate PolicyRegService policyRegService;public void policyReg(){ITSServiceLog itsServiceLog = policyRegService.policyReg();itsDataLogService.insertLog(itsServiceLog);}}

这里使用了@Resource注入,方式有多种,不描述。


最后,还使用的是SPRING AOP ,只是简单的使用,控制了数据操作的范围。即统一了事物管理。在核心配置文件中,定义了切面变成的范围包。通过<tx:method>配置切口,及异常处理方式。

例:

<tx:advice id="txAdvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="delete*" propagation="REQUIRED" read-only="false"            rollback-for="java.lang.Exception"/><tx:method name="insert*" propagation="REQUIRED" read-only="false"            rollback-for="java.lang.Exception" /><tx:method name="update*" propagation="REQUIRED" read-only="false"            rollback-for="java.lang.Exception" /><tx:method name="save*" propagation="REQUIRED" read-only="false"            rollback-for="java.lang.Exception" /><tx:method name="sync*" propagation="REQUIRED" read-only="false"            rollback-for="java.lang.Exception" /><tx:method name="*" propagation="REQUIRED" read-only="true"/></tx:attributes></tx:advice>


基本上,整个项目做完就使用了这么多东西,因为不涉及前台,没有在开发过程中使用SpringMVC,也就不在这里写总结了。


如上,慢慢回忆,慢慢收获....希望没有错。。。






0 0
原创粉丝点击