当前位置: 移动技术网 > IT编程>开发语言>Java > MyBatis无缝对接Spring的方法

MyBatis无缝对接Spring的方法

2019年07月19日  | 移动技术网IT编程  | 我要评论

新利假冒ued,天龙传奇国语版,中毒qvod

1.为什么会出现mybatis-spring

spring框架与mybatis框架是java互联网技术的主流框架。但是如何将mybatis无缝整合到spring框架中呢?这时候就诞生了mybatis-spring。使用这个类库中得类,spring将会加载必要的mybatis工厂类和session类。

spring3.0也仅仅支持ibatis2.0。本来将mybatis3的支持添加到spring3.0中。而不幸,spring3.0的开发在mybatis3.0官方发布前就结束了。因为spring开发团队不想发布一个非发布版的mybatis的整合支持。就放弃了对mybatis的支持。

随着spring越来越成为java事实标准的技术框架。spring 4.0 移除了对ibatis的直接支持。mybatis团队开发出来了基于spring的mybatis整合jar---mybatis-spring。

2.使用mybatis-spring的好处

1.使得业务层和模型层得到更好的分离。再spring框架中mybatis也更加简单,节约不少的代码

2.甚至不需要显示的使用sqlsessionfactory、sqlsessiond等对象

3.mybatis-spring组成部分

1.配置数据源

2.配置sqlsessionfactory

3.配置sqlsessiontemplate

4.配置mapper

5.事务处理

mybatis中要构建sqlsessionfactory对象,让它产生sqlsession,而在mybatis-spring项目中sqlsession的使用是通过sqlsessiontemplate来实现的,它提供了对sqlsession操作的封装。所以可以通过sqlsessiontemplate可以得到mapper。

4.在spring mvc中配置

4.1 配置sqlsessionfactorybean

在基本的 mybatis中,session工厂可以使用sqlsessionfactorybuilder 来创建。而在 mybatis-spring 中,则使用 sqlsessionfactorybean 来替代。

<bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">
 <property name="datasource" ref="datasource" />
</bean>

注意点

sqlsessionfactory 有一个单独的必须属性,就是 jdbc 的 datasource

在sqlsessionfactorybean的返回getobject的时候,有个验证。

@override
 public sqlsessionfactory getobject() throws exception {
  if (this.sqlsessionfactory == null) {
   afterpropertiesset();
  }

  return this.sqlsessionfactory;
 }
 @override
 public void afterpropertiesset() throws exception {
  notnull(datasource, "property 'datasource' is required");
  notnull(sqlsessionfactorybuilder, "property 'sqlsessionfactorybuilder' is required");
  state((configuration == null && configlocation == null) || !(configuration != null && configlocation != null),
       "property 'configuration' and 'configlocation' can not specified with together");
  this.sqlsessionfactory = buildsqlsessionfactory();
 }

4.2配置datasource

这里我们使用的是阿里巴巴的数据库连接池。

compile group: 'com.alibaba', name: 'druid', version: '1.1.2'
<!--阿里巴巴的数据库连接池-->
<bean id="datasource" class="com.alibaba.druid.pool.druiddatasource" init-method="init" destroy-method="close">
  <!-- 基本属性 url、user、password -->
  <property name="url" value="${jdbc_url}"/>
  <property name="username" value="${jdbc_user}"/>
  <property name="password" value="${jdbc_password}"/>
</bean>

4.3配置数据库链接属性

在resource目录下创建properties文件夹,并创建datasource.properties

jdbc_url=jdbc:mysql://localhost:3306/cnblogs?servertimezone=asia/shanghai&characterencoding=utf8
jdbc_user=root
jdbc_password=root

使用阿里巴巴的数据库连接池是无需配置数据库驱动。是根据url的前缀来判断的

4.4配置spring加载配置属性及配置替换动态标签

<!--加载配置文件路径-->
<bean id="configproperties" class="org.springframework.beans.factory.config.propertiesfactorybean">
  <property name="location" value="classpath:properties/datasource.properties"></property>
</bean>
<!--获取配置属性之后动态替换标签-->
<bean id="propertyconfigurer" class="org.springframework.beans.factory.config.preferencesplaceholderconfigurer">
  <property name="properties" ref="configproperties"/>
</bean>

4.5配置spring自动创建mapper接口的bean

mybatis-spring提供了一个转换器mapperscannerconfigurer,可以将映射接口转换为spring容器中bean。这样就可以在代码中注入映射的bean

<!--采用自动扫描方式创建mapper bean-->
<bean class="org.mybatis.spring.mapper.mapperscannerconfigurer">
  <property name="basepackage" value="com.cnblogs.dao"></property>
</bean>

basepackage属性是让你为映射器接口文件设置基本的包路径。 你可以使用分号或逗号作为分隔符设置多于一个的包路径。每个映射器将会在指定的包路径中递归地被搜索到。

4.6配置事务

mybatis和spring结合后是使用spring aop去管理事务的,使用spring aop是相当的简单的,它分为声明式事务和编程性事务。大部分场景下使用声明式事务就可以了。

引入jar包

compile group: 'org.springframework', name: 'spring-tx', version: '4.3.10.release'
compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.10.release'
<!--事务管理器-->
<bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
  <property name="datasource" ref="datasource" />
</bean>
<!--使用声明式事务管理方式-->
<tx:annotation-driven transaction-manager="transactionmanager"/>

5.完整的spring xml配置及引用的jar包

引入的jar列表

compile group: 'org.springframework', name: 'spring-webmvc', version: '4.3.10.release'
compile group: 'org.springframework', name: 'spring-tx', version: '4.3.10.release'
compile group: 'org.springframework', name: 'spring-jdbc', version: '4.3.10.release'
compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
compile group: 'org.mybatis', name: 'mybatis-spring', version: '1.3.1'
compile group: 'org.mybatis', name: 'mybatis', version: '3.4.5'
compile group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
compile group: 'com.alibaba', name: 'druid', version: '1.1.2'

spring的配置

<?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" 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/context
    http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/mvc
    http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
  <!--spring可以自动去扫描base-pack下面的包或者子包下面的java文件-->
  <context:component-scan base-package="com.cnblogs.controller,com.cnblogs.service,com.cnblogs.dao"/>
  <!--自动注册requestmappinghandlermapping与requestmappinghandleradpter-->
  <mvc:annotation-driven/>
  <!-- 对静态资源文件的访问-->
  <mvc:default-servlet-handler/>
  <!--加载配置文件路径-->
  <bean id="configproperties" class="org.springframework.beans.factory.config.propertiesfactorybean">
    <property name="location" value="classpath:properties/datasource.properties"></property>
  </bean>
  <!--获取配置属性之后动态替换标签-->
  <bean id="propertyconfigurer" class="org.springframework.beans.factory.config.preferencesplaceholderconfigurer">
    <property name="properties" ref="configproperties"/>
  </bean>
  <!--阿里巴巴的数据库连接池-->
  <bean id="datasource" class="com.alibaba.druid.pool.druiddatasource" init-method="init" destroy-method="close">
    <!-- 基本属性 url、user、password -->
    <property name="url" value="${jdbc_url}"/>
    <property name="username" value="${jdbc_user}"/>
    <property name="password" value="${jdbc_password}"/>
  </bean>
  <!--构建sqlsessionfactory-->
  <bean id="sqlsessionfactory" class="org.mybatis.spring.sqlsessionfactorybean">
    <property name="datasource" ref="datasource"/>
    <property name="configlocation" value="classpath:config/mybatis-config.xml"/>
    <property name="mapperlocations" value="classpath:mappers/*.xml"/>
  </bean>
  <!--采用自动扫描方式创建mapper bean-->
  <bean class="org.mybatis.spring.mapper.mapperscannerconfigurer">
    <property name="basepackage" value="com.cnblogs.dao"></property>
  </bean>
  <!--事务管理器-->
  <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager">
    <property name="datasource" ref="datasource" />
  </bean>
  <!--使用声明式事务管理方式-->
  <tx:annotation-driven transaction-manager="transactionmanager"/>
  <!--视图解析器-->
  <bean class="org.springframework.web.servlet.view.internalresourceviewresolver">
    <property name="prefix" value="/web-inf/content"></property>
    <property name="suffix" value=".jsp"></property>
  </bean>
</beans>

总结

以上所述是小编给大家介绍的mybatis无缝对接spring的方法,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网