MyBatis之整合Spring

整合思路:

  1、SqlSessionFactory对象应该放到spring容器中作为单例存在

  2、传统dao的开发方式中,应该从spring容器中获得sqlSession对象

  3、Mapper代理形式中,应该从spring容器中直接获得mapper的代理对象

  4、数据库的连接以及数据库连接池事务管理都交给spring容器来完成

整合需要的jar包

  1、spring的jar包

  2、mybatis的jar包

  3、spring+mybatis的整合包

  4、mysql的数据库驱动jar包

  5、数据库连接池的jar包

配置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>
<!-- 2.指定扫描包,会把包内所有的类都设置别名,别名的名称就是类名,大小写不敏感 -->
<package name="deep.mybatis.pojo"/>
</typeAliases>
</configuration>

配置applicationContext.xml核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd "> <!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties"/> <!-- dbcp 数据源 -->
<!-- 数据库连接池 -->
<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}"/>
<property name="maxActive" value="10"/>
<!-- 最大空闲数量(最少留多少个连接) -->
<property name="maxIdle" value="5"/>
</bean> <!-- Mybatis的工厂 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 核心配置文件的位置 -->
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean> </beans>

配置资源文件db.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

配置log4j.properties日志资源文件

#Global logging configuration
log4j.rootLogger=DEBUG,stdout
#Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p[%t]-%m%n

配置UserDaoImpl

<!-- Dao -->
<bean id="userDao" class="deep.mybatis.dao.UserDaoImpl">
<!-- 其实这个工厂并没有注入到UserDaoImp这个实现类里面,而是注入到了实现类的父类里去了 -->
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
</bean>
package deep.mybatis.dao;

import org.mybatis.spring.support.SqlSessionDaoSupport;

/**
* 原始dao开发
* @author DeepSleeping
*
*/
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ //声明工厂 public void insertUser(){
this.getSqlSession().insert("");
}
}

配置Mapper动态代理开发

applicationContext.xml

<!-- Mapper动态代理开发 -->
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<!-- 有工厂才能有session,有session才能有session.getMapper获得实现类 -->
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean"/>
<property name="mapperInterface" value="deep.mybatis.mapper.UserMapper"/> </bean>
package deep.mybatis.mapper;

import deep.mybatis.pojo.User;

public interface UserMapper {

    public User findByUserId(Integer id);
}
<?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="deep.mybatis.mapper.UserMapper"> <!-- 通过ID查询一个用户 -->
<select id="findByUserId" parameterType="Integer" resultType="User">
select * from account where id = #{v}
</select>
</mapper>
package deep.mybatis.junit;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import deep.mybatis.mapper.UserMapper;
import deep.mybatis.pojo.User; public class JunitTest { @Test
public void testmapper() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
/*ac.getBean(UserMapper.class);*/
UserMapper userMapper = (UserMapper) ac.getBean("userMapper");
User user = userMapper.findByUserId(27);
System.out.println(user);
}
}

配置Mapper动态代理(增强版)

  上面的方式还是有弊端,给mybatis提供接口的时候,必须得指定到具体类。我们可以用mybatis中的另一个mapper包里的功能,扫描基本包下的所有

<!-- Mapper动态代理开发(增强版) 扫描 -->

     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 不需要指定工厂了,因为会自动去工厂中找到工厂bean -->
<!-- 配置基本包(扫描包下的所有的) -->
<property name="basePackage" value="deep.mybatis.mapper"></property>
</bean>

MyBatis之整合Spring的更多相关文章

  1. 【Mybatis】MyBatis之整合Spring(八)

    创建环境 系统:macOS Java:1.8 软件:eclipse,maven,mysql 创建步骤 本例:创建一个Maven项目(SpringMVC+Spring+Mybatis),页面上展示员工列 ...

  2. Mybatis整合Spring

    根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持.因此由Mybatis社区自己开发了一个My ...

  3. 框架整合——Spring与MyBatis框架整合

    Spring整合MyBatis 1. 整合 Spring [整合目标:在spring的配置文件中配置SqlSessionFactory以及让mybatis用上spring的声明式事务] 1). 加入 ...

  4. Mybatis整合Spring -- typeAliasesPackage

    Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前,Spring3的开发工作就已经完成了,所以Spring3中还是没有对Mybatis3的支持. 因此由M ...

  5. 160330、Mybatis整合Spring

    转自csdn文章 http://haohaoxuexi.iteye.com/blog/1843309 Mybatis整合Spring 根据官方的说法,在ibatis3,也就是Mybatis3问世之前, ...

  6. MyBatis 学习-与 Spring 集成篇

    根据官方的说法,在 ibatis3,也就是 Mybatis3 问世之前,Spring3 的开发工作就已经完成了,所以 Spring3 中还是没有对 Mybatis3 的支持.因此由 Mybatis 社 ...

  7. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  8. mybatis入门_一对多,多对多映射以及整合spring框架

    一.一对多映射. 1.1 一对多映射之根据多的一方关联查询一的一方 示例:查询出具体的订单信息,同时也查询出来订单的用户信息. 引入的订单表如下所示: 框选出来的为具体的外键. 订单的Pojo类如下所 ...

  9. 1.springMVC+spring+Mybatis的整合思路

    SSM整合的过程:就是把一些东西交给spring管理,也就是添加配置文件的一个过程.那么有哪些东西我们要交给spring管理呢?大概有以下几个: 1.数据源(可配置数据库连接池) 2.SqlSessi ...

随机推荐

  1. MFC多语言程序版本,在不同的windows系统上的使用

    如何使MFC程序界面支持多国语言?这次使用后给自己做一个总结. 我们使用vc6.0的版本来试验 1. 切换到资源视图,右键Dialog->Insert Copy 2. ok后,会出来一个语言的选 ...

  2. Python爬虫入门教程 57-100 python爬虫高级技术之验证码篇3-滑动验证码识别技术

    滑动验证码介绍 本篇博客涉及到的验证码为滑动验证码,不同于极验证,本验证码难度略低,需要的将滑块拖动到矩形区域右侧即可完成. 这类验证码不常见了,官方介绍地址为:https://promotion.a ...

  3. 通过模拟JDK中的动态代理,由浅入深讲解动态代理思想.

    目录 场景引入 动态代理引入 动态代理进阶 总结 个人认为动态代理在设计模式中算是比较难的, 本篇文章将从无到有, 从一个简单代码示例开始迭代, 逐步深入讲解动态代理思想. 场景引入 假设现在有一个坦 ...

  4. 大数据量下DataTable To List效率对比

    使用反射和动态生成代码两种方式(Reflect和Emit) 反射将DataTable转为List方法 public static List<T> ToListByReflect<T& ...

  5. Java基础练习2(构造方法)

    1.以下关于面向对象概念的描述中,不正确的一项是() A.在构造方法中,this()只能出现在构造方法第一行位置 B.在构造方法中,super()只能出现在构造方法第一行位置 C.this()和sup ...

  6. Mybatis高级查询之一对一查询的四种方法

    目录 1. 一对一查询 1.1 一对一嵌套结果查询 1.2 使用resultMap配置一对一映射 1.3 使用resultMap的association标签配置一对一映射 1.4 associatio ...

  7. Python基础 列表介绍、使用

    第3章 学习目标: 列表是什么以及如何使用列表元素.列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素.列表是新手可直接使用的最强大的Python功能之一,它融合了众 ...

  8. Adreno OpenCL坑——bool转int

    在项目代码中为了避免条件分支,需要把bool变成int的形式,然后通过向量运算的形式和单个单个的形式,其结果却是不同,向量的方式为(-1, 0),而单个的转换则为(1, 0) 有如下kernel代码: ...

  9. 软件工程通用软件体系结构主机终端模式、B/S 、C/S 结构和多层分布式结构

    软件系统的体系结构经历了主机终端模式.客户机/服务器(C/S)模式.浏览器/服务器(B/S)和多层分布式结构. 主机/终端结构: 早期计算机系统多是单机系统,多个用户是通过联网终端来访问的,没有网络的 ...

  10. centos7下报错: import requests ImportError: No module named requests

    在网上扒了一个python脚本,在centos7上执行的时候报错: import requestsImportError: No module named requests 原因是:requests是 ...