zoukankan      html  css  js  c++  java
  • 如何使用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集成的一种方式,我们会发现在生成代理的时候如果有多个映射器类,则需要配置多次,比较麻烦,下篇文章使用另一种方式。

    有不正之处欢迎指正!

    谢谢!

  • 相关阅读:
    SqlHelper处理类
    你必须知道的ADO.NET(五) 细说数据库连接池
    你必须知道的ADO.NET(三) 连接字符串,你小觑了吗?
    从零开始学习ASP.NET MVC 入门
    ASP.NET MVC3 系列教程 目录
    .NET获取英文月份缩写名(可获取其他国家)
    你必须知道的ADO.NET(二)了解.NET数据提供程序
    良好的C#编程习惯
    你必须知道的ADO.NET(一) 初识ADO.NET
    mvc中使用一个action对多个不同名字段做remote验证
  • 原文地址:https://www.cnblogs.com/teach/p/5703321.html
Copyright © 2011-2022 走看看