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包,包括: 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包(包括springmvc)
该压缩包包含了mybatis与spring整合的全部jar包,为学习整合ssm框架提供一个环境
mybatis-spring 整合jar包,Spring和MyBatis环境整合mybatis-spring-1.1.1
mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,mybatis与spring整合全部jar包,
完整mybatis3.0.6与spring3.0整合例子,带有数据库生成文件。,特别是其中的事务处理,包括回滚。
一个完整而简单SSM项目,包含SQL脚本、代码与学习笔记。内容Spring如何整合SpringMVC与Mybatis以及整合原理的源码分析。
中文版的 无缝整合myBatis 与Spring3.x 大家一起学习吧
mybatis和spring整合jar包
mybatis与spring整合全部jar包(包括springmvc) 里面有包含mybatis和spring整合的所有jar包
spring cloud整合mybatis,spring cloud整合mybatis,spring cloud整合mybatis
MyBatis3.0.4整合Spring3.0.5的包,MyBatis官网已经不提供此包了。
mybatis3与Spring整合官方中文版
mybatis-spring整合jar包mybatis-spring整合jar包mybatis-spring整合jar包mybatis-spring整合jar包
mybatis-3.2.7 包含spring整合包
mybatis-spring1.2.1.chm(离线版)、mybatis3与Spring整合官方中文版.pdf、MyBatis-3_2_4用户指南.chm(离线版)、MyBatis_3_User_Guide_Simplified_Chinese.pdf
mybatis与spring整合全部jar包(包括springmvc),mybatis与spring整合全部jar包(包括springmvc)
spring_mybatis 整合jar包,基本常用jar包的整合,。。。。。。。。。。。。。。。
最新mybatis3+spring4完美整合架包