Spring和mybatis结合,Spring管理容器,连接数据库等,mybatis负责管理sql语句,sql的入参和出参等

三种方法:

  • 1、原始dao开发(不怎么用,好奇的宝宝可以自己搜搜。是dao层继承一个整合包SqlSessionDaoSupport的类)
  • 2、mapper代理形式开发之原始版(有多少个接口,就得写多少个property)用整合包MapperFactoryBean
  • 比如
  • <property name="mapperInterface" value="cn.tsu.xiaofeng.mapperInterface.UserMapper"/>
  • 3、mapper代理形式开发之扫描包(直接写包名就行)用整合包MapperScannerConfigurer

1、原始dao开发略

2、mapper代理开发之原始版

  1. 先创建工程,把所有的包都导入进来。

    sqlMapConfig.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>
<typeAliases>
<package name="cn.tsu.xiaofeng.pojo"/>
</typeAliases>
<mappers>
<package name="cn.tsu.xiaofeng.mapperInterface"/>
</mappers>
</configuration>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
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
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.2.xsd "> <context:property-placeholder location="classpath:db.properties"/>
<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<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> <!--sqlsession工厂 相当于mybatis的前两句,创建 new sqlsession工厂
InputStream resource = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlsessionFactory = new SqlSessionFactoryBuilder().build(resource);
-->
<bean name="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
</bean> <!--dao接口开发方法一 -->
<bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!--MapperFactoryBean-->
<property name="sqlSessionFactory" ref="SqlSessionFactoryBean"/>
<property name="mapperInterface" value="cn.tsu.xiaofeng.mapperInterface.UserMapper"/>
</bean>

在这里我们以前说过mybatis直接使用时是用

InputStream resource = Resources.getResourceAsStream(“SqlMapConfig.xml”);

SqlSessionFactory sqlsessionFactory = new SqlSessionFactoryBuilder().build(resource);创建sqlsession工厂的,现在通过xml文件在容器中创建sqlsession工厂用的是整合包里的SqlSessionFactoryBean

<bean name="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:sqlMapConfig.xml"/> </bean>因缺数据源和配置文件,故注入

测试文件junit

public class JunitInterface {
@Test
public void testMapper() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = (UserMapper) ac.getBean(UserMapper.class);<!--在这里直接调用id也可以userMapper-->
User user = mapper.selectUser(1);<!--这里需要遵循四大原则-->
System.out.println(user);
}
}

方法2。直接把上面的bean(dao方法yi)换成下面的bean(dao方法二 扫包),用整合包中的MapperScannerConfigurer,不用SqlSessionFactoryBean

<!--dao接口开发方法二  -->
<bean name="MapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.tsu.xiaofeng.mapperInterface" />
</bean>

一旦用了方法二,再用junit测试的时候就不可以通过id使用了,因为我们没有定义name,

为什么方法二中不需要注入sqlsession工厂呢?

因为方法二会自动扫描容器中是否含有sqlsession,有的话直接用,并且把包名所有的的接口都扫描到并且注入实现类。因此当我们调用时,只需要调用实现类即可。比如

public class JunitInterface {
@Test
public void testMapper() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = (UserMapper) ac.getBean(UserMapper.class);<!--在这里不可直接调用id也可以userMapper-->
User user = mapper.selectUser(1);<!--这里需要遵循四大原则-->
System.out.println(user);
}
}

资源测试下载

Spring_mybatis结合之1.1的更多相关文章

  1. spring_mybatis :整合

    第一步:导入相关架包(使用maven构建项目) 在pom.xml文件中导入相关依赖 1.Junit测试架包 <dependency> <groupId>junit</gr ...

  2. SpringMVC与mybatis整合

    一.逆向工程生成基础信息 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generator ...

  3. Maven创建多个子项目

    一.下载jdk并安装:下载apache-maven包,解压到指定目录.(例:D:\Java\apache-maven-3.3.9) 二.配置环境. 1.配置jdk环境 系统变量 (1)JAVA_HOM ...

  4. Spring与Mybatis整合

    一 概述 1.整合的目的 将Mapper映射器的创建任务交给Spring容器. 二 具体实现 1.创建sqlSessionFactory: <bean id="sqlSessionFa ...

  5. 框架整合——Spring与MyBatis框架整合

    Spring整合MyBatis 1. 整合 Spring [整合目标:在spring的配置文件中配置SqlSessionFactory以及让mybatis用上spring的声明式事务] 1). 加入 ...

  6. spring整合mybatis,批量扫描mapper接口出现异常

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c ...

  7. Spring+Mybatis整合时 Failed to read candidate component class,Caused by:IllegalArgumentException

    Spring+Mybatis整合时Caused by: java.lang.IllegalArgumentException错误 org.springframework.beans.factory.B ...

  8. Maven项目中Spring整合Mybatis

    Maven项目中Spring整合Mybatis 添加jar包依赖 spring需要的jar包依赖 <dependency> <groupId>org.springframewo ...

  9. SSM项目之电商项目easymall(一)

    一 环境准备 软件环境:    1 jdk1.8       JAVA_HOME:是给软件用的,各种启动的软件都会寻找JAVA_HOME的环境变量:       Path:给windows用的:   ...

随机推荐

  1. 2020牛客暑期多校训练营 第二场 I Interval 最大流 最小割 平面图对偶图转最短路

    LINK:Interval 赛时连题目都没看. 观察n的范围不大不小 而且建图明显 考虑跑最大流最小割. 图有点稠密dinic不太行. 一个常见的trick就是对偶图转最短路. 建图有点复杂 不过建完 ...

  2. bzoj 2989: 数列

    LINK:数列 需要动一点脑子 考虑查询 暴力显然不行 考虑把绝对值拆开. 当x<=y ax<=ay时 有 y-x+ay-ax<=k x+ax>=y+ay-k 可以发现在满足前 ...

  3. Springboot开发web项目

    当前,Spring毫无疑问已经成为java后台对象管理标准框架,除了通过IOC能够管理我们的自定义对象的生命周期之外还提供了众多功能繁复的可配置功能模块.但同时带来了复杂的配置项,这对初学者而言简直是 ...

  4. 使用ProxySQL实现MySQL Group Replication的故障转移、读写分离(二)

    在上一篇文章<使用ProxySQL实现MySQL Group Replication的故障转移.读写分离(一) > 中,已经完成了MGR+ProxySQL集群的搭建,也测试了ProxySQ ...

  5. maven中的陌生单词

    有个单词记不住啊: artifact:人工制品,手工艺品,加工品; 石器; 词根:fac,fact,fect,fic,fig=make,do,表示“做,制作”   因此 art i fact 意思很好 ...

  6. maven项目的运行方式,maven私服的上传下载

    一.maven项目父子工程的运行方式 1.通过父项目的plugin下集成的tomacat run启动 2.通过自身项目的tomcat plugin启动,但前提是所依赖的项目必须全部都install(将 ...

  7. Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降

    深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...

  8. 003_对go语言中的工作池代码练习的一些思考和改进

    在进行工作池的代码练习时候,我发现了一个有趣的事情,首先看下面一段代码: package main import "fmt" import "time" fun ...

  9. 正确认识springcloud的作用。分布式从了解架构到springcloud支撑

    转载于 https://www.cnblogs.com/williamjie/p/9369681.html 基于springCloud的分布式架构体系   Spring Cloud作为一套微服务治理的 ...

  10. XCTF-WEB-高手进阶区-NaNNaNaNNaN-Batman-笔记

    上来直接百度先搜下Batman -_-|| 不存在的传令兵么 本身是下载下来了一个文件web100 打开发现是如下内容 可以看出这个是个脚本语言,因此尝试修改后缀为html,发现是一个OK框 现在是想 ...