Spring-Mybatis 整合的两种方式
整合Mybatis
回顾Mybatis
步骤:
导入相关包
- junit
- mybatis
- myssql
- spring
- aop
- mybatis-spring
编写配置文件
测试
导包
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.7.RELEASE</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.5</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
标准几个东西,顺便导入spring整合要用的一些包
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><typeAliases><package name="com.haoyun.POJO"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><package name="com.haoyun.mapper"/></mappers> </configuration>
User
@Data @AllArgsConstructor @NoArgsConstructor public class User {private int id;private String name;private String pwd; }
UserMapper
public interface UserMapper {List<User> selectUser();}
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.haoyun.mapper.UserMapper"><select id="selectUser" resultType="user">select * from user</select> </mapper>
Test
@Test public void UserMapper(){String resource ="mybatis-config.xml";InputStream inputStream = null ;try {inputStream = Resources.getResourceAsStream(resource);} catch (IOException e) {e.printStackTrace();}SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);SqlSession sqlSession = build.openSession();UserMapper mapper = sqlSession.getMapper(UserMapper.class);List<User> users = mapper.selectUser();for (User user : users) {System.out.println(user);}sqlSession.close(); }
mybatis-spring官方文档
http://mybatis.org/spring/zh/index.html
这里面涉及到mybatis-spring包的版本问题,如果spring版本和mybatis是5.0和3.5版本以上的,要使用Mybatis-spring2.0以上的包
最好就通过阅读mybatis-spring文档来学习
http://mybatis.org/spring/zh/getting-started.html
整合Mybatis方式一
spring的IoC特性,原先的Mybatis中的new对象方法都将制作为bean,进行依赖注入
整体结构
mybatis-spring的配置将一点点代替原有的mybatis-config.xml中的配置
spring-dao.xml可以专门存放dao层的设置
- mybatis都有这几个操作
- 使用SqlSessionFactoryBean读取连接数据库配置文件
- 产生sqlSessionFactory
- 再产生sqlSession
- 然后getMapper执行操作
都可以一一代替
配置数据源dateSource
<!--DateSource:使用spring的数据源替换mybatis的设置:c3p0、dbcp、druid--> <bean id="dateSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="123456"/> </bean>
mybatis中的配置数据源操作
给sqlSessionFactory注入dateSource
<!--sqlSessionFactory--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置数据源--><property name="dataSource" ref="dateSource" /><!--mybatis的核心配置文件,但是可以不写--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--相当于mappe package 添加mybatis.xml配置文件--><property name="mapperLocations" value="classpath:com/haoyun/mapper/UserMapper.xml"/><!--mybatis配置文件中能配置的在这都能配置--> </bean>
然后是注入sqlSession
<!--SqlSessionTemplate:就是SqlSession--> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"><!--只能使用构造器注入sqlSessionFactory,因为SqlSessionTemplate没有set方法--><constructor-arg index="0" ref="sqlSessionFactory"/> </bean>
这里的注入方法是官网给出的,因为进入SqlSessionTemplate的源码查看,是没有set方法的所以只能通过构造函数注入
mybatis-config中原有的操作,在spring中都能设置,不过还是建议留一点在mybatis-config.xml中,证明有mybatis-config.xml这个文件
原有的mybatis-config.xml就变成这样了
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><typeAliases><package name="com.haoyun.POJO"/></typeAliases> <!-- <settings>--> <!-- <setting name="" value=""/>--> <!-- </settings>--><!--一般会留下几个设置,证明使用了mybatis--><!-- <environments default="development">--> <!-- <environment id="development">--> <!-- <transactionManager type="JDBC"/>--> <!-- <dataSource type="POOLED">--> <!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>--> <!-- <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8"/>--> <!-- <property name="username" value="root"/>--> <!-- <property name="password" value="123456"/>--> <!-- </dataSource>--> <!-- </environment>--> <!-- </environments>--> <!-- <mappers>--> <!-- <package name="com.haoyun.mapper"/>--> <!-- </mappers>--> </configuration>
配置好spring-dao.xml,要多写一个实现UserMapper接口的实现类,用于注入
之前是通过getMapper,然后找到对应的mapper,才能产生对应的对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
现在要通过注入bean来产生对象,这个对象需要注入一个sqlSession才行,sqlsession就是sqlSessionTemplate,再实现类添加一个set方法注入sqlSessionTemplate,sqlSessionTemplate已将在上面注入好,id为sqlSession
添加这个实体类的作用就是能注入sqlSession
public class UserMapperImpl implements UserMapper {private SqlSessionTemplate sqlSession;public void setSqlSession(SqlSessionTemplate sqlSession) {this.sqlSession = sqlSession;}public List<User> selectUser() {UserMapper mapper = sqlSession.getMapper(UserMapper.class);return mapper.selectUser();} }
代理调用的是mapper.selectUser,这里又映射到UserMapper.xml的selectUser
<mapper namespace="com.haoyun.mapper.UserMapper"><select id="selectUser" resultType="user">select * from user</select> </mapper>
有了实体类就要给他注入bean
在applicationContext.xml中注册,因为spring-dao中编写的配置基本已经定形,不必更改了
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aophttps://www.springframework.org/schema/aop/spring-aop.xsd"><import resource="spring-dao.xml"/><bean id="userMapper" class="com.haoyun.mapper.UserMapperImpl"><property name="sqlSession" ref="sqlSession"/></bean> </beans>a
import spring-dao.xml配置
给userMapper,注入sqlSession,使用的reference引用已经写好的sqlSession bean
测试
@Test public void UserMapper(){ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserMapper userMapper = context.getBean("userMapper", UserMapper.class);List<User> users = userMapper.selectUser();for (User user : users) {System.out.println(user);} }
读取applicationContext配置文件后,直接getBean,就拿到了实体类对象,就可以调用里面的方法
这个整合,也就是以springIoC的特性把、读取数据源、产生SqlSessionFactory,产生sqlSession的操作都进行了依赖注入化,通过第三方获取特定的对象,实现解耦
整合Mybatis方式二
官方文档提供了一个抽象支持类,能提供一个sqlsession,调用getSqlSession就能得到一个SqlSessionTemplate,需要注入一个SqlSessionFactory或SqlSessionTemplate
注入SqlSessionFactory,就不用产生SqlSessionTemplate,这样在制作spring-dao.xml配置文件时能少注入一个SqlSessionTemplate
<!--SqlSessionTemplate:就是SqlSession--> <!-- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">--> <!-- <!–只能使用构造器注入sqlSessionFactory,因为SqlSessionTemplate没有set方法–>--> <!-- <constructor-arg index="0" ref="sqlSessionFactory"/>--> <!-- </bean>-->
开始注入
UserMapperImpl2
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{/*省去了注入的过程*/public List<User> selectUser() {return getSqlSession().getMapper(UserMapper.class).selectUser();} }
spring-dao.xml
<bean id="UserMapperImpl2" class="com.haoyun.mapper.UserMapperImpl2"><property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
注入sqlSessionFactory
测试方法和之前一样
Spring-Mybatis 整合的两种方式相关推荐
- spring配置属性的两种方式
spring配置属性有两种方式,第一种方式通过context命名空间中的property-placeholder标签 <context:property-placeholder location ...
- Spring系列教程八: Spring实现事务的两种方式
2019独角兽企业重金招聘Python工程师标准>>> 一. Spring事务概念: 事务是一系列的动作,它们综合在一起才是一个完整的工作单元,这些动作必须全部完成,如果有一个失败的 ...
- spring 注入bean的两种方式
我们都知道,使用spring框架时,不用再使用new来实例化对象了,直接可以通过spring容器来注入即可. 而注入bean有两种方式: 一种是通过XML来配置的,分别有属性注入.构造函数注入和工厂方 ...
- Spring定义Bean的两种方式:<bean>和@Bean
前言: Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. 今天通过S ...
- spring事务管理的两种方式
一.注解式事务 1.注解式事务在平时的开发中使用的挺多,工作的两个公司中看到很多项目使用了这种方式,下面看看具体的配置demo. 2.事务配置实例 (1).spring+mybatis 事务配置 &l ...
- Spring依赖注入的两种方式(根据实例详解)
1,Set注入 2,构造注入 Set方法注入: 原理:通过类的setter方法完成依赖关系的设置 name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法. ...
- Spring : Spring定义Bean的两种方式:lt; bean gt;和@Bean
1.美图 2.概述 Spring中最重要的概念IOC和AOP,实际围绕的就是Bean的生成与使用. 什么叫做Bean呢?我们可以理解成对象,每一个你想交给Spring去托管的对象都可以称之为Bean. ...
- springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据
1.使用注解的方式批量添加数据,在该方法中,传进来的参数是一个List集合,使用一个foreach 循环解析集合的数据,最后再批量保存到数据库,具体如下截图: 代码如下: //批量保存 @Insert ...
- spring aop日志(两种方式)
第一种方式(全注解): <!-- 定义事务管理器(声明式的事务) --> <bean id="transactionManager" ...
- 5.Maven和Eclipse整合(两种方式进行插件的安装),Maven相关设置,Eclipse下创建Maven项目
1 第一种方式是:在连网的情况下,通过在helpàInstall下安装. 新的地址是:http://download.eclipse.org/technology/m2e/releases 2 ...
最新文章
- Java的poi的excel导入怎么判断日期格式的单元格
- 大数据时代,数据科学都有些啥?
- 锦官城思享会-成都创业与商业CXO闭门会圆满举办
- OpenCV3学习(4.2)——图像常用滤波方法(方框、均值、高斯、中值、双边)
- Python爬取B站弹幕+Gephi梳理主线剧情
- java 指定格式的date_指定格式的日期字符串转化成java.util.Date类型日期对象
- Bailian4110 圣诞老人的礼物-Santa Clau’s Gifts【背包+贪心】
- 用python开发windows程序 [转]
- linux 查看进程打开的文件和库
- 联想ts250进bios_联想Think TS250完美安装server 2008 R2 | 涂涂小窝
- Maxthon2.5.10.2576 beta苦菜花增强优化防假死正式版(1031)
- svn版本管理软件——创建svn私人仓库
- 飞桨领航团武汉长沙回顾|识别皮肤病,一秒记笔记,AI还有哪些惊喜?
- AD使用技巧——如何改变布线走线的角度
- 基于springboot vue uniapp点餐外码系统源码(毕设)
- java中用length求二维数组的长度
- 内蒙古自治区律师事务所排名情况
- 再读新疆系列(一)——穿越准葛尔盆地
- 4.人工神经网络(一些例题)
- 【Linux:CentOS7】查看JDK版本信息报错解决