Spring+SpringMVC+MyBatis深入学习及搭建——MyBatis和Spring整合
转载请注明出处:
前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(八)——MyBatis查询缓存
1.整合思路
需要Spring通过单例方式管理SqlSessionFactory。
Spring和MyBatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(Spring和MyBatis整合自动完成)
持久层的mapper都需要由Spring进行管理。
2.整合环境
创建一个java工程(接近实际开发的工程结构)
jar包:
mybatis3.2.7的jar包
spring3.2.0的jar包
dbcp连接池
数据库驱动
mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。
3.spring配置文件
在applicationContext.xml配置sqlSessionFactory和数据源。SqlSessionFactory在mybatis和spring的整合包下。
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans "><!-- 加载配置文件 --><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><!-- SqlSessionFactory配置 --><!-- 让Spring管理SqlSessionFactory使用mybatis和spring整合包中的 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 加载mybatis的全局配置文件 --><property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml" /></bean></beans>
4.Mapper编写的三种方法
4.1原始dao开发(和spring整合后)
4.1.1User.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"><!--namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离 注意:使用mapper代理开发时,namespace有特殊作用 --><mapper namespace="test"><!--在映射文件中配置很多sql语句 --><!--需求:通过id查询用户表的记录 --><!--id:标识映射文件中的sql,称为statement的id。将sql语句封装在mapperStatement的对象中,所有id称为Statement的id; parameterType:指定输入参数的类型,这里指定int型; #{}:表示一个占位符; #{id}:其中id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以是value或其它名称; resultType:指定输出结果所映射的Java对象类型,select指定resultType表示将单条记录映射成Java对象。 --><select id="findUserById" parameterType="int" resultType="joanna.yan.po.User">select * from user where id=#{value}</select> </mapper>
在SqlMapConfig.xml中加载User.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> <!-- 批量别名的定义: package:指定包名,mybatis会自动扫描包中的pojo类,自定义别名,别名就是类名(首字母大写或小写都可以) --> <typeAliases> <package name="joanna.yan.po"/> </typeAliases><mappers><mapper resource="sqlmap/User.xml"/><!-- 批量加载映射配置文件,mybatis自动扫描包下的mapper接口进行加载; 遵循一定的规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中; 以上规范的前提是:使用的是mapper代理方法; --><package name="joanna.yan.mapper"/></mappers> </configuration>
4.1.2 dao(实现类继承SqlSessionDaoSupport)
public interface UserDao {//根据id查询用户信息public User findUserById(int id) throws Exception; }
dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。
这里用spring声明配置方式,配置dao的bean:让UserDaoImpl实现类继承SqlSessionDaoSupport。
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{ @Overridepublic User findUserById(int id) throws Exception {//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession=this.getSqlSession(); User user=sqlSession.selectOne("test.findUserById", id);return user; } }
4.1.3配置dao
在applicationContext.xml中配置dao。
<!-- 方法一:原始dao接口 --><bean id="userDao" class="joanna.yan.dao.UserDaoImpl"><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>
4.1.4测试程序
public class UserDaoImplTest {private ApplicationContext applicationContext; @Beforepublic void setUp(){ applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); } @Testpublic void findUsetByIdTest() throws Exception{ UserDao userDao=(UserDao) applicationContext.getBean("userDao"); User user=userDao.findUserById(1); System.out.println(user); } }
4.2mapper代理开发
4.2.1mapper.xml和mapper.java
<?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"><!--namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离 注意:使用mapper代理开发时,namespace有特殊作用,namespace等于mapper接口地址 --><mapper namespace="joanna.yan.mapper.UserMapper"><select id="findUserById" parameterType="int" resultType="user">select * from user where id=#{value}</select></mapper>
public interface UserMapper {public User findUserById(int id) throws Exception; }
4.2.2通过MapperFactoryBean创建代理对象
在applicationContext.xml中配置mapper。
<!-- 方法二:mapper配置 MapperFactoryBean:根据mapper接口生成代理对象 --><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="joanna.yan.mapper.UserMapper" /><property name="sqlSessionFactory" ref="sqlSessionFactory" /></bean>
4.2.3测试程序
public class UserMapperTest {private ApplicationContext applicationContext; @Beforepublic void setUp(){ applicationContext=new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); } @Testpublic void findUsetByIdTest() throws Exception{ UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper"); User user=userMapper.findUserById(1); System.out.println(user); } }
此方法的问题:需要针对每个mapper进行配置,麻烦。
4.3通过MapperScannerConfigurer进行mapper扫描(建议使用)
在applicationContext.xml中配置mapper批量扫描。
<!-- 方法三:mapper批量扫描 从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册 遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中。 自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 指定扫描的包名 如果扫描多个包,每个包中间使用半角逗号分隔 --><property name="basePackage" value="joanna.yan.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>
此时,SqlMapConfig.xml中批量加载joanna.yan.mapper下mapper的配置就可以省略掉了。
测试程序:
@Testpublic void findUsetByIdTest() throws Exception{ UserMapper userMapper=(UserMapper) applicationContext.getBean("userMapper"); User user=userMapper.findUserById(1); System.out.println(user); }
以上是Spring+SpringMVC+MyBatis深入学习及搭建——MyBatis和Spring整合的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题











MyBatis动态SQL标签解读:Set标签用法详解MyBatis是一个优秀的持久层框架,它提供了丰富的动态SQL标签,可以灵活地构建数据库操作语句。其中,Set标签是用于生成UPDATE语句中SET子句的标签,在更新操作中非常常用。本文将详细解读MyBatis中Set标签的用法,以及通过具体的代码示例来演示其功能。什么是Set标签Set标签用于MyBati

学习C语言的魅力:解锁程序员的潜力随着科技的不断发展,计算机编程已经成为了一个备受关注的领域。在众多编程语言中,C语言一直以来都备受程序员的喜爱。它的简单、高效以及广泛应用的特点,使得学习C语言成为了许多人进入编程领域的第一步。本文将讨论学习C语言的魅力,以及如何通过学习C语言来解锁程序员的潜力。首先,学习C语言的魅力在于其简洁性。相比其他编程语言而言,C语

MyBatis的缓存机制解析:一级缓存与二级缓存的区别与应用在MyBatis框架中,缓存是一个非常重要的特性,可以有效提升数据库操作的性能。其中,一级缓存和二级缓存是MyBatis中常用的两种缓存机制。本文将详细解析一级缓存与二级缓存的区别与应用,并提供具体的代码示例进行说明。一、一级缓存一级缓存也被称为本地缓存,它默认开启且不可关闭。一级缓存是SqlSes

在word中编辑文字内容时,有时会需要输入公式符号。有的小伙们不知道在word根号输入的方法,小面就让小编跟小伙伴们一起分享下word根号输入的方法教程。希望对小伙伴们有所帮助。首先,打开电脑上的Word软件,然后打开要编辑的文件,并将光标移动到需要插入根号的位置,参考下方的图片示例。2.选择【插入】,再选择符号里的【公式】。如下方的图片红色圈中部分内容所示:3.接着选择下方的【插入新公式】。如下方的图片红色圈中部分内容所示:4.选择【根式】,再选择合适的根号。如下方的图片红色圈中部分内容所示:

玩家在雾锁王国中进行游戏时可以收集不同的材料用来建造建筑,有很多玩家想知道野地搭建筑吗,雾锁王国能野地是不能搭建筑的,必须要在祭坛的范围内才可以搭建。雾锁王国能野地搭建筑吗答:不能。1、雾锁王国能野地是不能搭建筑的。2、建筑必须要在祭坛的范围内才可以搭建。3、玩家可以自行放置灵火祭坛,但一旦离开了范围,将无法进行建筑搭建。4、我们也可以直接在山上挖个洞当做我们的家,这样不用耗建筑材料。5、玩家自己搭建的建筑中,存在舒适度机制,也就是说,内饰越好,舒适度越高。6、高舒适度将为玩家带来属性加成,例如

标题:从零开始学习Go语言中的main函数Go语言作为一种简洁、高效的编程语言,备受开发者青睐。在Go语言中,main函数是一个入口函数,每个Go程序都必须包含main函数作为程序的入口点。本文将从零开始介绍如何学习Go语言中的main函数,并提供具体的代码示例。一、首先,我们需要安装Go语言的开发环境。可以前往官方网站(https://golang.org

MyBatis是一款流行的持久层框架,它提供了方便的SQL映射和数据库操作功能,让开发者能够更加高效地与数据库进行交互。在实际开发过程中,我们有时候需要在控制台实时打印出MyBatis执行的SQL语句,以便更好地调试和优化SQL查询。本文将介绍如何实现在MyBatis中控制台实时打印SQL,并提供具体的代码示例。首先,我们需要在My

PyTorch安装指南:在PyCharm中快速搭建开发环境PyTorch是当前深度学习领域中备受欢迎的框架之一,具有易用性和灵活性的特点,深受开发者青睐。本文将为大家介绍如何在PyCharm中快速搭建PyTorch的开发环境,方便大家开始深度学习项目的开发。步骤一:安装PyTorch首先,我们需要安装PyTorch。PyTorch的安装通常需要考虑到系统环境
