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

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

之前大概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.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,也就不在这里写总结了。


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






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值