加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

浅析mybatis和spring整合的实现过程

发布时间:2020-05-23 05:53:12 所属栏目:Java 来源:互联网
导读:根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求

根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持。因此由Mybatis社区自己开发了一个Mybatis-Spring用来满足Mybatis用户整合Spring的需求。下面就将通过Mybatis-Spring来整合Mybatis跟Spring的用法做一个简单的介绍。

MapperFactoryBean

首先,我们需要从Mybatis官网上下载Mybatis-Spring的jar包添加到我们项目的类路径下,当然也需要添加Mybatis的相关jar包和Spring的相关jar包。我们知道在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要我们直接访问。SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。

Xml代码

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <property name="dataSource" ref="dataSource" /> 
  <property name="mapperLocations" 
    value="classpath:com/tiantian/ckeditor/mybatis/mappers/*Mapper.xml" /> 
  <property name="typeAliasesPackage" value="com.tiantian.ckeditor.model" /> 
</bean> 

       在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:

 mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。

configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。

 typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。
 typeAliases:数组类型,用来指定别名的。指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名,前提是该类上没有标注@Alias注解,否则将使用该注解对应的值作为此种类型的别名。

Xml代码

<property name="typeAliases"> 
 <array> 
 <value>com.tiantian.mybatis.model.Blog</value> 
 <value>com.tiantian.mybatis.model.Comment</value> 
 </array> 
</property> 

plugins:数组类型,用来指定Mybatis的Interceptor。

 typeHandlersPackage:用来指定TypeHandler所在的包,如果指定了该属性,SqlSessionFactoryBean会自动把该包下面的类注册为对应的TypeHandler。多个package之间可以用逗号或者分号等来进行分隔。

 typeHandlers:数组类型,表示TypeHandler。

接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperFactoryBean了。通过MapperFactoryBean可以获取到我们想要的Mapper对象。MapperFactoryBean实现了Spring的FactoryBean接口,所以MapperFactoryBean是通过FactoryBean接口中定义的getObject方法来获取对应的Mapper对象的。在定义一个MapperFactoryBean的时候有两个属性需要我们注入,一个是Mybatis-Spring用来生成实现了SqlSession接口的SqlSessionTemplate对象的sqlSessionFactory;另一个就是我们所要返回的对应的Mapper接口了。

定义好相应Mapper接口对应的MapperFactoryBean之后,我们就可以把我们对应的Mapper接口注入到由Spring管理的bean对象中了,比如Service bean对象。这样当我们需要使用到相应的Mapper接口时,MapperFactoryBean会从它的getObject方法中获取对应的Mapper接口,而getObject内部还是通过我们注入的属性调用SqlSession接口的getMapper(Mapper接口)方法来返回对应的Mapper接口的。这样就通过把SqlSessionFactory和相应的Mapper接口交给Spring管理实现了Mybatis跟Spring的整合。

Spring的applicationContext.xml配置文件:

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" xmlns:context="http://www.springframework.org/schema/context" 
 xmlns:mvc="http://www.springframework.org/schema/mvc" 
 xsi:schemaLocation="http://www.springframework.org/schema/beans 
  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
  http://www.springframework.org/schema/context 
 http://www.springframework.org/schema/context/spring-context-3.0.xsd 
  http://www.springframework.org/schema/mvc 
  http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> 
 <context:component-scan base-package="com.tiantian.mybatis"/> 
 <context:property-placeholder location="classpath:config/jdbc.properties"/> 
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
  destroy-method="close"> 
  <property name="driverClassName" value="${jdbc.driver}" /> 
  <property name="url" value="${jdbc.url}" /> 
  <property name="username" value="${jdbc.username}" /> 
  <property name="password" value="${jdbc.password}" /> 
 </bean> 
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
  <property name="dataSource" ref="dataSource" /> 
  <property name="mapperLocations" value="classpath:com/tiantian/mybatis/mapper/*.xml"/>
  <property name="typeAliasesPackage" value="com.tiantian.mybatis.model" /> 
 </bean> 
 <bean id="blogMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" 
 value="com.tiantian.mybatis.mapper.BlogMapper" /> 
  <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 
 </bean> 
</beans> 

BlogMapper.xml文件:

Xml代码

<?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.tiantian.mybatis.mapper.BlogMapper"> 
<!-- 新增记录 --> 
 <insert id="insertBlog" parameterType="Blog" useGeneratedKeys="true" keyProperty="id"> 
  insert into t_blog(title,content,owner) values(#{title},#{content},#{owner}) 
 </insert> 
<!-- 查询单条记录 --> 
 <select id="selectBlog" parameterType="int" resultMap="BlogResult"> 
  select * from t_blog where id = #{id} 
 </select> 
<!-- 修改记录 --> 
 <update id="updateBlog" parameterType="Blog"> 
  update t_blog set title = #{title},content = #{content},owner = #{owner} where id = #{id} 
 </update> 
<!-- 查询所有记录 --> 
 <select id="selectAll" resultType="Blog"> 
  select * from t_blog 
 </select> 
<!-- 删除记录 --> 
 <delete id="deleteBlog" parameterType="int"> 
  delete from t_blog where id = #{id} 
 </delete> 
</mapper> 

BlogMapper.java:

Java代码

package com.tiantian.mybatis.mapper; 
import java.util.List; 
import com.tiantian.mybatis.model.Blog; 
publicinterface BlogMapper { 
 public Blog selectBlog(int id); 
 publicvoid insertBlog(Blog blog); 
 publicvoid updateBlog(Blog blog); 
 publicvoid deleteBlog(int id); 
 public List<Blog> selectAll(); 
} 

BlogServiceImpl.java:

Java代码

package com.tiantian.mybatis.service.impl; 
import java.util.List; 
import javax.annotation.Resource; 
import org.springframework.stereotype.Service; 
import com.tiantian.mybatis.mapper.BlogMapper; 
import com.tiantian.mybatis.model.Blog; 
import com.tiantian.mybatis.service.BlogService; 
@Service 
publicclass BlogServiceImpl implements BlogService { 
 private BlogMapper blogMapper; 
 publicvoid deleteBlog(int id) { 
  blogMapper.deleteBlog(id); 
 } 
 public Blog find(int id) { 
  returnblogMapper.selectBlog(id); 
 } 
 public List<Blog> find() { 
  returnblogMapper.selectAll(); 
 } 
 publicvoid insertBlog(Blog blog) { 
  blogMapper.insertBlog(blog); 
 } 
 publicvoid updateBlog(Blog blog) { 
  blogMapper.updateBlog(blog); 
 } 
 public BlogMapper getBlogMapper() { 
  returnblogMapper; 
 } 
 @Resource 
 publicvoid setBlogMapper(BlogMapper blogMapper) { 
  this.blogMapper = blogMapper; 
 } 
} 

 MapperScannerConfigurer

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读