当前位置: 首页 > news >正文

spring整合通用mapper

1.使用通用mapper可以更快速的进行数据库的增删查改操作,加入springboot的管理,常规的SQL都可以复用
2.整合
 a)引入依赖

    <dependencies><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId><version>2.0.2</version></dependency>
<!--Mybatis依赖--><!--Mybatis依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency>
<!--数据库连接依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>
<!--springboot整合web依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></exclusion><exclusion><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId></exclusion></exclusions></dependency></dependencies>

. 1)注意:这里由于引入的依赖包含好多spring有关的依赖,导致spring的版本可能不兼容.因此还需要增加以下标签,实现对所有有关spring的依赖版本的管理,使版本一一致或兼容

<!--统一管理springboot版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version><relativePath/></parent>

.b)配置文件

server:port: 8080
#jdbc
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/project1?useUnicode=true&characterEncoding=utf8username: rootpassword: 123456
#mybatis
mybatis:type-aliases-package: com.brant.entity
#通用mapper配置
mapper:mappers: com.brant.basedao.IBaseDaoidentity: MYSQL

.c)配置启动类,这里需要注意MapperScan需要引入tk的包

@SpringBootApplication
@MapperScan({"com.brant.dao"})
public class MyApplication {public MyApplication() {}public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

.d)建立src目录
在这里插入图片描述
e)生成数据库和表cities
1)sql

create table cities(id int primary key auto_increment,cityid varchar(20) not null,city varchar(20) not null,provinceid varchar(20) not null
);INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '110100', '市辖区', '110000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '110200', '县', '110000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '120100', '市辖区', '120000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '120200', '县', '120000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130100', '石家庄市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130200', '唐山市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130300', '秦皇岛市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130400', '邯郸市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130500', '邢台市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130600', '保定市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130700', '张家口市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130800', '承德市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '130900', '沧州市', '130000');
INSERT INTO `cities`(`id`, `cityid`, `city`, `provinceid`) VALUES (null, '131000', '廊坊市', '130000');

.e)建立实体类映射,并实现序列化

@Repository
@Table(name = "cities")
public class Citiy implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)@Column(name = "id")private Integer id;@Column(name = "cityid")private String cityId;@Column(name = "city")private String city;@Column(name = "provinceid")private String provinceId;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getCityId() {return cityId;}public void setCityId(String cityId) {this.cityId = cityId;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getProvinceId() {return provinceId;}public void setProvinceId(String provinceId) {this.provinceId = provinceId;}@Overridepublic String toString() {return "Cities{" +"id=" + id +", cityId='" + cityId + '\'' +", city='" + city + '\'' +", provinceId='" + provinceId + '\'' +'}';}
}

.f)依次编写业务控制层,服务业务层和mapper层

@Controller
@RequestMapping("/city")
public class CityController {@Autowiredprivate ICityService iCityService;@Autowiredprivate Cities cities;@RequestMapping(method = RequestMethod.GET,path = "/selectAll")@ResponseBodypublic List<Cities> selectAll(){return iCityService.selectAll();}@RequestMapping(method = RequestMethod.GET,path = "/selectOne/{id}")@ResponseBodypublic Cities selectOne(@PathVariable int id){cities.setId(id);return iCityService.selectOne(cities);}}
public interface ICityService {List<Cities> selectAll();Cities selectOne(Cities cities);
}
@Service
public class CityServiceImpl implements ICityService {@Autowiredprivate ICityDao cityDao;@Overridepublic List<Cities> selectAll() {return cityDao.selectAll();}@Overridepublic Cities selectOne(Cities cities) {return cityDao.selectOne(cities);}
}
/*** @author brant* @date 2023/3/5 01:38* 这里如果要使用mapper自己封装的方法,不要重写方法.否则会报错 Invalid bound statement (not found)*/
@Component
public interface ICityDao extends IBaseDao<Cities>{}
public interface IBaseDao<T> extends Mapper<T>,MySqlMapper<T> {
}

. 1)注意:由于这里使用了mapper的自己的方法,因此在写dao层时不需要重写方法了,否则spring会找不到mapper的方法.这时的dao也要添加@Component注解,交给spring管理
 g)使用postman完成接口测试
在这里插入图片描述
在这里插入图片描述
.h)总结,在使用通用mapper时需要注意以下几点
  1)检查application.yml文件配置是否正确
  2)检查dao方法(这里排查了1h,很难排查)
  3)MapperScan导包tk
  4)pom文件要加入springboot版本管理

相关文章:

spring整合通用mapper

1.使用通用mapper可以更快速的进行数据库的增删查改操作,加入springboot的管理,常规的SQL都可以复用 2.整合  a)引入依赖 <dependencies><dependency><groupId>tk.mybatis</groupId><artifactId>mapper-spring-boot-starter</artifactId>…...

一天什么时间发抖音浏览量高?5个抖音最佳发布时间段

抖音作为现在一款现象级的软件&#xff0c;已经不知不觉地影响着我们生活的方方面面。那抖音想要被更多人看到&#xff0c;就需要掐准哪些时间活跃数最多&#xff0c;今天就来和大家分享一下一天什么时间发抖音浏览量高&#xff0c;又该如何抓住最佳投放契机呢?一、一天什么时…...

华为OD机试题 - 关联子串(JavaScript)| 含思路

华为OD机试题 最近更新的博客使用说明本篇题解:关联子串题目输入输出示例一输入输出说明示例二输入输出说明Code解题思路华为OD其它语言版本最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典...

【代码随想录训练营】【Day33休息】【Day34】第八章|贪心算法|1005.K次取反后最大化的数组和|134. 加油站|135. 分发糖果

K 次取反后最大化的数组和 题目详细&#xff1a;LeetCode.1005 这道题比较简单&#xff0c;这里直接给出贪心策略&#xff1a; 局部最优解&#xff1a; 按照 负数 > 0 > 正数 的优先级次序&#xff0c;依次对nums中的较小数值进行取反因为负负得正&#xff0c;负值越小…...

<c++> const 常量限定符

文章目录什么是 const 常量限定符const 的初始化const 的默认作用域const 的引用例外情况const 与指针const指针的声明指向 const 的指针const指针指向 const 的 const指针什么是 const 常量限定符 Q&#xff1a;什么是 const 常量限定符&#xff1f; A&#xff1a;const名叫常…...

pytorch实现transformer模型

Transformer是一种强大的神经网络架构&#xff0c;可用于处理序列数据&#xff0c;例如自然语言处理任务。在PyTorch中&#xff0c;可以使用torch.nn.Transformer类轻松实现Transformer模型。 以下是一个简单的Transformer模型实现的示例代码&#xff0c;它将一个输入序列转换为…...

【懒加载数据 Objective-C语言】

一、咱们就开始进行懒加载 1.懒加载发现,每一个字典,是不是就是四个键值对组成的: 1)answer:String,中国合伙人, 2)icon:String,movie_zghhr, 3)title:String,创业励志电影, 4)options:Array,21 items 前三个都是String类型,最后是不是Array类型, 所…...

人脸网格/人脸3D重建 face_mesh(毕业设计+代码)

概述 Face Mesh是一个解决方案&#xff0c;可在移动设备上实时估计468个3D面部地标。它利用机器学习&#xff08;ML&#xff09;推断3D面部表面&#xff0c;只需要单个摄像头输入&#xff0c;无需专用深度传感器。利用轻量级模型架构以及整个管道中的GPU加速&#xff0c;该解决…...

JMeter 控制并发数

文章目录一、误区二、正确设置 JMeter 的并发数总结没用过 JMeter 的同学&#xff0c;可以先过一遍他的简单使用例子 https://blog.csdn.net/weixin_42132143/article/details/118875293?spm1001.2014.3001.5501 一、误区 在使用 JMeter 做压测时&#xff0c;大家都知道要这么…...

git常用命令汇总

Git 是一种分布式版本控制系统&#xff0c;它具有以下优点&#xff1a; 分布式&#xff1a;每个开发者都可以拥有自己的本地代码仓库&#xff0c;不需要连接到中央服务器&#xff0c;这样可以避免单点故障和网络延迟等问题。 非线性开发&#xff1a;Git 可以支持多个分支并行开…...

【2023】华为OD机试真题Java-题目0226-寻找相似单词

寻找相似单词 题目描述 给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)。 相似单词说明:给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,…...

【项目管理】晋升为领导后,如何开展工作?

兵随将转&#xff0c;作为管理者&#xff0c;你可以不知道下属的短处&#xff0c;却不能不知道下属的长处。晋升为领导后&#xff0c;如何开展工作呢&#xff1f; 金九银十&#xff0c;此期间换工作的人不在少数。有几位朋友最近都换了公司&#xff0c;职位得到晋升&#xff0c…...

JAVA开发(Spring Gateway 的原理和使用)

在springCloud的架构中&#xff0c;业务服务都是以微服务来划分的&#xff0c;每个服务可能都有自己的地址和端口。如果前端或者说是客户端直接去调用不同的微服务的话&#xff0c;就要配置不同的地址。其实这是一个解耦和去中心化出现的弊端。所以springCloud体系中&#xff0…...

踩坑:解决npm版本升级报错,无法安装node-sass的问题

npm版本由于经常更新&#xff0c;迁移前端项目时经常发现报错安装不上。 比如&#xff0c;项目经常使用的sass模块&#xff0c;可能迁移的时候就发现安装不了。 因为node-sass 编译器是通过 C 实现的。在 Node.js 中&#xff0c;采用 gyp 构建工具进行构建 C 代码&#xff0c…...

xFormers安装使用

xFormers是一个模块化和可编程的Transformer建模库&#xff0c;可以加速图像的生成。 这种优化仅适用于nvidia gpus&#xff0c;它加快了图像生成&#xff0c;并降低了vram的使用量&#xff0c;而成本产生了非确定性的结果。 下载地址&#xff1a; https://github.com/faceb…...

React—— hooks(一)

&#x1f9c1;个人主页&#xff1a;个人主页 ✌支持我 &#xff1a;点赞&#x1f44d;收藏&#x1f33c;关注&#x1f9e1; 文章目录⛳React Hooks&#x1f4b8;useState(保存组件状态)&#x1f948;useEffect(处理副作用)&#x1f50b;useCallback&#xff08;记忆函数&#…...

Ubuntu20.04下noetic版本ros安装时rosdep update失败解决方法【一行命令】

一、问题&#xff1a; 安装完ros后&#xff0c;需要执行sudo rosdep init&#xff0c;但是在没有全局科学上网的前提下&#xff0c;执行sudo rosdep init势必会报错&#xff1a; ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/r…...

Vue2.0开发之——购物车案例-Footer组件封装-计算商品的总价格(51)

一 概述 App.vue中计算勾选商品的总价格定义子组件Footer中的商品总价格将App.vue中商品的总价格传递给Footer显示 二 App.vue中计算勾选商品的总价格 2.1 商品总价格的计算逻辑 所有勾选商品的价格*数量 2.2 App.vue中通过计算属性计算总价格 通过计算属性计算总价格 co…...

德鲁特金属导电理论(Drude)

德鲁特模型的重要等式 首先我们建立德鲁特模型的重要等式 我们把原子对于电子的阻碍作用&#xff0c;用一个冲量近似表示出来 在式子 首先定义一个等效加速度 由于 我们可以得到电导率的微观表达式 在交流电环境中 电场的表达式 借鉴上一问的公式 我们可以列出这样的表达式…...

(十一)python网络爬虫(理论+实战)——html解析库:BeautfulSoup详解

系列文章: python网络爬虫专栏 目录 序言 本节学习目标 特别申明...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业&#xff0c;那宇树科技&#xff08;Unitree&#xff09;必须名列其榜。 最近&#xff0c;宇树科技的一项新变动消息在业界引发了不少关注和讨论&#xff0c;即&#xff1a; 宇树向其合作伙伴发布了一封公司名称变更函称&#xff0c;因…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...