一、dao接口+实现类的方式

  1、先创建好整合工程结构

  

  2、对于Spring和Mybatis 整合,我们先从数据库开始,即先创建一张简单的数据表,Sql如下

CREATE TABLE `t_user` (`id` INT(10) NOT NULL AUTO_INCREMENT,`username` VARCHAR(100) DEFAULT NULL,`password` VARCHAR(100) DEFAULT NULL,`address` VARCHAR(100) DEFAULT NULL,`sex` VARCHAR(10) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8复制代码

  然后根据从上面的数据表创建对应的实体类

 1 package cn.test.ssm.po;2 3 import java.io.Serializable;4 5 public class User implements Serializable {6     private int id;7     private String username;8     private String password;9     private String address;
10     private String sex;
11
12     public int getId() {
13         return id;
14     }
15
16     public String getUsername() {
17         return username;
18     }
19
20     public String getPassword() {
21         return password;
22     }
23
24     public String getAddress() {
25         return address;
26     }
27
28     public String getSex() {
29         return sex;
30     }
31
32     public void setId(int id) {
33         this.id = id;
34     }
35
36     public void setUsername(String username) {
37         this.username = username;
38     }
39
40     public void setPassword(String password) {
41         this.password = password;
42     }
43
44     public void setAddress(String address) {
45         this.address = address;
46     }
47
48     public void setSex(String sex) {
49         this.sex = sex;
50     }
51
52     public User(String username, String password, String address, String sex) {
53         this.username = username;
54         this.password = password;
55         this.address = address;
56         this.sex = sex;
57     }
58
59     public User() {
60     }
61
62     @Override
63     public String toString() {
64         return "User{" +
65                 "id=" + id +
66                 ", username='" + username + '\'' +
67                 ", password='" + password + '\'' +
68                 ", address='" + address + '\'' +
69                 ", sex='" + sex + '\'' +
70                 '}';
71     }
72 }复制代码

  3、然后我们开始配置Mybatis的相关配置文件,具体有Mybatis的核心配置文件SqlMapConfig.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE configuration3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"4         "http://mybatis.org/dtd/mybatis-3-config.dtd">5 <configuration>6 7     <typeAliases>8         <!--批量别名定义:Mybatis在定义别名的时候会自动扫描包中的po类,自动的将别名定义为类名(首字母大写或者小写都可以)-->9         <package name="cn.test.ssm.po"></package>
10     </typeAliases>
11
12     <!--配置一个SQL语句和映射的配置文件-->
13     <mappers>
14         <mapper resource="sqlmap/UserMapper.xml" />
15     </mappers>
16
17 </configuration>复制代码

  然后就是配置UserMapper.xml映射文件,由于只是测试Spring和Mybatis的整合,所以可以只是实现相对简单的功能,这样的话,UserMapper配置文件也就比较简单

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">5 <!--mapper为根元素,namespace指定了命名空间-->6 <mapper namespace="test">7 8     <select id="findUserById" parameterType="int" resultType="cn.test.ssm.po.User">9         SELECT * FROM t_user WHERE id = #{id}
10     </select>
11
12 </mapper>复制代码

  4、下来就是根据UserMapper中的statment实现的功能,写dao接口文件

1 package cn.test.ssm.dao;
2
3 import cn.test.ssm.po.User;
4
5 public interface UserDao {
6
7     public User findUserById(int id) throws Exception;
8 }复制代码

  5、我们编写dao接口的实现类。在dao接口的实现类过程中,我们需要知道,由于Spring整合Mybatis的原因,Spring需要管理SqlSessionFactory,而实现类方法中需要得到这个SqlSessionFactory,这里我们可以继承SqlSessionDaoSupport这个类,我们看一下这个类中的方法

  6、下来我们就具体的配置applicationContext配置文件,其中需要配置数据库信息,加载其他的配置文件,管理配置SqlSessionFactory(要加载Mybatis核心配置文件),然后我们管理UserDao接口的bean,同上面分析的,就需要配置SqlSessionFactory这个属性

 1 <?xml version="1.0" encoding="UTF-8"?>2 <beans xmlns="http://www.springframework.org/schema/beans"3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4        xmlns:context="http://www.springframework.org/schema/context"5        xmlns:aop="http://www.springframework.org/schema/aop"6        xmlns:tx="http://www.springframework.org/schema/tx"7        xsi:schemaLocation="8         http://www.springframework.org/schema/beans9         http://www.springframework.org/schema/beans/spring-beans.xsd
10         http://www.springframework.org/schema/aop
11         http://www.springframework.org/schema/aop/spring-aop.xsd
12         http://www.springframework.org/schema/context
13         http://www.springframework.org/schema/context/spring-context.xsd
14         http://www.springframework.org/schema/tx
15         http://www.springframework.org/schema/tx/spring-tx.xsd">
16
17
18     <!--加载数据库信息的配置文件-->
19     <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
20
21     <!--配置数据源-->
22     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
23         <property name="driverClass" value="${jdbc.driver}" />
24         <property name="jdbcUrl" value="${jdbc.url}" />
25         <property name="user" value="${jdbc.username}" />
26         <property name="password" value="${jdbc.password}" />
27     </bean>
28
29     <!--配置SqlSessionFactory-->
30     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
31         <!--加载Mybatis的配置文件-->
32         <property name="configLocation" value="mybatis/SqlMapConfig.xml"></property>
33         <!--配置数据源-->
34         <property name="dataSource" ref="dataSource"></property>
35     </bean>
36
37     <!--配置Dao接口-->
38     <bean id="userDao" class="cn.test.ssm.dao.UserDaoImpl">
39         <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
40     </bean>
41 </beans>复制代码

  7、编写好applicationContext之后,就开始实现UserDao这个接口,也是如同上面的分析,实现SqlSessionDaoSupport这个抽象类,从而得到SqlSessionFactory,在方法体内获取SqlSession

 1 package cn.test.ssm.dao;2 3 import cn.test.ssm.po.User;4 import org.apache.ibatis.session.SqlSession;5 import org.mybatis.spring.support.SqlSessionDaoSupport;6 7 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{8 9 //    SqlSessionDaoSupport中有 public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) 方法
10
11     @Override
12     public User findUserById(int id) throws Exception {
13         SqlSession sqlSession = getSqlSession(); //SqlSessionDaoSupport中有private SqlSession sqlSession;这个属性和方法
14         User user = sqlSession.selectOne("test.findUserById",1);
15         //使用spring来记性管理,在方法结束的时候就会自己关闭SqlSession
16         return user;
17     }
18 }复制代码

  8、编写相应的Junit进行测试

 1 package cn.test.ssm.dao;2 3 import cn.test.ssm.po.User;4 import org.apache.ibatis.session.SqlSession;5 import org.mybatis.spring.support.SqlSessionDaoSupport;6 7 public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{8 9 //    SqlSessionDaoSupport中有 public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) 方法
10
11     @Override
12     public User findUserById(int id) throws Exception {
13         SqlSession sqlSession = getSqlSession(); //SqlSessionDaoSupport中有private SqlSession sqlSession;这个属性和方法
14         User user = sqlSession.selectOne("test.findUserById",1);
15         //使用spring来记性管理,在方法结束的时候就会自己关闭SqlSession
16         return user;
17     }
18 }复制代码

  通过上面的测试程序得到结果

二、通过mapper代理方式

  1、mapper代理的方式进行整合,实际上比较重要的就是mapper接口和mapper配置文件在同一包下,且文件名相同即可,下面是使用mapper代理的方式的结构

  

  2、然后我么来配置UserMapper配置文件,需要注意的就是这个配置文件中需要将namespace设置为Mapper接口的路径

 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd">5 <!--mapper为根元素,namespace指定了命名空间-->6 <mapper namespace="cn.test.ssm.mapper.UserMapper">7 8     <select id="findUserById" parameterType="int" resultType="cn.test.ssm.po.User">9         SELECT * FROM t_user WHERE id = #{id}
10     </select>
11
12 </mapper>复制代码

  3、然后我们配置applicationContext配置文件,这里介绍两种配置,一种是单个Mapper的配置,一种的进行包扫描的配置

  ①单个Mapper的配置

    a)其中需要配置的就是MapperInterface接口和SqlSessionFactory两个属性,MapperInterface作用就是扫描指定的Mapper接口文件

    <!--配置mapper通过MapperFactoryBean来进行配置,该类能够根据mapper接口生成代理对象--><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><!--配置mapper接口--><property name="mapperInterface" value="cn.test.ssm.mapper.UserMapper"></property><!--配置SqlSessionFactory--><property name="sqlSessionFactory" ref="sqlSessionFactory"></property></bean>复制代码

    b)使用测试程序进行测试

 1 package test;2 3 import cn.test.ssm.dao.UserDao;4 import cn.test.ssm.mapper.UserMapper;5 import cn.test.ssm.po.User;6 import org.junit.Before;7 import org.junit.Test;8 import org.springframework.context.ApplicationContext;9 import org.springframework.context.support.ClassPathXmlApplicationContext;
10
11 import static org.junit.Assert.*;
12
13 public class UserMapperTest {
14     private ApplicationContext applicationContext;
15
16     @Before
17     public void setUp() throws Exception {
18         //得到spring的容器
19         applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
20     }
21
22     @Test
23     public void findUserById() throws Exception{
24         UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
25
26         User user = userMapper.findUserById(1);
27
28         System.out.println(user);
29     }
30 }复制代码

  c)通过观察日志分析结果如下:

  ②通过扫描mapper包的方式进行配置

    a)其中basePackage就是设置扫描的包,当有多个包需要扫描的时候,使用逗号隔开

1     <!--通过配置扫描器的方式解决上面配置存在的不足:当我们的Mapper接口比较多的时候,上面单个配置Mapper显然会比较繁琐,
2         所以我们可以使用扫描器的方式进行配置,将mapper包下面的所有接口同时进行扫描配置,显然,mapper接口的文件名和Mapper
3         配置文件的文件名应该相同
4     -->
5     <!--通过下面的这种配置:可以自动创建对象并且向spring容器中注入-->
6     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
7         <property name="basePackage" value="cn.test.ssm.mapper"></property>
8         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
9     </bean>复制代码

    b)测试程序和上面的测试程序相同,我们来运行测试程序,但是发现运行出了下面的异常

    c)通过查询资料,发现是由于Spring版本和Jdk版本不支持的原因,因为本次测试使用的Spring版本是3.2.x,然后该版本不支持jdk1.8,所以就需要修改jdk版本为1.7,如下图所示

  

  然后再次运行项目即可

  

转载于:https://juejin.im/post/5cdfed6ef265da1b6720dcaf

Mybatis和Spring整合相关推荐

  1. Mybatis与Spring整合之配置文件方式

    Mybatis与Spring整合之配置文件 案例制作步骤--基础准备工作 ⚫ 环境准备 导入Spring坐标,MyBatis坐标,MySQL坐标,Druid坐标 ⚫ 业务类与接口准备 创建数据库表,并 ...

  2. mybatis和spring整合时这个报错,应该这样解决!

    01 问题描述 今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下. 报错问题如下: org.springframework.beans.f ...

  3. 【MyBatis框架】mybatis和spring整合

    spring和mybatis整合 1.整合思路 需要spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactor ...

  4. Spring+SpringMVC+MyBatis深入学习及搭建(九)——MyBatis和Spring整合

    1.整合思路 需要Spring通过单例方式管理SqlSessionFactory. Spring和MyBatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(Sp ...

  5. Mybatis 与Spring整合及原理

    Mybatis 与Spring原理分析 http://www.mybatis.org/spring/zh/index.html 这里我们以传统的Spring 为例,因为配置更直观,在Spring 中使 ...

  6. MyBatis - 6.Spring整合MyBatis

    1.查看不同MyBatis版本整合Spring时使用的适配包: http://www.mybatis.org/spring/ 2.下载整合适配包 https://github.com/mybatis/ ...

  7. spring boot mybatis 整合_MyBatis学习:MyBatis和Spring整合

    1. 整合的工程结构 首先我们来看下整合之后的工程结构是什么样的. 2. 配置文件 在于spring整合之前,mybatis都是自己管理数据源的,然后sqlSessionFactory是我们自己去注入 ...

  8. MyBatis与Spring整合

    1. 使用Spring的数据源代替MyBatis的配置 <bean id="dataSource" class="org.springframework.jdbc. ...

  9. 【Spring】【MyBatis】Spring整合MyBatis01

    这是一个Spring整合MyBatis的第一次尝试,对于文件的命名和存放位置,也许有些不太合理,请见谅 需要数据库的请查阅[Mybatis]学习笔记01:连接数据库,实现增删改 - 萌狼蓝天 本文档使 ...

最新文章

  1. html中sprite标签,Three.js模型标签
  2. 这应该是你见过的最全前端下载总结
  3. EasyUI中Datagride数据网格的简单使用
  4. 《大道至简》第七八章读后感
  5. [蓝桥杯2017初赛]跳蚱蜢-map标记+bfs+环形数组
  6. React 篇 Search Bar and content Table
  7. 在使用代理的服务器上“curl: (6) Could not resolve host:“问题的解决方案
  8. android 模块混淆配置,使用android studio混淆多个模块
  9. AsciidocFX相关
  10. pn532跳坑小指南
  11. matlab xls转csv,使用python或Matlab将csv文件中的数据转换为csv文件
  12. 【HTML】HTML浏览器打印自定义页眉页脚
  13. 利用几何布朗运动模型预测股票价格_20200514_
  14. thinkphp 实现图片中的二维码识别
  15. dell笔记本驱动安装失败,Dell Vostro 5470 在安装读卡器驱动时失败
  16. 双语美文|治愈系英文段子,你对人生过敏吗
  17. python kivy 控件(小部件)的属性集合
  18. 对接阿里云opensearch
  19. 福建省计算机二级登录入口,福建省教育考试院官网登录入口
  20. 半桥BUCK电路—记录篇

热门文章

  1. LeetCode10.正则表达式匹配 JavaScript
  2. Apache2 httpd.conf 配置详解(一)
  3. Oracle中验证非空的函数NVL(),NVL2()总结
  4. 如何让自己的收件箱只收到自己订阅的邮件服务商
  5. asp.net去掉HTML标记代码
  6. 也谈Hashtable
  7. 5年後、10年後の自分のイメージ
  8. lstm处理时序数据结构图_详解LSTM
  9. LA3403天平难题(4个DFS)
  10. hdu4829 带权并查集(题目不错)