spring mvc mybatis
Spring与Mybatis整合需要引入一个mybatis-spring.jar包,该整合包有Mybatis提供,可以从Mybatis官网下载。
该jar包提供了几个API:
1.SqlSessionFactoryBean-为整合应用提供SqlSession对象资源。
在单独使用MyBatis时,所有操作都是围绕SqlSession展开的,SqlSession是通过SqlSessionFactory获取的,SqlSessionFactory又是通过SqlSessionFactoryBuilder创建生成的。
在Spring和Mybatis整合应用时,同样需要SqlSession,而SqlSessionFactoryBean组件的作用就是通过原SqlSessionFactoryBuilder生成SqlSessionFactory对象,为整合应用提供SqlSession对象。
SqlSessionFactoryBean在applicationContext.xml中定义格式如下:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定连接资源 -->
<property name="dataSource" ref="myDataSource"/>
<!-- 指定映射文件 -->
<property name="mapperLocations" value="classpath:org/tarena/entity/*.xml"/>
</bean>
在定义SqlSessionFactoryBean时,可以使用以下常用属性:
--dataSource:用于指定连接数据库的数据源
--mapperLocations:用于指定Mapper文件存放的位置
--configLocation:用于指定Mybatis的配置文件位置,如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性 指定的内容会覆盖该配置文件里面指定的对应内容。
--typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等 来进行分隔。
--typeAliases:数组类型,用来指定别名的,指定了这个属性后,Mybatis会把这个类型的短名称作为这个类型的别名。
2.MapperFactoryBean-根据指定Mapper接口生成Bean实例。
3.MapperScannerConfigurer-根据指定包批量扫描Mapper接口并生成实例。
在使用MapperFactoryBean时,有一个Mapper就需要定义一个对应的MapperFactoryBean。但当遇到大量Mapper时就需要使用使用MapperScannerConfigurer组件,通过这个组件会自动扫描各个Mapper接口,并注册对应的MapperFactoryBean对象。
在定义MapperScannerConfigurer时,只需要指定一个basePackage即可。basePackage用于指定Mapper接口所在的包,这个包及其所有子包下面的Mapper接口都将被搜索到,并把它们注册为一个个MapperFactoryBean对象。多个包之间可以使用逗号或者分号进行分隔。
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.tarena.mapper"/>
</bean>
注意:sqlSessionFactory属性可以不用指定,会以Autowired方式自动注入
MapperScannerConfigurer定义示例:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="org.tarena"/>
<property name="annotationClass" value="org.tarena.annotation.MyBatisRepository"/>
</bean>
上面配置定义:MapperScannerConfigurer自动扫描org.tarena包下所有接口,遇到带@MyBatisRepository标记的将对应MapperFactoryBean对象注册。
4.SqlSessionTemplate
上述整合完成后,程序可直接使用Spring容器中的Mapper接口实例进行编程。此外,mybatis-spring.jar还提供了一个SqlSessionTemplate组件,也可以将该组件注入给程序中的DAO,在DAO中利用SqlSessionTemplate编程。
基于SqlSessionTemplate的DAO示例代码如下
@Repository
public class MyBatisDeptDAO implements DeptDAO{
private SqlSession Template template;
@Autowired
public void setTemplate(SqlSession Template template){
this.template=template;
}
public List<Dept> findAll(){
List<Dept> list= template.selectList("findAll");
return list;
}
}
基于SqlSessionTemplate的DAO配置信息如下:
<!-- 定义SqlSessionTemplate -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!-- 扫描DAO并注入template -->
<context:component-scan base-package="org.tarena.dao"/>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
</bean>
整合步骤介绍
基于SpringMVC和MyBatis技术开发的主要步骤如下:
1.创建工程,搭建SpringMVC和MyBatis技术环境
1)创建一个Web工程
2)添加MyBatis相关技术环境
-引入数据库驱动包和MyBatis开发包
-引入dbcp连接池开发包
3)添加SpringMVC相关技术环境
-引入Spring IOC,JDBC,TX等支持的开发包
-引入Spring webmvc支持的开发包
-在src下添加applicationContext.xml配置文件
-在web.xml中配置DispatcherServlet主控制器
4)引入MyBatis和Spring整合开发包mybatis-spring.jar
2.基于MapperScannerConfigurer方式整合MyBatis的Mapper接口(推荐)
1)根据数据表编写实体类
2)编写Mapper映射文件,在XML中添加SQL操作的定义
3)编写Mapper接口,定义SQL操作方法
4)在Spring配置文件中定义以下Bean
-DataSource
-SqlSessionFactoryBean
-MapperScannerConfigurer
5)测试Spring容器的DAO组件
3.编写和配置SpringMVC的主要组件,例如:Controller,HandlerMapping,ViewResolver等
1)编写Controller和请求处理方法
2)配置<mvc:annotation-driven/>,支持@RequestMapping
3)配置Controller组件
-开启组件扫描,将Controller扫描到Spring容器
-需要DAO时采用注入方式使用
-在请求处理方法上使用@RequestMapping指定对应的请求
4)配置ViewResolver组件
4.编写JSP视图组件,利用标签和表达式显示模型数据
1)JSP可以使用JSTL标签库,需要引入开发包
2)JSP可以使用EL表达式
3)JSP可以使用SpringMVC的表单标签
5.测试程序






spring mvc mybatis的更多相关文章
- spring Mvc + Mybatis 中使用junit
在Spring Mvc + Mybatis的项目中我们有时候需要在测试代码中注入Dao操作数据库,对表进行增删改查,实现如下: 这是一般的maven项目项目结构 测试代码一般写在src/test/ja ...
- 基于Spring + Spring MVC + Mybatis + shiro 高性能web构建
一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJS,做了大量的研究,对前后端交互有了更深层次的认识. 今天抽个时间写这篇文章,我有预感,这将是一篇很详细的文章,详 ...
- spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...
- spring mvc+mybatis+多数据源切换
spring mvc+mybatis+多数据源切换,选取oracle,mysql作为例子切换数据源.oracle为默认数据源,在测试的action中,进行mysql和oracle的动态切换. web. ...
- Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码)
Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合(注解及源码) 备注: 之前在Spring3 + Spring MVC+ Mybatis 3+Mysql 项目整合中 ...
- [转]基于Spring + Spring MVC + Mybatis 高性能web构建
http://blog.csdn.net/zoutongyuan/article/details/41379851/ 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.Angula ...
- Spring+Spring MVC+MyBatis
Spring+Spring MVC+MyBatis 目录 一.新建一个基于Maven的Web项目 二.创建数据库与表 三.添加依赖包 四.新建POJO实体层 五.新建MyBatis SQL映射层 六. ...
- 基于Spring + Spring MVC + Mybatis 高性能web构建
基于Spring + Spring MVC + Mybatis 高性能web构建 一直想写这篇文章,前段时间 痴迷于JavaScript.NodeJs.AngularJs,做了大量的研究,对前后端交互 ...
- maven/eclipse搭建ssm(spring+spring mvc+mybatis)
maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...
- java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper
声明:该框架面向企业,是大型互联网分布式企业架构,后期会介绍linux上部署高可用集群项目. 项目基础功能截图(自提供了最小部分) 平台简介 Jeesz是一个分布式的框架,提供 ...
随机推荐
- struts2中方法拦截器(Interceptor)的中的excludeMethods与includeMethods的理解
http://www.cnblogs.com/langtianya/archive/2013/04/10/3012205.html
- Oracle分区表学习
(1) 表空间及分区表的概念表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间.分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应 ...
- 使用AutoMapper实现Dto和Model之间自由转换
应用场景:一个Web应用通过前端收集用户的输入成为Dto,然后将Dto转换成领域模型并持久化到数据库中.另一方面,当用户请求数据时,我们又需要做相反的工作:将从数据库中查询出来的领域模型以相反的方式转 ...
- index ffs、index fs原理考究-1109
h2 { margin-top: 0.46cm; margin-bottom: 0.46cm; direction: ltr; line-height: 173%; text-align: justi ...
- [转]Delphi I/O Errors
The following are the Windows API (and former DOS) IO errors, which are also the IO errors often ret ...
- java_设计模式_命令模式_Command Pattern(2016-08-09)
理解还不到位,先窜出来.等过一阵子再看,再理解. 定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 类型:行为类模式 类 ...
- java设计模式——单例(Singleton)模式
在某些场景,你需要找到一个承担职责的对象,并且这个对象是他所属类的唯一实例.此时可以使用单例模式. 单例模式的意图是为了确保一个类有且仅有一个实例,并为他提供一个全局的访问点.创建一个担当独一无二角色 ...
- Linux技巧总结(个人经验版)
1:善用桌面:1.图形界面的编辑,2.终端只要开机就在第2桌面,3.浏览器在第3桌面,4.娱乐在第4桌面. 2:cd命令中,输入中文目录很不方便,用 ln -s 桌面 desktop 创建软链接,不必 ...
- delphi定义自己的消息
定义一个消息需要两个步骤: 1.声明一个消息标识符 2.声明一个消息记录类型 一个消息标识符是一个整数大小的常数.Windows自用低于1024的消息,所以当你声明你自己的消息,你应该开始高于这一数字 ...
- const关键字与指针
const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...