1.Dao类继承org.mybatis.spring.support.SqlSessionDaoSupport
Spring配置文件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="userDaoImpl" class="xx.yy.impl.UserDaoImpl"> <property name="sqlSessionTemplate" ref="sqlSession" /> <!--或者直接注入SqlSessionFactory实例,二者都指定时,SqlSessionFactory会失效 --> <!-- <property name="sqlSessionFactory" ref="sqlSessionFactory" /> --> </bean>
UserDaoImpl.java
public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao { public User getUserById(User user) { return (User) getSqlSession().selectOne("xx.yy.User.getUser", user); } }
SqlSessionDaoSupport.java
/** * Copyright 2010-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mybatis.spring.support; import static org.springframework.util.Assert.notNull; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.dao.support.DaoSupport; /** * Convenient super class for MyBatis SqlSession data access objects. * It gives you access to the template which can then be used to execute SQL methods. * <p> * This class needs a SqlSessionTemplate or a SqlSessionFactory. * If both are set the SqlSessionFactory will be ignored. * <p> * {code Autowired} was removed from setSqlSessionTemplate and setSqlSessionFactory * in version 1.2.0. * * @author Putthibong Boonbong * * @see #setSqlSessionFactory * @see #setSqlSessionTemplate * @see SqlSessionTemplate * @version $Id$ */ public abstract class SqlSessionDaoSupport extends DaoSupport { private SqlSession sqlSession; private boolean externalSqlSession; public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) { if (!this.externalSqlSession) { this.sqlSession = new SqlSessionTemplate(sqlSessionFactory); } } public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) { this.sqlSession = sqlSessionTemplate; this.externalSqlSession = true; } /** * Users should use this method to get a SqlSession to call its statement methods * This is SqlSession is managed by spring. Users should not commit/rollback/close it * because it will be automatically done. * * @return Spring managed thread safe SqlSession */ public SqlSession getSqlSession() { return this.sqlSession; } /** * {@inheritDoc} */ @Override protected void checkDaoConfig() { notNull(this.sqlSession, "Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required"); } }
1>创建UserDaoImpl对象的时候,会调用父类中的setSqlSessionTemplate或者setSqlSessionFactory方法来注入sqlSession
2>UserDaoImpl的getUserById里面,直接调用getSqlSession()方法来获得之前注入的sqlSession对象
3>调用sqlSession的接口方法来执行具体的sql语句
2.不用继承SqlSessionDaoSupport,而是直接向Dao类中注入SqlSessionTemplate
(SqlSessionDaoSupport里面其实返回的就是SqlSessionTemplate对象)
UserDaoImpl.java
public class UserDaoImpl implements UserDao { public SqlSessionTemplate sqlSession; public User getUserById(User user) { return (User)sqlSession.selectOne("com.xxt.ibatis.dbcp.domain.User.getUser", user); } public void setSqlSession(SqlSessionTemplate sqlSession) { this.sqlSession = sqlSession; } }
Spring配置文件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <bean id="userDaoImpl" class="xx.yy.impl.UserDaoImpl"> <property name="sqlSession" ref="sqlSession" /> </bean>
1和2的整合方式差不太多,只是一个继承了SqlSessionDaoSupport,另一个直接注入SqlSessionTemplate
3.不直接使用SqlSession接口,而是使用org.mybatis.spring.mapper.MapperFactoryBean来自动生成映射器接口的代理实现,Dao里面直接调用Mapper接口来间接执行底层的sql语句
Spring配置文件
<!-- 引入jdbc配置文件 --> <context:property-placeholder location="jdbc.properties"/> <!--创建jdbc数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="initialSize" value="${initialSize}"/> <property name="maxActive" value="${maxActive}"/> <property name="maxIdle" value="${maxIdle}"/> <property name="minIdle" value="${minIdle}"/> </bean> <!-- 创建SqlSessionFactory,同时指定数据源--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 如果采用注解的方式将sql语句配置在Mapper接口的对应方法前面,configLocation不需要配置 --> <beans:property name="configLocation" value="classpath:conf/mybatis-config.xml" /> </bean> <!--创建数据映射器,数据映射器必须为接口--> <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> <property name="mapperInterface" value="xx.yy.dao.UserMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean> <bean id="userDaoImpl" class="xx.yy.dao.impl.UserDaoImpl"> <property name="userMapper" ref="userMapper"/> </bean>
UserMapper.java
public interface UserMapper { @Select("SELECT * FROM user WHERE id = #{userId}") User getUser(@Param("userId") long id); }
UserDaoImpl.java
public class UserDaoImpl implements UserDao { private UserMapper userMapper; public void setUserMapper(UserMapper userMapper) { this.userMapper = userMapper; } public User getUserById(User user) { return userMapper.getUser(user.getId()); } }
UserMapper.xml
<mapper namespace="xx.yy.dao.UserMapper"> <resultMap type="User" id="userMap"> <id property="id" column="id" /> <result property="name" column="name" /> <result property="password" column="password" /> <result property="createTime" column="createtime" /> </resultMap> <select id="getUser" parameterType="User" resultMap="userMap"> select * from user where id = #{id} </select> <mapper/>
4.如果Mapper接口比较多的时候,3.的spring配置文件里面要分别对每一个mapper增加配置,为了简化配置,可以使用org.mybatis.spring.mapper.MapperScannerConfigurer来自动扫描所有的mapper接口,并自动生成相应的mapper代理对象
spring配置文件
<!-- 引入jdbc配置文件 --> <context:property-placeholder location="jdbc.properties"/> <!--创建jdbc数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="initialSize" value="${initialSize}"/> <property name="maxActive" value="${maxActive}"/> <property name="maxIdle" value="${maxIdle}"/> <property name="minIdle" value="${minIdle}"/> </bean> <!-- 创建SqlSessionFactory,同时指定数据源--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 如果采用注解的方式将sql语句配置在Mapper接口的对应方法前面,configLocation不需要配置 --> <beans:property name="configLocation" value="classpath:conf/mybatis-config.xml" /> </bean> <!--配置扫描器--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="xx.yy.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> </bean>
当然如果业务逻辑比较简单的话,可以在service类里面直接注入Mapper接口进行dao操作,也可以单独设计一层dao层,然后将mapper接口注入到dao类里面进行使用.
1,2直接面对的是SqlSession接口,而3,4根据mapper接口自动生成代理实现类,增加了mapper层,使我们直接面对mapper接口层进行dao操作,从而不用关注底层的SqlSession接口
相关推荐
描述中提到"基本常用jar包的整合",意味着这个压缩包包含了一些基础且常用的库,这些库是进行Spring和MyBatis整合所必需的。例如,Spring的`spring-context`、`spring-beans`、`spring-jdbc`和`spring-tx`,以及...
这个"spring和mybatis整合小案例"项目,展示了如何将两者结合,构建一个可运行的Java Web应用。通过这个案例,开发者可以更好地理解和掌握Spring与MyBatis的整合技巧,提高开发效率,减少出错的可能性。
"03.Spring和MyBatis整合-全注解配置"可能进一步深入到如何在不使用XML配置的情况下,完全依赖注解来完成Spring和MyBatis的整合。这包括在Service层使用@Autowired注解注入Mapper接口,以及在Mapper接口的方法上使用...
Spring 和 Mybatis 是两个在...通过上述内容,我们可以看到Spring-Mybatis整合涉及到的核心知识点,包括框架的引入、配置、接口设计、事务管理和测试等多个方面。理解并掌握这些知识点,对于进行Java Web开发至关重要。
最后,`springMybatis`可能是指项目的根目录或者模块名称,通常包含`src/main/resources`下的Mybatis配置文件、Mapper接口和XML文件,以及`src/main/java`下的业务逻辑和服务层代码。 综上所述,"Spring整合Mybatis...
总结,这个压缩包提供了一个完整的Spring MVC和MyBatis整合的示例,包含了数据库脚本和详尽的注释,无论你是初学者还是有经验的开发者,都能从中受益。通过研究源码,你可以掌握Web应用的开发流程,理解Spring MVC和...
总的来说,Spring和MyBatis的整合是Java Web开发中常见且实用的技术栈,它结合了Spring的强大管理和事务控制能力,以及MyBatis的简单易用和灵活的SQL操作,为开发者提供了高效且可维护的解决方案。
以上就是Spring与MyBatis整合所需的关键知识点。在实际项目中,还需要根据具体需求进行适当的配置调整和优化,确保框架的高效协同工作。正确配置和理解这些概念对于Java开发者来说至关重要,因为它们构成了许多企业...
这个压缩包“Spring-SpringMVC-Mybatis整合所有jar包”包含了这三个框架整合所需的全部依赖,使得开发者能够快速搭建起一个功能完备的后端服务。 1. **Spring框架**:Spring是一个全面的开源应用框架,它提供了对...
3. **Spring与MyBatis整合**:整合Spring和MyBatis主要涉及以下几个步骤: - **配置数据源**:在Spring的配置文件中,我们需要定义数据源(DataSource),这是连接数据库的关键。 - **配置SqlSessionFactory**:...
"spring+mybatis整合包"是指将这两个框架进行集成,以实现更加高效和灵活的Java开发。下面将详细阐述Spring与MyBatis的整合过程、各自的核心功能以及它们在实际项目中的应用。 1. Spring框架:Spring是Java领域最...
首先,Spring 和 Mybatis 的整合主要涉及到以下几个步骤: 1. **引入依赖**:在项目中,你需要添加 Spring 和 Mybatis 相关的库。通常,这会通过 Maven 或 Gradle 的依赖管理来完成。确保在 `pom.xml` 或 `build....
在与MyBatis整合时,Spring可以作为容器来管理MyBatis的SqlSessionFactory和SqlSessionTemplate。 2. **MyBatis**: MyBatis是一个基于Java的持久层框架,它允许开发者编写XML或注解形式的SQL映射文件,将SQL语句与...
总结起来,整合Spring、SpringMVC和MyBatis涉及的主要步骤包括:导入必要的jar包、配置Spring的ApplicationContext、配置SpringMVC的servlet-context、设置数据源和SqlSessionFactory、编写Mapper接口和XML映射文件...
**SpringMVC、Spring和Mybatis是Java Web开发中的三大核心框架,它们的整合使用能够构建出高效、灵活的企业级应用程序。本DEMO将详细展示如何将这三个框架整合在一起,以便于开发者理解并掌握其集成过程。** 首先,...
8. **测试**:编写JUnit测试用例,验证Spring和MyBatis的整合是否正确,确保数据访问和业务逻辑的正确性。 在"SSHM文档"中,可能包含了更详细的步骤说明、配置示例以及运行示例项目的指导。通过这个教程,你可以...
这种整合方式既保留了Spring的 IoC 和 AOP 功能,又利用了MyBatis的简单和强大的SQL处理能力,是Java Web开发中的常见实践。在实际项目中,还可以结合Spring Boot和Spring Cloud等技术,构建微服务架构,进一步提升...
Spring和MyBatis整合的关键在于Mapper的代理实现。Spring通过MapperScannerConfigurer组件自动扫描并注册Mapper接口。在applicationContext.xml中加入以下配置: ```xml <bean class="org.mybatis.spring.mapper....
在这个压缩包中,我们找到了整合MyBatis和Spring所需的全部jar包,这对于初学者或者开发者搭建项目环境非常有帮助。下面我们将详细探讨这些jar包在SSM整合中的作用以及相关知识点。 1. **Spring框架**: Spring是...
SSM(Spring、SpringMVC和MyBatis)整合是Java Web开发中常见的技术栈,它结合了Spring框架的强大功能,SpringMVC的优雅请求处理,以及MyBatis的灵活数据库操作。本项目是一个入门级别的实例,旨在帮助初学者理解和...