`

浅谈MyBatis及与Spring的整合

阅读更多

MyBatis作为持久化层的一个ORM实现,完成了对象模型到关系数据模型之间的转换,协调了对象模型和关系模型之间的不协调,其减少了以往以jdbc编程的大部分代码量,使得应用开发者将注意力集中到业务逻辑层代码的编写,大大提高了工作效率。
MyBatis是一种半自动化的持久层框架,除了常规的配置文件外,域对象的映射文件了,还有通过插件完成最终SQL映射的辅助功能,如分页拦截插件,映射文件中定义了一系列的动态SQL,每个预定义的SQL语句之上都有相应的入参和最终的返回结果,根据运行时的传入的参数,判断其属性便可以动态完成SQL语句的生成,进而产生需要的结果集。
从域对象到最终的返回,需要定义结果集映射,SQL映射,结果集映射中定义了域对象和关系数据行之间的映射关系,确定的定义了基于java对象的属性和基于关系模型的数据列之间的映射,以便于在检索出原始的结果集后,利用反射技术将其精确合成目标实体对象;
动态SQL的定义,也是约定大于配置的方式,MyBatis映射文件中关于映射文件中的元素的DTD声明中规定了在其映射文件中只能以以下顺序定义约定数量的元素,如可以定义0个或者多个resultMap及其它提及元素。
如 一个常见的MyBatis映射文件如下:
假定域对象模型为:

public class DomainData{
	 private Integer id;

	 private String name;

	 private java.util.Date birthday;

	 private AuthUser createBy;

	 //省略setters and getters

	}

 

<mapper namespace="DomainData">
	   
		   <resultMap id="DomainData_Result" type="DomainData">
			   <result property="id column="ID" jdbcType ="NUMERIC" />
			   <result property="name" column="NAME" jdbcType="VARCHAR" />
			   <result property="birthday" column="BIRTHDAY" jdbcType="TIMESTAMP"/>
			   <association property="createBy" column="CREATE_BY" select="AuthUser.queryById"/>
		   </resultMap>

		   <!-- 新增 -->
		   <insert id="insert" parameterType="DomainData">
			   <selectKey resultType="java.lang.Integer" keyProperty="id" order="BEFORE">
				      SELECT SEQ_DOMAIN_DATA.nextual from dual
			   </selectKey>
			   insert into DOMAIN_DATA(
				   ID,
				   NAME,
				   BIRTHDAY,
				   CREATE_BY
				   )
			   VALUES
				   (
				   #{id,jdbcType=NUMERIC},
				   #{title,jdbcType=VARCHAR},
				   #{birthday,jdbcType=TIMESTAMP},
				   #{createBy.id,jdbcType=NUMERIC}
				   )
		   </insert>

		   <!-- 修改 -->
		   <update id="update" parameterType="DomainData">
			   update DOMAIN_DATA
			   <set>
			       <if test="name!=null">
				    NAME=#{name,jdbcType=VARCHAR},
			       </if>
			       <if test="birthday!=null">
				    BIRTHDAY = #{birthday,jdbcType=TIMESTAMP},
			       </if>
			       <if test="createBy != null and createBy.id != null" >
				    CREATE_BY=#{createBy.id,jdbcType=NUMERIC},
			       </if>
			    </set>
			    WHERE 
				ID = #{id,jdbcType=NUMERIC}
		    </update>

		    <!-- 物理删除 -->
		    <delete id="delete" parameterType="java.lang.Integer">
			delete from DOMAIN_DATA where ID = #{id,jdbcType=NUMERIC}
		    </delete>

		    <!-- 逻辑删除 -->
		    <delete id="logicDelete" parameterType="java.lang.Integer">
			update DOMAIN_DATA set ENABLE_FLAG=0 where ID = #{id,jdbcType=NUMERIC}
		    </delete>

		    <!-- 查询全部 -->
		    <select id="query" parameterType="FeedbackData" resultMap="FeedbackData_Result">
			SELECT 
				*
			FROM DOMAIN_DATA
			<where>
				<if test="id != null" >
					AND ID=#{id,jdbcType=NUMERIC}
				</if>
				<if test="name != null" >
					AND NAME like  CONCAT(CONCAT('%', #{name}), '%')
				</if>
				<if test="birthday != null" >
					AND BIRTHDAY=#{birthday,jdbcType=TIMESTAMP}
				</if>
				<if test="isHandle != null" >
					AND CREATE_BY=#{createBy,jdbcType=VARCHAR}
				</if>
			</where>
		    </select>
	</mapper>

   映射文件示例完毕,下来演示Spring对其的整合;

    1、在Spring的配置文件中,配置数据源,BasicDataSource,DriverManagerDataSource

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
			<property name="driverClassName">
				<value>${jdbc.driverClassName}</value>
			</property>
			<property name="url">
				<value>${jdbc.url}</value>  //该值来自于placeHolder
			</property>
			<property name="username">
				<value>${jdbc.username}</value>
			</property>
			<property name="password">
				<value>${jdbc.password}</value>
			</property>
		</bean>

  2、配置SqlSessionFactoryBean

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="dataSource" />
			<!-- 指定sqlMapConfig总配置文件,订制的environment在spring容器中不在生效-->
			<property name="configLocation">
				<value>classpath:SqlMapConfig.xml</value>    //mybatis的配置文件路径 其中是对MyBaits性能的一些调优和设置加载项,以及插件的配置(分页插件)
			</property>
			<property name="typeAliasesPackage">   //别名的java实体包路径
				<value>
					com.demo.www.test.bo
				</value>
			</property>
			<!-- 读取mybatis配置文件 -->
			<property name="mapperLocations">     //映射文件的路径
		    <list>
			<value>classpath*:mapper/**/*.xml</value>
		    </list>
		</property>
		</bean>

   3.配置MyBatis持久层操作模板类(采用构造及进行注入)

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
			<constructor-arg index="0" ref="sqlSessionFactory" />
		</bean>

  4。事务的配置 (采用声明式事务,将核心业务逻辑和事务处理逻辑剥离,高内聚、低耦合)

<!-- 事务配置 -->
		<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		     <property name="dataSource" ref="dataSource" />
		</bean>

		<tx:annotation-driven transaction-manager="transactionManager" />
		<!-- 强制使用cglib代理 如果为false则spring会自动选择-->
		<aop:aspectj-autoproxy proxy-target-class="true" />

	        <!-- 使Spring关注Annotation -->
                <context:annotation-config/>

  5、持久层Mybatis操作模板引用的注入完成相关DAO任务

分享到:
评论

相关推荐

    Mybatis与Spring整合所需的jar包

    mybatis与spring整合时所依赖的jar包,包括: 1.Mybatis所需的jar包括: ant-1.9.6.jar ant-launcher-1.9.6.jar asm-5.2.jar cglib-3.2.5.jar commons-logging-1.2.jar javassist-3.22.0-CR2.jar log4j-...

    mybatis与spring整合的全部jar包

    以上就是关于“mybatis与spring整合的全部jar包”的详细知识点,这些组件共同构建了一个灵活且易于维护的Java Web应用程序。通过理解这些概念和技术,开发者可以更好地理解和使用SSM框架来开发复杂的企业级应用。

    mybatis与spring整合全部jar包

    这个“mybatis与spring整合全部jar包”包含了这三个框架整合所需的所有依赖库,使得开发者可以快速搭建SSM项目。 首先,让我们深入了解一下这三个组件: 1. **Spring**:Spring 是一个全面的Java企业级应用开发...

    mybatis-spring 整合jar包

    mybatis-spring 整合jar包,Spring和MyBatis环境整合mybatis-spring-1.1.1

    Spring整合Mybatis与SpringBoot整合Mybatis原理分析

    将Spring与Mybatis整合,可以充分利用两者的优点,构建出高效、灵活的Web应用。 1. **Spring整合Mybatis的基本步骤** - **引入依赖**: 在项目的pom.xml中添加Spring和Mybatis的相关依赖。 - **配置数据源**: ...

    mybatis与spring整合全部jar包,

    mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,

    mybatis-spring 整合包

    MyBatis-Spring 整合包是专门为将MyBatis持久层框架与Spring应用框架集成而设计的一个组件。这个包的出现旨在简化MyBatis在Spring环境中的配置和使用,使得开发者可以充分利用两者的优点,实现更加灵活和方便的数据...

    spring_mybatis 整合jar包

    在Java开发领域,Spring框架和MyBatis框架的整合是常见的数据访问技术组合。Spring作为一个全面的开源应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,而MyBatis则是一个轻量级的持久层框架,专注于SQL...

    mybatis3与Spring整合官方中文版.pdf

    ### MyBatis与Spring的整合知识点详解 #### 一、MyBatis-Spring简介 **1.1 什么是MyBatis-Spring?** MyBatis-Spring是一个专门为简化MyBatis与Spring框架集成而设计的工具包。通过该工具包,开发者能够轻松地将...

    mybatis3+spring4完美整合jar包

    在IT行业中,MyBatis和Spring是两个非常重要的框架,它们分别专注于持久层操作和依赖注入及应用上下文管理。将这两个框架整合在一起可以提供一个高效、灵活且易于维护的开发环境。本压缩包"mybatis3+spring4完美整合...

    完整mybatis3.0.6与spring3.0整合例子

    MyBatis 3.0.6 是一个流行的Java持久层框架,它简化了与数据库的交互,而Spring 3.0则是一个全面的企业级应用框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能。将这两个框架整合在一起可以实现更高效、...

    Mybatis与Spring整合创建Web项目

    在IT行业中,Mybatis与Spring的整合是常见的开发模式,特别是在构建Web项目时。这种整合提供了灵活的数据访问层,使得数据库操作与业务逻辑更加解耦。以下是对"Mybatis与Spring整合创建Web项目"这一主题的详细说明:...

    Mybatis2.3和Spring3.2.8整合(带注解)

    【Mybatis2.3与Spring3.2.8整合(带注解)】 在Java Web开发中,Mybatis和Spring的整合是常见的实践,尤其是在基于注解的开发环境中。本篇将详细介绍如何将Mybatis 3.2.7与Spring 3.2.8进行整合,同时提供了一个...

    mybatis与spring整合全部jar包(包括springmvc

    3. **Spring与MyBatis整合**:整合MyBatis和Spring主要是为了利用Spring的IoC容器管理MyBatis的SqlSessionFactory和SqlSessionTemplate,以及Mapper接口和Mapper XML文件。通过Spring的`SqlSessionFactoryBean`和`...

    mybatis-3.2.7 包含spring整合包

    `mybatis-spring-1.1.1.jar` 是 MyBatis 与 Spring 框架的整合包,它使得 MyBatis 能够无缝地融入到 Spring 的 IoC 容器中,提供了以下功能: 1. 事务管理:Spring 提供的声明式事务管理可以应用于 MyBatis 的数据...

    mybatis和spring整合jar包

    MyBatis与Spring的整合通常涉及到以下几个关键步骤: 1. **配置Spring的ApplicationContext**:在Spring的配置文件中,我们需要声明MyBatis的SqlSessionFactoryBean,指定数据源和MyBatis的配置文件。 2. **定义...

    Spring3+springmvc+mybatis三大整合

    在"Spring3+SpringMVC+MyBatis"的整合过程中,通常会使用Spring的ApplicationContext来加载配置,管理所有组件。SpringMVC的配置需要定义DispatcherServlet,配置视图解析器如InternalResourceViewResolver,以及...

    spring整合Mybatis

    在IT行业中,Spring框架与Mybatis的整合是常见的企业级应用开发模式,它结合了Spring的强大功能和Mybatis的灵活性,使得数据访问更加高效。本文将深入探讨如何进行"Spring整合Mybatis"的基础搭建,以及涉及到的相关...

    mybatis与spring整合依赖包集

    这个依赖包集还包含了其他可能的开发工具包,如MyBatis-Spring,它提供了更便捷的Spring与MyBatis整合方式,例如MapperScannerConfigurer自动扫描并注册Mapper接口,以及SqlSessionTemplate和SqlSessionDaoSupport等...

Global site tag (gtag.js) - Google Analytics