`
zengshaotao
  • 浏览: 779410 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring-mybatis

 
阅读更多

spring与mybatis三种整合方法

 

1、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
spring-mybatis.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:p="http://www.springframework.org/schema/p"
    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.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.hua.saf" />
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}" />
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描mapping.xml文件,**表示迭代查找 -->
        <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
    </bean>

    <!-- DAO接口所在包名,Spring会自动查找其下的类 ,包下的类需要使用@MapperScan注解,否则容器注入会失败 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.hua.saf.*" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
    
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>    
</beans>
复制代码

 UserMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
-->
<mapper namespace="com.hua.saf.dao.UserDao">
  <!-- 
  在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复,
  使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
  resultType="com.hua.saf.User"就表示将查询结果封装成一个User类的对象返回,User类就是t_user表所对应的实体类
  -->
  <!-- 根据id查询得到一个user对象-->
  <select id="getUser" parameterType="int" resultType="com.hua.saf.pojo.User">
    select * from t_user where id=#{id}
  </select>
</mapper>
复制代码

dao类:

复制代码
/** 
* 这里的@MapperScan就是上面所讲的Mapper扫描器中所需要的配置,会自动生成代理对象。 
* 注意,接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样,因为生成的 
* 动态代理,会根据这个匹配相应的Sql语句执行。另外就是方法的参数和返回值也需要注 
* 意。接口中的方法如何定义,对应的MyBatis映射文件就应该进行相应的定义。 
* 最后,标注中的userDao是用来作为Spring的Bean的id(或name)进行使用的,方便我 
* 们在Service层进行注入使用。 
*/ 

@MapperScan
public interface UserDao {
  //此处的方法名必须和mapper中的映射文件中的id同名
  //回去映射文件中通过com.hua.saf.dao.UserDao.getUser,即this.getClass().getName()+".getUser"
  public User getUser(int id);
}
复制代码

service类:

复制代码
@Service("userService")
public class UserServiceImpl implements IUserService {

@Resource
private UserDao userDao;

  public User getUser(int id) {
    return userDao.getUser(id);
  }
}
复制代码

 2、采用接口org.apache.ibatis.session.SqlSession的实现类org.mybatis.spring.SqlSessionTemplate。
  mybatis中, sessionFactory可由SqlSessionFactoryBuilder.来创建。MyBatis-Spring 中,使用了SqlSessionFactoryBean来替代。SqlSessionFactoryBean有一个必须属性dataSource,另外其还有一个通用属性configLocation(用来指定mybatis的xml配置文件路径)。
spring-mybatis.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:p="http://www.springframework.org/schema/p"
    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.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.hua.saf" />
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}" />
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
        <!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件-->
        <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
    </bean>
    
    <!-- mybatis spring sqlSessionTemplate,使用时直接让spring注入即可 -->
    <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>
复制代码

sqlMapConfig.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 type="com.hua.saf.pojo.User" alias="User" />
    </typeAliases>
</configuration>
复制代码

User.java

复制代码
public class User {
    
    private int id;
    private String username;
    private String password;
    private int age;
     
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
复制代码

UserDao.java

复制代码
@Repository
public class UserDao{

    @Resource
    private SqlSessionTemplate sqlSessionTemplate;
    
    public User getUser(int id) {
        return sqlSessionTemplate.selectOne(this.getClass().getName() + ".getUser", 1);
    }   
}
复制代码

UserService.java

复制代码
@Service
public class UserService{
    
    @Resource
    private UserDao userDao;
    
    public User getUser(int id) {
        return userDao.getUser(id);
    }
}
复制代码

3、采用抽象类org.mybatis.spring.support.SqlSessionDaoSupport提供SqlSession。
spring-mybatis.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:p="http://www.springframework.org/schema/p"
    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.1.xsd  
                        http://www.springframework.org/schema/context  
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd  
                        http://www.springframework.org/schema/mvc  
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自动扫描 -->
    <context:component-scan base-package="com.hua.saf" />
    <!-- 引入配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${initialSize}" />
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${maxActive}" />
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${maxIdle}" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${minIdle}" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${maxWait}" />
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="configLocation"  value="classpath:sqlMapConfig.xml"/>
        <!-- 自动扫描mapping.xml文件,**表示迭代查找,也可在sqlMapConfig.xml中单独指定xml文件-->
        <property name="mapperLocations" value="classpath:com/hua/saf/**/*.xml" />
    </bean>

    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
</beans>
复制代码

sqlMapConfig.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 type="com.hua.saf.pojo.User" alias="User" />
    </typeAliases>
</configuration>
复制代码

User.java

复制代码
public class User {
    
    private int id;
    private String username;
    private String password;
    private int age;
    
    
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
复制代码

UserDao.java

复制代码
@Repository
public class UserDao extends SqlSessionDaoSupport{
    
    public User getUser(int id) {
        return this.getSqlSession().selectOne(this.getClass().getName() + ".getUser", 1);
    }
  //使用SqlSessionDaoSupport必须注意,此处源码1.1.1中有自动注入,1.2中取消了自动注入,需要手工注入,侵入性强
  //也可在spring-mybatis.xml中如下配置,但是这种有多少个dao就要配置到少个,多个dao就很麻烦。
  //<bean id="userDao" class="com.hua.saf.dao.UserDao">
  //    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
  //</bean>
    @Resource
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        // TODO Auto-generated method stub
        super.setSqlSessionFactory(sqlSessionFactory);
    }
}
复制代码

UserService.java

复制代码
@Service
public class UserService{
    
    @Resource
    private UserDao userDao;
    
    public User getUserss(int id) {
        return userDao.getUser(1);
    }
}
分享到:
评论

相关推荐

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    7. **mybatis-config.xml**: MyBatis的全局配置文件,定义了MyBatis的配置,包括类型别名、映射器文件的位置、数据库环境等。通过这个文件,MyBatis知道如何查找和处理SQL语句。 这些配置文件的组合使用,使得开发...

    cms -spring-mybatis框架权限管理系统

    "cms -spring-mybatis框架权限管理系统" 这个标题表明我们讨论的是一个基于CMS(内容管理系统)的软件项目,该系统采用了Spring和MyBatis这两个流行的Java框架来实现。Spring是一个全面的后端开发框架,提供依赖注入...

    spring-mybatis整合jar包

    SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,用于构建高效、可维护的Web应用程序。在这个"spring-mybatis整合jar包"中,包含了进行SSM整合所需的关键库文件。下面将详细介绍这些组件以及...

    spring-mybatis官方例子

    上次上传资源的时候,上传错了,没把spring-mybatis的官方例子包含进去,sorry...这是spring-mybatis的官方例子,有具体文档,请参见http://mybatis.github.io/spring/zh/index.html;

    网上书城项目(采用框架Spring-SpringMVC-MyBatis).zip

    这是一个网上书城项目,采用当前最流行的框架Spring-SpringMVC-MyBatis设计,主要是对之前用Jsp/Servlet做的一些优化,重构了整个系统,感觉还不错,学到了很多新的知识,能对SSM框架熟练的运用了。 这是一个网上...

    spring-mybatis-spring-1.3.2.tar.gz

    《SSM框架详解:基于spring-mybatis-spring-1.3.2.tar.gz的实践与探索》 在Java开发领域,SSM框架(Spring、SpringMVC、MyBatis)是广泛使用的三大组件,它们各自负责不同的职责,共同构建出高效、灵活的企业级应用...

    spring-mybatis-struts2-master ——demo

    《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...

    spring-mybatis-2.0.0源码

    2. 配置MyBatis:创建MyBatis的配置文件(mybatis-config.xml),定义数据源、事务管理器、Mappers等信息。 3. 创建SqlSessionFactoryBean:在Spring的配置文件中,创建一个`SqlSessionFactoryBean`,通过`...

    spring-mybatis-1.2.5-src.zip

    - **MyBatis-Spring**:这是一个连接Spring和MyBatis的桥梁,提供了一些关键的组件,如SqlSessionFactoryBean和SqlSessionTemplate,它们帮助Spring管理SqlSessionFactory和SqlSession。 - **...

    spring-mybatis-spring-1.2.0.zip

    本文将详细介绍Spring与MyBatis的整合过程,并指导如何下载并使用名为"spring-mybatis-spring-1.2.0.zip"的资源包。 一、Spring与MyBatis的整合原理 1. MyBatis-Spring插件:Spring与MyBatis的桥梁 MyBatis-Spring...

    spring-mybatis-spring-3.0.1.zip

    本文将详细介绍Spring与MyBatis的整合过程,并提供"spring-mybatis-spring-3.0.1.zip"资源包的下载信息,以供开发者参考。 一、Spring与MyBatis整合的意义 Spring框架提供了依赖注入(DI)和面向切面编程(AOP)等...

    spring-mybatis-spring-2.0.1.zip

    本文将详细介绍Spring与MyBatis的整合过程,并针对"spring-mybatis-spring-2.0.1.zip"这个资源包进行解析,以帮助开发者更好地理解和运用。 首先,Spring与MyBatis的整合主要涉及以下几个核心组件: 1. MyBatis-...

    spring-mybatis-spring-1.2.3.zip

    2. 配置Spring:创建Spring的配置文件,如`mybatis-spring.xml`,定义SqlSessionFactoryBean,用于创建SqlSessionFactory,这是MyBatis的核心工厂类。 3. 数据源配置:配置数据源,Spring提供了多种数据源实现,如...

    spring-mybatis-spring-1.3.2.zip

    本文将详细介绍Spring与MyBatis的整合过程,并提供"spring-mybatis-spring-1.3.2.zip"资源包的下载信息。 一、Spring与MyBatis的整合背景 Spring框架提供了丰富的功能,如AOP(面向切面编程)、IOC(控制反转)等,...

    spring-mybatis-spring-2.0.7.zip

    在整合过程中,Spring提供了一个MyBatis-Spring的模块,这个模块的作用是将Spring的依赖注入(DI)特性引入到MyBatis中,使得MyBatis的SqlSession和Mapper对象可以在Spring的管理下被注入到Service层或者DAO层。...

    spring-mybatis-spring-1.1.1.zip

    本篇文章将围绕"spring-mybatis-spring-1.1.1.zip"资源包,详细讲解如何在Windows环境下进行Spring与MyBatis的整合,并提供免费下载指南。 首先,我们要了解Spring与MyBatis整合的基本概念。Spring框架通过其IoC...

    spring-mybatis-spring-1.0.1.zip

    为了方便开发者,我们提供了适用于Windows各个版本的mybatis-spring整合资源包`spring-mybatis-spring-1.0.1.zip`,该资源包包含了所有必要的库文件和示例代码,可以直接下载使用。请注意,这个资源是免费的,供学习...

    spring-mybatis-spring-1.1.0.zip

    本资源包“spring-mybatis-spring-1.1.0.zip”提供了Spring与MyBatis整合的具体实现,适用于Windows各个版本,是开发者学习和实践的宝贵资料。 Spring框架提供了一个全面的编程和配置模型,它简化了Java应用的开发...

    spring-mybatis-spring-2.0.3.zip

    1. 添加依赖:在项目的pom.xml文件中,需要引入Spring和MyBatis的依赖库,同时也要包含mybatis-spring的适配器库,如`mybatis-spring-boot-starter`。 2. 配置MyBatis:在Spring Boot的application.properties或...

    spring-mybatis-spring-1.0.0-RC3.zip

    本文将围绕“spring-mybatis-spring-1.0.0-RC3.zip”这个压缩包,详细介绍Spring与MyBatis的整合过程,并提供相关资源的免费下载信息。 一、Spring与MyBatis的整合背景 在传统的Java开发中,数据访问层通常需要手动...

Global site tag (gtag.js) - Google Analytics