Spring_mybatis结合之1.1
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代理开发之原始版
- 先创建工程,把所有的包都导入进来。
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的更多相关文章
- spring_mybatis :整合
第一步:导入相关架包(使用maven构建项目) 在pom.xml文件中导入相关依赖 1.Junit测试架包 <dependency> <groupId>junit</gr ...
- SpringMVC与mybatis整合
一.逆向工程生成基础信息 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generator ...
- Maven创建多个子项目
一.下载jdk并安装:下载apache-maven包,解压到指定目录.(例:D:\Java\apache-maven-3.3.9) 二.配置环境. 1.配置jdk环境 系统变量 (1)JAVA_HOM ...
- Spring与Mybatis整合
一 概述 1.整合的目的 将Mapper映射器的创建任务交给Spring容器. 二 具体实现 1.创建sqlSessionFactory: <bean id="sqlSessionFa ...
- 框架整合——Spring与MyBatis框架整合
Spring整合MyBatis 1. 整合 Spring [整合目标:在spring的配置文件中配置SqlSessionFactory以及让mybatis用上spring的声明式事务] 1). 加入 ...
- spring整合mybatis,批量扫描mapper接口出现异常
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c ...
- Spring+Mybatis整合时 Failed to read candidate component class,Caused by:IllegalArgumentException
Spring+Mybatis整合时Caused by: java.lang.IllegalArgumentException错误 org.springframework.beans.factory.B ...
- Maven项目中Spring整合Mybatis
Maven项目中Spring整合Mybatis 添加jar包依赖 spring需要的jar包依赖 <dependency> <groupId>org.springframewo ...
- SSM项目之电商项目easymall(一)
一 环境准备 软件环境: 1 jdk1.8 JAVA_HOME:是给软件用的,各种启动的软件都会寻找JAVA_HOME的环境变量: Path:给windows用的: ...
随机推荐
- P4221 [WC2018]州区划分 无向图欧拉回路 FST FWT
LINK:州区划分 把题目中四个条件进行规约 容易想到不合法当前仅当当前状态是一个无向图欧拉回路. 充要条件有两个 联通 每个点度数为偶数. 预处理出所有状态. 然后设\(f_i\)表示组成情况为i的 ...
- JVM科普
目录 再看前言 不完美的程序 Java发展史 JVM族谱 什么是广义的虚拟机? 什么是Java虚拟机(JVM)? 二刷周先生的<深入理解JVM>时,没想到已经出了第三版,拿着第二版的我在风 ...
- Gradient Centralization: 简单的梯度中心化,一行代码加速训练并提升泛化能力 | ECCV 2020 Oral
梯度中心化GC对权值梯度进行零均值化,能够使得网络的训练更加稳定,并且能提高网络的泛化能力,算法思路简单,论文的理论分析十分充分,能够很好地解释GC的作用原理 来源:晓飞的算法工程笔记 公众号 论 ...
- 18、Memento 备忘录模式
例如:用于记录快照(顺势状态).存盘 1.Memento Memento设计模式是一种软件设计模式,用于将对象回滚到其先前状态.它是行为设计模式的一部分,与算法和对象之间的职责分配有关. 行为模式描述 ...
- 19、Java 序列化
1.序列化的概念,意义以及使用场景 序列化: 将对象写入到IO流中,也就是把Java对象转换为字节序列的过程 反序列化: 从IO流中恢复对象*,也就是把字节序列恢复为Java对象的过程 意义: 序列化 ...
- Java异常机制,自定义异常以及spring boot异常设计方案
异常机制: 异常概念 异常分类 异常的处理方法 自定义异常 springboot 的异常解决方案
- 基于Python的AT命令测试脚本
对于各种有线&无线调制解调器(modem)产品来说,AT命令是事实上的标准接口之一,在工业界被广泛使用. 我开发了一套基于Python的AT命令测试脚本,源代码可在github上获取: htt ...
- 使用pytorchviz进行模型可视化出现 'NoneType' object has no attribute 'grad_fn'
问题 最近学习pytorch, 原来用kreas重现的模型改为用pytorch实现训练,因为这样给模型的操作更加细致, 对模型的掌控更好. 当我写好一个模型 出现了这个问题 使用pytorchviz进 ...
- 关于java中jdk的环境变量配置
关于java中jdk的环境变量配置 烦死人,在网上找了很长时间.最终找到了一个方法!现在将其总结帮助后来人. 方法/步骤 1 下载好jdk,并按照提示一步步安装,最后记下jdk所在的安装位置,这里 ...
- 图的DFS和BFS(邻接表)
用C++实现图的DFS和BFS(邻接表) 概述 图的储存方式有邻接矩阵和邻接表储存两种.由于邻接表的实现需要用到抽象数据结构里的链表,故稍微麻烦一些.C++自带的STL可以方便的实现List,使算 ...