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个抖音最佳发布时间段
抖音作为现在一款现象级的软件,已经不知不觉地影响着我们生活的方方面面。那抖音想要被更多人看到,就需要掐准哪些时间活跃数最多,今天就来和大家分享一下一天什么时间发抖音浏览量高,又该如何抓住最佳投放契机呢?一、一天什么时…...
华为OD机试题 - 关联子串(JavaScript)| 含思路
华为OD机试题 最近更新的博客使用说明本篇题解:关联子串题目输入输出示例一输入输出说明示例二输入输出说明Code解题思路华为OD其它语言版本最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典...
【代码随想录训练营】【Day33休息】【Day34】第八章|贪心算法|1005.K次取反后最大化的数组和|134. 加油站|135. 分发糖果
K 次取反后最大化的数组和 题目详细:LeetCode.1005 这道题比较简单,这里直接给出贪心策略: 局部最优解: 按照 负数 > 0 > 正数 的优先级次序,依次对nums中的较小数值进行取反因为负负得正,负值越小…...
<c++> const 常量限定符
文章目录什么是 const 常量限定符const 的初始化const 的默认作用域const 的引用例外情况const 与指针const指针的声明指向 const 的指针const指针指向 const 的 const指针什么是 const 常量限定符 Q:什么是 const 常量限定符? A:const名叫常…...
pytorch实现transformer模型
Transformer是一种强大的神经网络架构,可用于处理序列数据,例如自然语言处理任务。在PyTorch中,可以使用torch.nn.Transformer类轻松实现Transformer模型。 以下是一个简单的Transformer模型实现的示例代码,它将一个输入序列转换为…...
【懒加载数据 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是一个解决方案,可在移动设备上实时估计468个3D面部地标。它利用机器学习(ML)推断3D面部表面,只需要单个摄像头输入,无需专用深度传感器。利用轻量级模型架构以及整个管道中的GPU加速,该解决…...

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

git常用命令汇总
Git 是一种分布式版本控制系统,它具有以下优点: 分布式:每个开发者都可以拥有自己的本地代码仓库,不需要连接到中央服务器,这样可以避免单点故障和网络延迟等问题。 非线性开发:Git 可以支持多个分支并行开…...
【2023】华为OD机试真题Java-题目0226-寻找相似单词
寻找相似单词 题目描述 给定一个可存储若干单词的字典,找出指定单词的所有相似单词,并且按照单词名称从小到大排序输出。单词仅包括字母,但可能大小写并存(大写不一定只出现在首字母)。 相似单词说明:给定一个单词X,如果通过任意交换单词中字母的位置得到不同的单词Y,…...

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

JAVA开发(Spring Gateway 的原理和使用)
在springCloud的架构中,业务服务都是以微服务来划分的,每个服务可能都有自己的地址和端口。如果前端或者说是客户端直接去调用不同的微服务的话,就要配置不同的地址。其实这是一个解耦和去中心化出现的弊端。所以springCloud体系中࿰…...

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

xFormers安装使用
xFormers是一个模块化和可编程的Transformer建模库,可以加速图像的生成。 这种优化仅适用于nvidia gpus,它加快了图像生成,并降低了vram的使用量,而成本产生了非确定性的结果。 下载地址: https://github.com/faceb…...
React—— hooks(一)
🧁个人主页:个人主页 ✌支持我 :点赞👍收藏🌼关注🧡 文章目录⛳React Hooks💸useState(保存组件状态)🥈useEffect(处理副作用)🔋useCallback(记忆函数&#…...
Ubuntu20.04下noetic版本ros安装时rosdep update失败解决方法【一行命令】
一、问题: 安装完ros后,需要执行sudo rosdep init,但是在没有全局科学上网的前提下,执行sudo rosdep init势必会报错: 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)
德鲁特模型的重要等式 首先我们建立德鲁特模型的重要等式 我们把原子对于电子的阻碍作用,用一个冲量近似表示出来 在式子 首先定义一个等效加速度 由于 我们可以得到电导率的微观表达式 在交流电环境中 电场的表达式 借鉴上一问的公式 我们可以列出这样的表达式…...
(十一)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,SRS管理页面端口是8080,可…...

AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

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

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

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

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