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

1. 整合的工程结构

首先我们来看下整合之后的工程结构是什么样的。

ea59ab2b7927402cac749a4d5b998202

2. 配置文件

在于spring整合之前,mybatis都是自己管理数据源的,然后sqlSessionFactory是我们自己去注入的,现在整合了,这些都要交给spring来管理了,来看一下beans.xml文件中的配置:

f06906745fac44378d361b3d8ff32b40

跟spring和hibernate整合的情况差不多,都是通过properties文件加载数据库连接信息,然后导入配置文件配置一下sessionFactory,下面看看db.properties和SqlMapConfig.xml文件。

384d4af823e64e6db6976f21690298e6
2e61d2ccaa2c4aafbc310f77db5ac624

3. dao方式开发的配置

在最开始我们提到,mybatis中有两种开发方式,一种dao开发方式,一种mapper开发方式,后者用的比较多,但是不排除没有使用dao方式的,所以两种我都总结一下,首先看dao方式开发的配置。

1)配置User.xml

在sqlMap包中有个User.xml,里面是针对用户的操作的一些配置,这里是整合,所以我就写了一个statement,如下:

b4b4f868cf99447d8914038db3db866a

只是通过id查询用户,如果测试成功,说明整合成功,这里写完了后,别忘了在SqlMapConfig.xml中加载这个映射文件,但是上面已经加载过了,即。

2)开发dao及其实现类

接下来就是开发dao及其实现类了,就一个方法,通过id查询用户,先来看下dao的方法:

2c2d434adda145a7bef1f9f2b26bce9a

再看下实现类:

d54201a334b642bbb29bfe2dd12a51c6

这里是重点:通过dao方式开发的话,dao的实现类在实现接口的同时,需要继承SqlSessionDaoSupport类,这个类中有获取SqlSession的方法,因为sqlSessionFactory已经在beans.xml文件中配置好了(下面有写),spring会自动注入进去,继承了SqlSessionDaoSupport类就可以直接通过getSqlSession()方法来获取sqlSession。然后就可以操作数据库了。

3)配置dao

上面也说了,要获取sqlSession必须得有sqlSessionFactory才行啊,这就需要spring来注入了,所以我们在beans.xml中配置一下该dao:

9938aca5a2f34ec5a1cd60b755ed1b64

这样的话,dao开发方式就整合好了,下面来测试一下。

11e8ecc90c82417ea8bbb9335cc33b2d

4. mapper方式开发的配置

mapper方法开发的话,mapper.xml和mapper.java文件要放在一个包下,这里主要放在ssm.mapper的包下了,下面看一下两个文件:

1)UserMapper.xml和UserMapper.java

20b5b866128d490a9c1017c51c1121d4
f3fe906b9fb24a21976d57bea11695b9

这个和之前的都一样,没什么难度,注意xml中的namespace要写成对应的java文件的完全限定名即可。

2)配置beans.xml

上面已经配置好了mapper的映射和接口了,那么如何由spring来产生一个代理对象呢?spring是通过MapperFactoryBean来创建代理对象的,看下面的配置:

ec2fea9494fd45959d908687613e5538

从配置中可以看出,使用MapperFactoryBean来产生mapper的代理对象,首先要配置一个mapperInterface,即你要spring产生哪个mapper接口对应的代理对象,所以肯定要把我们刚刚写好的mapper接口的完全限定名给传进去,spring就知道要创建对应的代理对象了。当然,sqlSessionFactory是必不可少的,否则怎么产生sqlSession呢?

但是问题来了,如果有很多个mapper接口咋整?那beans.xml中难道要写很多个这样的bean么?答案肯定不是这样,我们可以在beans.xml中通过扫描包即可,即告诉spring,你把指定的包中所有的mapper接口都给我生成一个代理对象出来,如下:

9cdb227fb498496f98d224b8375e6b1a

从上面的配置中可以看出,spring使用MapperScannerConfiger来进行mapper扫描的。要想扫描成功,必须遵循之前说的规范:即mapper.xml和mapper.java两个文件名必须保持一致,且在同一个目录下。这样的话,自动扫描出来的mapper的bean的id就为mapper类名的首字母小写。所以上面的bean没有id属性,因为这个是根据具体的mapper接口来的。basePackage是用来指定要扫描的包。这样就可以批量扫描mapper接口了。

到这里,spring和mybatis就整合好了。

学习相关推荐(编程必备辅助):

①:搜索关注公众号“只会写BUG”,分享更多干货知识,资讯,教程等

②:海量编程类资料零基础到高级亟待领取!!!

如果觉得对你有一丢丢帮助,麻烦动动你的小手指【关注】一下上面的公众号吧,或者【转发】让更多人看到该文章。大家也可积极后台给我留言,多多交流,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244467.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华三路由交换配置命令_华三路由器交换机配置命令

路由器:1、进入SETUP模式Router#setup2、时间设置router#clock set hh:mm:ss date moth year3、router>show historyRouter>terminal history size lines4、router#show version5、router#show running-config6、router#show starup-config7、router(config)#hostname na…

python中缩进_python编程中的缩进是什么意思

Python最具特色的是用缩进来标明成块的代码。我下面以if选择结构来举例。if后面跟随条件,如果条件成立,则执行归属于if的一个代码块。 下面对比C语言来看一下if ( i > 0 ) { x 1; y 2; } 如果i > 0的话,我们将进行括号中所包括的两个…

返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法

掘金输出的时间数据处理方法掘金在为使用者提供数据时,有一类数据处理起来有些麻烦,这类数据就是时间数据。它们长这样:或者这样:查看一下它们的类型,发现有datetime,datetime64,Timestamp等等。这么多各种各样的类型&…

springboot jwt token前后端分离_为什么要 前后端分离 ?

作 者:互扯程序来 源:互扯程序广而告之:由于此订阅号换了个皮肤,系统自动取消了读者的公众号置顶。导致用户接受文章不及时。您可以打开订阅号,选择置顶(星标)公众号,重磅干货,第一时间送达&…

mysql优化模糊查询_MySQL的LIKE模糊查询优化

%xxx%这种方式对于数据量少的时候,我们倒可以随意用,但是数据量大的时候,我们就体验到了查询性能的问题,像老化的车子艰难趴着坡一样,并且这种方式并未使用到索引,而是全表扫描mysql 高效模糊查询 代替like…

分计算iv值_一文读懂评分卡的IV、KS、AUC、GINI指标

前言:当一张评分卡构建完成时,筛选出一组特征生成了分数,我们会想要知道这个分数是否靠谱,即是否可以依赖这个分数将好坏客户区分开来,这个时候就需要评判评分卡有效性的指标。测量评分卡好坏区分能力的指标有许多&…

mysql 层_mysql三层体系

为什么有连接池和线程池?每创建一个新的会话(或链接),mysql内部创建一个新的用户线程来提供服务,当连接被销毁,线程也被销毁.即一个连接有一个线程.这种创建链接和销毁链接都会消耗cpu性能.为了降低这种消耗,有了连接池和线程池.连接池(connection pool)&#xff1a…

react登录页面_React 实现路由拦截

接到个新项目,使用的是React,由于React没有属于自己的路由拦截方法,只有自己封装Route成高阶组件来实现,现记录下实现的方式:首先创建一个router文件,引入项目需要展示的组件 。export const routes [{pat…

mysql 严格模式查看,如何查找和禁用MySQL严格模式?

Hello everybody I wanted to find this mysql strict mode for whmcs and disable it but i didnt had a progressIm a newbie so sry if I didnt mention other thingsCan anyone help me?Im working on WHM/Cpanel解决方案To turn off (or on) mysql strict access from cp…

linux 查找文件夹_用python打造一个基于socket的文件(夹)传输系统

这段时间在学习python,接触到了网络编程中的socket这块,加上自己在用的Linux服务器都是原生支持python的,于是乎有了个做文件传输功能程序的想法。毕竟python语言中,有下载功能的框架一抓一大把,但是主机与主机间快速搭…

mysql gtid 备份恢复_MySQL基于gtid特性与xtrabackup的数据恢复

一、gtid特性介绍:GTID(global transaction identifier)是MySQL 5.6的新特性,可以唯一的标识一个事务,由UUIDTID组成:UUID是MySQL实例的唯一标识TID是该实例上已提交的事务的数量在主从复制中,GTID代替了classic的复制…

编码gbk的不可映射字符_Python基础:编码表和字符的故事

在计算机内部,都是每8位组成的一个个字节,比如我们使用"abc".encode()把abc转化成二进制byte类型,注意byte是不可变类型: 编码过程>>> abc.encode() # 把str字符变为bytes字节类型;字符是一个个连接…

java mysql数据库编程_java JDBC数据库(mysql)编程

什么是JDBC• JDBC(Java Data Base Connectivity,Java数据库连接)• 是一种用于执行SQL语句的Java API,为多种关系数据库提供统一访问• 它由一组用Java语言编写的类和接口组成JDBC访问数据库步骤• 1:加载一个Driver驱动要通过JDBC与数据库连接&#xf…

python数据分析包pandas_Python 数据分析包:pandas 基础

pandas 是基于 Numpy 构建的含有更高级数据结构和工具的数据分析包 类似于 Numpy 的核心是 ndarray,pandas 也是围绕着 Series 和 DataFrame 两个核心数据结构展开的 。Series 和 DataFrame 分别对应于一维的序列和二维的表结构。pandas 约定俗成的导入方法如下&…

mysql 查询分析器中使用if_查询分析器中开发代码测试检查_MySQL

如果您像我一样,则可能已经花费了很多时间在查询分析器中开发代码。在您对代码感到满意之后,可以立即对开发服务器上的测试数据库运行一个或两个专设 测试。如果看起来没有什么问题,您便可以将代码投入生产。如果这是一段关键代码&#xff0c…

python文本清洗_【python】TXT文本数据清洗和英文分词、词性标注

删除空白行def clean_line (raw_file_name save_file_name):张开(raw_file_name, r )作为f_r,开放(save_file_name, w ) f_w: f_r_list 列表(设置(f()))在f_r_list句子:如果句子 \u201C\\ n\u201D: f_r_(句子)f (f_r_list)阅读文本的每一行作为一个列表,然后使用一组集合来删除…

centeros6.8 mysql_centeros7安装mysql8,以及设置root密码

2.点击下载后,在下载页面选择操作系统3.点击下载rpm文件,拿到这个下载链接4.移除mariadb数据库yum remove mariadb-libs.x86_645.进入到/tmp目录使用wget下载wget https://repo.mysql.com//mysql80-community-release-el7-2.noarch.rpm6.安装mysql的源yu…

mysql 中文字段名_MySQL全文索引怎么做?| 教程分享

- 点击上方“爱数据学习社”关注我们吧! -文末领取【商业分析资料】为什么要用全文索引我们在用一个东西前,得知道为什么要用它,使用全文索引无非有以下原因:like查询太慢、json字段查询太慢(车太慢了)没时间引入ElasticSearch、S…

centos php mysql 5.6 安装_centos 6.8 yum安装 PHP 5.6

1.检查当前安装的PHP包。yum list installed | grep php2.如果有安装的PHP包,先删除他们。先复制到文本中,编辑成一行,在执行。yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64php-mbstring.x86_64 p…

leftjoin多个on条件_MYSQL|为什么LEFT JOIN会这么慢?

之前谈了怎样后台导出SAP序时账,因为导出的序时账数据量较大(3家主体公司,2017-2020年的数据),用了数据库MYSQL中的LEFT JOIN 来处理连接多表汇总数据,查询太慢啦,后来沦落到用手工分年来汇总数据,然后再导…