MyBatis如何使用(三)

 更新时间:2016年07月25日 15:38:02   作者:迷茫中守候  
这篇文章主要介绍了MyBatis如何使用(三)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

在前边阐述了单独使用mybatis的方法,在实际开发过程中mybatis经常和spring一起使用,即mybatis和spring进行集成,现在我们来看如何集成。

mybatis和spring进行集成需要用到集成包:mybatis-spring-1.1.1.jar,此包提供mybatis和spring集成的支持,把此包导入到项目的lib目录下。

我们先看mybatis单独使用的时候的过程,mybatis配置文件==》读取配置文件==》操作数据库,具体的使用方法可参照前两篇文章。

下面进行mybatis和spring的集成,

一、mybatis配置文件

在和spring做集成时mybatis的配置文件中有些配置不再需要了,spring会使用它自己的。如数据源,下面看下mybatis的配置文件,MybatisConfiguration.xml,

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases> 
<typeAlias alias="Message" type="com.cn.imooc.entity.Message"/> 
</typeAliases> 
<mappers>
<mapper resource="com/cn/mappers/message.xml"/>
</mappers>
</configuration> 

上面的配置文件配置了别名和mappers映射文件,和之前的配置文件相比,可以看出没有了关于数据源的信息,这里在mybatis的配置文件中不再需要配置数据源,需要在spring的配置文件中配置。

二、spring配置文件

既然和spring做集成,那么必须导入spring的包,关于spring的包可以从前面的文章中获得;导入spring的包之后,就需要配置spring的配置文件,我们把spring的配置文件放在src下,名字为spring-application.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: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-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="address" class="com.cn.test.spring.Address"></bean>
<!-- 引入jdbc配置文件 --> 
<!--
<context:property-placeholder location="jdbc.properties"/> 
-->
<!--1、创建jdbc数据源 --> 
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" > 
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/weixin?useUnicode=true&amp;characterEncoding=UTF-8" />
<property name="username" value="root"/>
<property name="password" value="123456"/> 
</bean> 
<!--2、sqlSessionFactoryBean--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:MybatisConfiguration.xml"></property>
<!--
<property name="mapperLocations" value="classpath:com/cn/mappers/message.xml"></property>
-->
</bean>
<bean id="messageMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.cn.inter.IMessageOperation" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans> 

首先,我们配置了一个数据源,这里如果引入了context的命名空间,可以使用<context:property-placeholder location="jdbc.properties"/>,引入src下的配置文件。

其次,配置了sqlSessionFactoryBean,这里使用sqlSessionFactoryBean生成sqlSessionFactory(在mybatis中sqlSessionFactory由sqlSessionFactoryBuilder生成)。要通过sqlSessionFactroyBean生成sqlSessionFactroy有以下几个属性,dataSource 即刚才配置的数据源,指定生成sqlSessionFactory使用的数据源

configLocation 这个属性指定mybatis的配置文件的路径,在本例中我们使用了src下的MybatisConfiguration.xml,如果在此文件中配置了mappers映射文件,则不需要第三个属性,如果没配置映射文件则需要第三个属性;假如,在MybatisConfiguration.xml文件中没有配置映射文件,也没有配置mapperLocations属性,则映射文件必须必须和映射器类在同一个包下,且映射文件和映射器类必须名字相同。

mapperLocations 指定mappers映射文件,这个属性可以配置为一个list的值

最后,使用动态代理生成访问数据库的代码,MapperFactoryBean作为一个工厂类,可以用来生成访问数据库的动态代理,有两种方式可以生成一个动态代理,这里使用了mapperInterface和sqlSessionFactory两个属性,第一个指定映射器类的全限路径,第二个就是上面的sqlSessionFactory;另一种方式是使用注解的方式。

至此,spring的配置文件完成,可以进行测试,测试代码如下,

package com.cn.test.spring;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.cn.imooc.entity.Message;
import com.cn.inter.IMessageOperation;
public class TestSpringAndMybatis {
public static void main(String[] args) {
// TODO Auto-generated method stub
//获得spring的配置
ClassPathXmlApplicationContext cpxac=new ClassPathXmlApplicationContext("spring-application.xml");
//获得IMessageOperation接口类
IMessageOperation imo=(IMessageOperation)cpxac.getBean("messageMapper");
Message m=imo.selectMessageById("2");
System.out.println(m);
}
} 

上边完成了mybatis和spring集成的一种方式,我们会发现在生成代理的时候如果有多个映射器类,则需要配置多次,比较麻烦,下篇文章使用另一种方式。

以上所述是小编给大家介绍的MyBatis如何使用(三),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • 解析Runtime中shutdown hook的使用详解

    解析Runtime中shutdown hook的使用详解

    本篇文章是对解析Runtime中shutdown hook的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java 带参数与带返回值的方法的定义和调用

    Java 带参数与带返回值的方法的定义和调用

    在java中,方法就是用来完成解决某件事情或实现某个功能的办法。方法实现的过程中,会包含很多条语句用于完成某些有意义的功能——通常是处理文本,控制输入或计算数值,这篇文章我们来探究一下带参数与带返回值的方法的定义和调用
    2022-04-04
  • 如何在mapper文件中使用in("str1","str2")

    如何在mapper文件中使用in("str1","str2")

    这篇文章主要介绍了如何在mapper文件中使用in("str1","str2"),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • springboot bootcdn使用示例详解

    springboot bootcdn使用示例详解

    这篇文章主要介绍了springboot bootcdn使用,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 深入了解Java核心类库--Arrays类

    深入了解Java核心类库--Arrays类

    这篇文章主要为大家详细介绍了java Arrays类定义与使用的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • Java开发者结合Node.js编程入门教程

    Java开发者结合Node.js编程入门教程

    这篇文章主要介绍了Java开发者结合Node.js编程入门教程,我将先向您展示如何使用Java EE创建一个简单的Rest服务来读取 MongoDB数据库。然后我会用node.js来实现相同的功能,需要的朋友可以参考下
    2014-09-09
  • java分布式面试降级组件Hystrix的功能特性

    java分布式面试降级组件Hystrix的功能特性

    这篇文章主要为大家介绍了java分布式面试关于降级组件Hystrix的功能特性回答,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • Swagger2配置方式(解决404报错)

    Swagger2配置方式(解决404报错)

    这篇文章主要介绍了Swagger2配置方式(解决404报错),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring中的@Async原理分析

    Spring中的@Async原理分析

    这篇文章主要介绍了Spring中的@Async原理分析,自定义new ThreadPoolExecutor并调用invokeAll等进行并发编程,后面发现只要在方法上添加@Async注解,并使用@EnableAsync进行开启默认会使用SimpleAsyncTaskExecutor类型,需要的朋友可以参考下
    2024-01-01
  • Java Web开发中过滤器和监听器使用详解

    Java Web开发中过滤器和监听器使用详解

    这篇文章主要为大家详细介绍了Java中的过滤器Filter和监听器Listener的使用以及二者的区别,文中的示例代码讲解详细,需要的可以参考一下
    2022-10-10

最新评论