spring学习 六 spring与mybatis整合
在mybatis学习中有两种配置文件 :全局配置文件,映射配置文件。mybatis和spring整合,其实就是把mybatis中的全局配置文件的配置内容都变成一个spring容器的一个bean,让spring容器进行托管.因此整合过程就是把mybatis全局配置文件的内容整合到spring的配置文件中
(一)mybatis全局配置文件 :
根标签是<configuration>,
子标签包括:
<typeAliases>配置别名,
<environments> 配置数据库环境,
<mappers> 配置包扫描
<?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>
<!--
配置log4j
-->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings> <!-- default的值是<environment>的id,代表当前要连接的数据库环境
【注】default的值一定要是一个<environment>,否则在获取SqlSession实例时会报空指针错误
-->
<environments default="mySqlJdbc">
<environment id="mySqlJdbc">
<!-- 事物标签,使用原生jdbc的事物 ,如果是MANAGERD表示交给其他容器管理-->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据库连接池技术 -->
<dataSource type="POOLED">
<!-- property中的name的值,不能随便写,有规定的 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<environment id="oracleJdbc">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
</environments> <!-- 加载XXXMapper.xml
如果采用代理开发,package批量指定xxxMapper.xml文件已经xxxMapper.java文件
-->
<mappers>
<mapper resource="com/xxx/mapper/FlowerMapper.xml"/>
</mappers>
</configuration>
根上面的配置文件,就可以推断出,spring中必须有
(1)用来描述数据库链接的基本配置内容,对应mybatis配置文件中的<dataSource>标签
(2)用来获取sqlSession的sqlSessionFactory,对应mybatis中的下面的代码
//加载配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//使用工厂设计模式 【注意】以后sqlSessionFactory都会被spring 管理,不需要我们自己创建
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
(3) 用来指定映射文件位置的配置内容,mybatis全局配置文件中的<mappers>标签
(二) 把mybatis全局配置文件整合进spring配置文件
第一步:整合数据库配置
在spring中使用了一个数据源封装类来替换mybatis全局配置文件中的<dataSource>标签,这个类就是org.springframework.jdbc.datasource.DriverManagerDataSource,在spring-jdbc.jar包中。在spring配置文件中做如下配置
<!--
数据源封装类
数据源就是用来封装数据库链接的,此处的类就是对JDBC中的DriverManager的封装
spring对jdbc的封装在spring-jdbc.jar包中
数据源封装类的作用就是代替mybatis中的<dataSource>标签里面的东西
-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="url" value="jdbc:mysql://192.168.153.128:3306/mybaties?characterEncoding=utf-8"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property> <!--
在DriverManagerDataSource类以及父类中,并没有任何一个driverClassName属性,
只是有一个public void setDriverClassName(String driverClassName)方法,
在使用<property>标签时,其实是根据name属性的值,来确定要调用的setter方法,name属性的值并不是类中的属性
-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
</bean>
第二步:把用来获取sqlSession的sqlSessionFactory注册到spring工厂
<!-- sqlSessionFactory ,注册sqlSession工厂-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--dataSource的类型是DataSource是一个接口,上面配置的DriverManagerDataSouce类实现了DataSource接口 -->
<property name="dataSource" ref="dataSource"></property>
< !-- 为实体类起别名 -->
<property name="typeAliasesPackage" value="com.spring.pojo"></property>
</bean>
第三步:配置mybatis要扫描的映射文件的位置,spring在扫描basePackage指定的包时,会创建这个包下的所有接口的实现类的实例,并把这些实例注册到spring容器,且注册的名称为接口名的首字母小写
<!--
配置mybatis扫描的mapper包,是替代mybatis全局配置文件中的<mappers>标签
扫描了com.spring.mapper包下的所有的接口,并且会给这些接口提供实例化,并且实例化的bean命名为首字母小写的接口名
例如有一个接口名为AirportMapper,在spring中对应的bean的名称为airportMapper
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.airplan.mapper" ></property>
<property name="sqlSessionFactory" ref="sessionFactory"></property>
</bean>
经过上述三步就可以把mybatis需要的基本内容整合进spring
为了下面的代码测试,再在spring配置文件中配置一个bean
<bean name="airportService" class="com.airplan.service.impl.AirportServiceImpl">
<property name="airportMapper" ref="airportMapper"></property>
</bean>
(三)代码测试
public class TestClass {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
String[] names=ac.getBeanDefinitionNames();
for (String string : names) {
System.out.println(string);
}
AirportService bean = ac.getBean("airportService",AirportService.class);
List<Airport> showAirports = bean.showAirport();
System.out.println(showAirports.size());
for (Airport airport : showAirports) {
System.out.println(airport);
}
}
}
spring-mybatis整合的第二种方式:mybatis配置文件与Spring配置文件分开写
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <!-- 引入数据库配置文件 -->
<context:property-placeholder location="classpath:db.properties"/> <!--
注册数据库连接池
-->
<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> <!-- 注册sqlSessionFactoryBean --> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
</bean> <!-- <bean id="userDao" class="com.caopeng.dao.UserDaoImpl">
<property name=""></property>
</bean> --> <!-- mapper 动态代理开发 <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="sqlSessionFactory" ref="sqlSessionFactoryBean" />
<property name="mapperInterface" value="com.caopeng.mapper.UserMapper"></property>
</bean> -->
<!-- mapper动态代理开发,开启扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.caopeng.mapper"/>
</bean> </beans>
mybatis配置文件
<?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="com.xxx.bean" />
</typeAliases> <!--
指定xxxMapper.xml与xxxMapper.java文件,package方法指定
必须两种文件都在一个包下,且文件名一致
-->
<mappers>
<package name="com.caopeng.mapper"/>
</mappers> </configuration>
spring学习 六 spring与mybatis整合的更多相关文章
- Spring学习(六)-----Spring使用@Autowired注解自动装配
Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...
- Spring学习(十一)-----Spring使用@Required注解依赖检查
Spring学习(九)-----Spring依赖检查 bean 配置文件用于确定的特定类型(基本,集合或对象)的所有属性被设置.在大多数情况下,你只需要确保特定属性已经设置但不是所有属性.. 对于这种 ...
- Spring学习笔记--spring+mybatis集成
前言: 技术的发展, 真的是日新月异. 作为javaer, 都不约而同地抛弃裸写jdbc代码, 而用各种持久化框架. 从hibernate, Spring的JDBCTemplate, 到ibatis, ...
- Spring学习六(事物管理)
参考链接 http://www.mamicode.com/info-detail-1248286.html http://www.cnblogs.com/wangdaqian/archive/2017 ...
- Spring Cloud 学习 (六) Spring Cloud Config
在实际开发过程中,每个服务都有大量的配置文件,例如数据库的配置.日志输出级别的配置等,而往往这些配置在不同的环境中也是不一样的.随着服务数量的增加,配置文件的管理也是一件非常复杂的事 在微服务架构中, ...
- spring学习(三) ———— spring事务操作
前面一篇博文讲解了什么是AOP.学会了写AOP的实现,但是并没有实际运用起来,这一篇博文就算是对AOP技术应用的进阶把,重点是事务的处理. --wh 一.jdbcTemplate 什么是JdbcTem ...
- 学习笔记_J2EE_SSM_01_spring+springMVC+Mybatis整合_XML配置示例
spring+springMVC+Mybatis整合_XML配置示例 1.概述 spring+springMVC+Mybatis整合 XML配置方式 1.1 测试环境说明 名称 版本 备注 操作系统 ...
- MyBatis学习之SpringMvc和MyBatis整合
1. 整合流程 Dao层: 1. SqlMapConfig.xml,空文件即可,需要文件头. 2. applicationContext-dao.xml. a) 数据库连接池 b) SqlSessio ...
- springMVC学习(3)-springMVC和mybatis整合
一.需求:使用springmvc和mybatis完成商品列表查询. 二.整合思路:springMVC+mybaits的系统架构: 1步):整合dao层 mybatis和spring整合,通过sprin ...
随机推荐
- java根据wsdl调用webservice
本方法参考 Java核心技术 卷二 (第八版) 中10.6.2节相关内容,特与大家分享,欢迎大家批评指教 <a href="http://www.webxml.com.cn/" ...
- powerdesigenr设置主外键颜色
使用PowerDesigner时,它默认table的字体大小颜色等非常难看: 如果通过 Symbol ---> Format进行设置,只能对选中的最修改,新建的Table无效. 可以通过如下修改 ...
- python之栈和队列
1. 栈 1.1 示例 #!/usr/bin/env python # -*- codinfg:utf-8 -*- ''' @author: Jeff LEE @file: .py @time: 20 ...
- oracle中job定时任务96
.INTERVAL参数常用值示例 每天午夜12点 ''TRUNC(SYSDATE + 1)'' 每天早上8点30分 ''TRUNC(SYSDATE + 1) + ...
- mute
mute - 必应词典 英[mjuːt] n.哑吧:沉默的人:[法律]拒绝答辩的被告人:鸟粪 adj.哑的:缄默无言的:(一时)说不出话的:(猎狗)不叫的 v.排泄:减弱…的声音:柔和…的色调 网络静 ...
- CentOS常用的文件操作命令总结
我可以说是linux操作新手,有些命令经常忘记,特别是对文件的某些操作,经常要翻阅之前的笔记,今天把之前在百度上整理的“CentOS常用的文件操作命令”转载到我的新博客上面,以供后面查阅! 博客后面还 ...
- Java-排序算法-插入排序
一.插入排序的原理 将一个记录插入到一个已经排好序的有序表中,从而得到一个新的,记录数增1的新的有序表.从第一个元素开始,先将第一个元素看做一个排好序的子序列,然后从第二个元素开始起,对第二个元素进行 ...
- 【svn】服务器搭建和迁移
导语 svn客户端大部分开发都会用到,但是为什么我们仍然需要svn服务端呢? 理由可能有: 1,我们想存放一些属于自己的文档,而不像被其他人发现(在自己的网络环境中,安全性更高,更易用,不依赖于公司, ...
- 【疑】checkpoint防火墙双链路切换导致丢包问题
拓扑: 外线联通.电信各200M,通过边界交换机(纯二层,用于分线),分别接到主.备防火墙. 具体配置如下: 故障现象: 由于电信光缆中断导致电信链路不可用.大量员工反映频繁出现断网现象,通过公网注册 ...
- 项目总结07:JS图片的上传预览和表单提交(FileReader()方法)
JS图片的上传预览和表单提交(FileReader()方法) 一开始没有搞明白下面这块代码的,今天有时间简单整理下 核心点:FileReader()方法 以下是代码(以JSP文件为例) <!DO ...