又是一篇,作用于不让自己忘记已用知识的梳理文。
之前大概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 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.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://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 {
//记录日志
@Resource
private ITSDataLogService itsDataLogService;
//业务处理
@Resource
private 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,也就不在这里写总结了。
如上,慢慢回忆,慢慢收获....希望没有错。。。