【MyBatis-Spring】Mybatis和并入Spring框架
1.参考书籍:《深入浅出MyBatis技术原理与实战》
2.知识基础:Spring、Mybatis、Spring MVC。
配置数据源
配置SqlSessionFactory
SqlSessionFactory的作用是生成SqlSession。
org.mybatis.spring.SqlSessionFactoryBean类负责读取数据源和Mybatis的配置文件路径。解析配置文件后连同数据源一起保存在Spring Bean里面
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
destroy-method="close">
<!--驱动类名 -->
<property name="driverClass" value="${mysql.driver}" />
<!-- url -->
<property name="jdbcUrl" value="${mysql.url}" />
<!-- 用户名 -->
<property name="user" value="${mysql.username}" />
<!-- 密码 -->
<property name="password" value="${mysql.password}" />
<!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->
<property name="acquireIncrement" value="${mysql.acquireIncrement}"></property>
<!-- 初始连接池大小 -->
<property name="initialPoolSize" value="${mysql.initialPoolSize}"></property>
<!-- 连接池中连接最小个数 -->
<property name="minPoolSize" value="${mysql.minPoolSize}"></property>
<!-- 连接池中连接最大个数 -->
<property name="maxPoolSize" value="${mysql.maxPoolSize}"></property>
</bean>
<!--3 会话工厂bean sqlSessionFactoryBean -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 配置文件路径 -->
<property name="configLocation" value="classpath:MyBatisCfg.xml"></property>
<!-- 数据源 -->
<property name="dataSource" ref="datasource"></property>
<!-- sql映射文件路径 -->
<property name="mapperLocations" value="classpath*:com/xdsux/spring2/mapping/*Mapper.xml"></property>
</bean>
数据源使用C3P0数据源,具体参数单独用一个db.properties配置。
Spring在初始化IOC容器的时候将初始化SqlSessionFactoryBean。
映射文件路径可以在这一步配置,也可以在Mybatis配置文件中配置。
<configuration>
<!-- 指定数据库连接信息的位置 -->
<properties resource="db.properties"></properties>
<settings>
<!--指定mybatis使用日志组件 -->
<setting
name="logImpl"
value="LOG4J2" />
<!--开启全局的二级缓存 -->
<setting
name="cacheEnabled"
value="false" />
<!--开启延时加载,如果有关联关系,则默认不会获取数据 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。
在association中指定fetchType="eager(立即)" 或者 lazy(延迟) 默认:false -->
<setting
name="lazyLoadingEnabled"
value="true" />
<!--true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载; false,每种属性将会按需加载。 默认为:true -->
<setting
name="aggressiveLazyLoading"
value="false" />
</settings>
<!--类型别名,默认引入com.xdsux.spring2.entities下的所有类 -->
<typeAliases>
<package name="com.xdsux.spring2.entities" />
</typeAliases>
<!-- <environments default="development"> <environment id="development">
<transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver"
value="${driver}" /> <property name="url" value="${url}" /> <property name="username"
value="${username}" /> <property name="password" value="${password}" /> </dataSource>
</environment> </environments> <mappers> 引入映射文件 <mapper resource="com/xdsux/spring2/mapping/GoodsMapper.xml"
/> </mappers> -->
</configuration>
environments、mappers在Spring那里已经配置了,所以这里注释掉了。<setting>还有更多设置,再说。
其实Spring IOC已经可以配置非常多的属性了,但是遇到复杂的配置时,建议使用MyBatis的配置文件,因为一般实际项目中,Spring的配置文件已经相当复杂了。配置在Mybatis中更便于管理,可读性也更高。
配置SqlSessionTemplete
一般使用SqlSessionFactoryBean就可以了,但在定制化编程时可以配置SqlSessionTemplete。
配置Mapper
<!--4 自动扫描对象关系映射 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
<!-- 指定要自动扫描接口的基础包,实现接口 -->
<!-- <property name="basePackage" value="com.xdsux.spring2.mapper"></property> -->
<property name="basePackage" value="com.xdsux.spring2.dao"></property>
</bean>
Mapper只是接口,不是实现类。
Spring-MyBatis通过MapperFactoryBean作为中介,动态代理生成实现类。他有三个参数:
mapperInterface:用于制定接口,其继承者就被认为时一个Mapper
SqlSessionFactory:SqlSessionTemplete属性不被配置时,该属性将被设置
SqlSessionTemplete:这个属性被设置的时候,SqlSessionFactory属性作废。
Spring-Mybatis项目通常采用的配置:
MapperScannerConfiger:采用自动扫描的形式配置映射器。
配置事务处理
MyBatis-Spring使用Spring AOP管理事务:
<!--5 声明式事务管理 -->
<!--定义事物管理器,由spring管理事务 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource"></property>
</bean>
<!--支持注解驱动的事务管理,指定事务管理器 -->
<tx:annotation-driven transaction-manager="transactionManager" />
【MyBatis-Spring】Mybatis和并入Spring框架的更多相关文章
- Spring+MyBatis框架中sql语句的书写,数据集的传递以及多表关联查询
在很多Java EE项目中,Spring+MyBatis框架经常被用到,项目搭建在这里不再赘述,现在要将的是如何在项目中书写,增删改查的语句,如何操作数据库,以及后台如何获取数据,如何进行关联查询,以 ...
- SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- 手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)
手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版) SSM(Spring+SpringMVC+Mybatis),目前较为主流的企业级架构方案.标准的MVC设计模式, ...
- Maven+Spring+Mybatis+Security+Mysql简短的框架
一段时间想搞个框架做开发,但是网上好多代码建立的都太杂乱.有的开源的东西我感觉用不了.本人太笨,不懂怎么上传到github上,就写在博客里,留作记录.以后用的时候也方便. 1.首先让我们看一下项目结构 ...
- 【整理】JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系
#[整理]JavaEE基本框架(Struts2+Spring+MyBatis三层,Struts MVC)之间的关系 
java-websocket该建筑是easy.儿童无用的框架可以在这里下载主线和个人教学好java-websocket计划: Apach Tomcat 8.0.3+MyEclipse+maven+JD ...
- 整合最优雅SSM框架:SpringMVC + Spring + MyBatis
我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教学课堂中,也会把SSH作为最核心的教学内容. 但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配 ...
- 最优雅SSM框架:SpringMVC + Spring + MyBatis
在写代码之前我们先了解一下这三个框架分别是干什么的? 相信大以前也看过不少这些概念,我这就用大白话来讲,如果之前有了解过可以跳过这一大段,直接看代码! SpringMVC:它用于web层,相当于con ...
- springMVC,spring,mybatis全注解搭建框架--第一步,让框架跑起来
自己从事java开发工作也有一年多了,自己却没有亲手搭建一个完整的框架.于是今天自己动手搭建一个,过程中遇到一些问题,倒腾了大半天终于搞定了. 现在给大家分享一下过程,自己也记录下来,以后学习参考使用 ...
- Spring+Mybatis+Mysql搭建分布式数据库访问框架
一.前言 用Java开发企业应用软件, 经常会采用Spring+MyBatis+Mysql搭建数据库框架.如果数据量很大,一个MYSQL库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...
随机推荐
- C#调用C++的dll EntryPointNotFoundException
问题描述:不带参数的函数可以通过C#调用,含有参数的函数报错: EntryPointNotFoundException:此外,采用depends可以查看到所有导出函数. 此问题解决方案:步骤1:在C+ ...
- jakarta-taglibs-standard-1.1.0查找下载
- open函数新建文件报错
报错原因很多,我这里只写我遇到的: 给的路径或者文件名中包含了这些字符的:/\:*?"><| 都不行,我说的是Windows平台下的.
- C#使用List实现类似RadioButtonGroup的单选功能
首先说说需求,有多种不同类型的UserControl用于以不同的方式显示数据,想通过在另一个view中实现某种点击选中按钮后,在数据显示view中,只让被逻辑关联的UserControl显示(Visi ...
- PHP5.5.38版本Zend Guard loader for 5.5安装(详细)
第一次在博客园写东西记录自己,不,可以说第一次在网上写东西记录自己,我只是个菜鸟,具体的不太懂, 但是作为一个菜鸟我肯定把我遇到的问题给详细的表述出来,大神勿喷.在安装Zend Guard loade ...
- TS和C#的差异
1. TS中let a : () => void; 假设有个class B, B里有个方法 c; 不能像C#委托一样, a = B.c;...........如果这样的话方法c里调用的thi ...
- 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计
在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ...
- file常用功能
构造方法 File(String pathname):将指定的路径名转换成一个File对象 File f = new File("D:\\a\\b.txt"); File(Stri ...
- mysql Table 'user' is marked as crashed and should be repaired
myisamchk -f x:\xxxxxxxxx\MySQL\data\mysql\*.MYI
- 聚宽获取财务数据+DataFrame写入txt
from jqdata import jy from jqdata import * #获取股票列表,这里是板块内股票 pool=get_industry_stocks(',date='2016-09 ...