【SpringBoot】 整合MyBatis+Postgresql

 MyBatis 是一个轻量级的持久化框架,用于简化数据库访问和操作。它通过将 SQL 语句与 Java 代码分离,允许开发者使用 XML 或注解来配置 SQL 语句,并将结果映射为 Java 对象。MyBatis 提供了灵活的 SQL 控制,适合需要精细控制 SQL 的场景,同时支持动态 SQL、存储过程和缓存等功能,以满足不同的需求 。

 整合MyBatis

数据库安装:

【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)_postgresql navicat-CSDN博客

数据库连接

下载驱动

由于我电脑上安装的两个版本的Postgresql12和14所以端口得修改

添加表数据

打开编写窗口

以下是mysql数据库的语句

create database if not exists mybatis;use mybatis;create table user(id int unsigned primary key auto_increment comment 'ID',name varchar(100) comment '姓名',age tinyint unsigned comment '年龄',gender tinyint unsigned comment '性别, 1:男, 2:女',phone varchar(11) comment '手机号'
) comment '用户表';insert into user(id, name, age, gender, phone) VALUES (null,'白眉鹰王',55,'1','18800000000');
insert into user(id, name, age, gender, phone) VALUES (null,'金毛狮王',45,'1','18800000001');
insert into user(id, name, age, gender, phone) VALUES (null,'青翼蝠王',38,'1','18800000002');
insert into user(id, name, age, gender, phone) VALUES (null,'紫衫龙王',42,'2','18800000003');
insert into user(id, name, age, gender, phone) VALUES (null,'光明左使',37,'1','18800000004');
insert into user(id, name, age, gender, phone) VALUES (null,'光明右使',48,'1','18800000005');

以下是postgresql的语句(注意不要建立user表)

-- 1. 创建数据库(兼容IF NOT EXISTS语法需调整)
CREATE DATABASE mybatis;-- 2. 连接数据库(PostgreSQL无USE命令)
\c mybatis;-- 3. 创建表(处理自增主键、无符号类型、注释语法)
CREATE TABLE "usertest" (id SERIAL PRIMARY KEY,  -- 自增主键改造name VARCHAR(100),      -- 字符串类型兼容age SMALLINT,           -- TINYINT UNSIGNED → SMALLINTgender SMALLINT,        -- 同age处理逻辑phone VARCHAR(11)       -- 保留原定义
);
COMMENT ON TABLE "usertest" IS '用户表';  -- 表注释单独设置
COMMENT ON COLUMN "usertest".id IS 'ID';
COMMENT ON COLUMN "usertest".name IS '姓名';
COMMENT ON COLUMN "usertest".age IS '年龄';
COMMENT ON COLUMN "usertest".gender IS '性别, 1:男, 2:女';
COMMENT ON COLUMN "usertest".phone IS '手机号';-- 4. 插入数据(处理自增列、单引号规范)
INSERT INTO "usertest" (name, age, gender, phone) VALUES('白眉鹰王', 55, 1, '18800000000'),  -- 省略自增id [[20]][[10]]('金毛狮王', 45, 1, '18800000001'),('青翼蝠王', 38, 1, '18800000002'),('紫衫龙王', 42, 2, '18800000003'),('光明左使', 37, 1, '18800000004'),('光明右使', 48, 1, '18800000005');

添加镜像

    <!-- 配置阿里云仓库 --><repositories><repository><id>aliyun-repos</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></repository></repositories><pluginRepositories><pluginRepository><id>aliyun-repos</id><url>https://maven.aliyun.com/repository/public</url><releases><enabled>true</enabled></releases><snapshots><enabled>false</enabled></snapshots></pluginRepository></pluginRepositories>

添加mybatis起步依赖

在新工程上操作

        <!--mybatis的起步依赖--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>3.0.3</version></dependency>

添加数据库的驱动依赖

        <!--postgresql驱动依赖--><dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId></dependency>

添加数据库配置

spring:application:name: springboot-mybatisdatasource:driver-class-name: org.postgresql.Driverurl: jdbc:postgresql://localhost:5432/mybatisusername: postgrespassword: postgres

创建User实体类

package com.zwh.springbootmybatis.pojo;public class User {private Integer id;private String name;private Short age;private Short gender;private String phone;public User() {}public User(Integer id, String name, Short age, Short gender, String phone) {this.id = id;this.name = name;this.age = age;this.gender = gender;this.phone = phone;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Short getAge() {return age;}public void setAge(Short age) {this.age = age;}public Short getGender() {return gender;}public void setGender(Short gender) {this.gender = gender;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", age=" + age +", gender=" + gender +", phone='" + phone + '\'' +'}';}
}

创建数据库交互接口

package com.zwh.springbootmybatis.mapper;import com.zwh.springbootmybatis.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper {@Select("select * from user where id = #{id}")public User findById(Integer id);
}

创建业务逻辑接口 

package com.zwh.springbootmybatis.service;import com.zwh.springbootmybatis.pojo.User;public interface UserService {public User findById(Integer id);
}

创建接口的实现类 

package com.zwh.springbootmybatis.service.impl;import com.zwh.springbootmybatis.mapper.UserMapper;
import com.zwh.springbootmybatis.pojo.User;
import com.zwh.springbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User findById(Integer id) {return userMapper.findById(id);}
}

处理前端请求 

package com.zwh.springbootmybatis.Controller;import com.zwh.springbootmybatis.pojo.User;
import com.zwh.springbootmybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/findById")public User findById(Integer id){return userService.findById(id);}
}

运行 

http://127.0.0.1:8080/findById?id=1

 

mapperserviceimplpojocontroller讲解

在Spring Boot中,mapperserviceimplpojocontroller是分层架构中的关键组件,它们分别负责不同的职责:

  1. Mapper:通常指MyBatis的Mapper接口,用于定义与数据库交互的方法。这些方法的具体实现(如SQL语句)通常放在mapper.xml文件中。Mapper接口通过@Mapper注解标识,并且可以继承BaseMapper等通用接口。

  2. Service:表示业务逻辑层接口,定义了业务逻辑的方法。Service接口通常由ServiceImpl实现,实现类中会调用Mapper接口来执行数据库操作。

  3. ServiceImpl:是Service接口的实现类,负责具体的业务逻辑处理。它通常通过@Service注解标识,并且会注入Mapper接口以获取数据库操作能力。

  4. Pojo(Plain Old Java Object) :表示实体类,通常用于映射数据库表。Pojo类包含字段和对应的getter/setter方法,用于在Java对象与数据库之间进行数据转换。

  5. Controller:负责处理前端请求,作为应用的入口点。Controller通过@Controller@RestController注解标识,并调用Service层的方法来处理业务逻辑。

这些组件共同构成了Spring Boot的分层架构,使得代码结构清晰、易于维护和扩展。

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

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

相关文章

无缝衔接直播流体验

文章目录前言&#x1f9e0; 1. 为什么能“无缝衔接”&#xff1f;&#x1f9f0; 2. Flutter 实现方案✅ 总体策略&#x1f3af; 核心技术点✅ a. 使用全局播放器管理器&#xff08;单例模式&#xff09;✅ b. 广场页中的直播卡片使用播放器✅ c. 详情页复用控制器✅ d. 页面切换…

[论文阅读] 软件工程 | 首个德语软件工程情感分析黄金标准数据集:构建与价值解析

首个德语软件工程情感分析黄金标准数据集&#xff1a;构建与价值解析 论文标题&#xff1a;A German Gold-Standard Dataset for Sentiment Analysis in Software EngineeringarXiv:2507.07325 A German Gold-Standard Dataset for Sentiment Analysis in Software Engineering…

PyTorch编程实践:一文就入门的上手开发!

引言 PyTorch作为当今深度学习领域最流行的框架之一&#xff0c;以其动态计算图、直观的Python接口和强大的GPU加速能力&#xff0c;赢得了众多研究人员和工程师的青睐。本文将深入探讨PyTorch的编程实践&#xff0c;从基础概念到高级应用&#xff0c;帮助读者全面掌握这一强大…

关于学习docker中遇到的问题

Cannot connect to the Docker daemon at unix:///home/pc/.docker/desktop/docker.sock. Is the docker daemon running?如何配置新的路径 #运行这条命令&#xff0c;查看docker状态 sudo systemctl status docker如图所示表示监听路径不对&#xff0c;因此修改路径即可&…

无法打开windows安全中心解决方案

系统还原或重置&#xff1a;如果以上方法均无效&#xff0c;可尝试系统还原&#xff0c;使用之前创建的还原点恢复系统。或在设置中选择 “系统> 恢复 > 重置此电脑”&#xff0c;选择 “保留我的文件” 以避免数据丢失。创建新用户账户&#xff1a;按下 Win I 打开设置…

复习笔记 33

绪论 《幻术》 张叶蕾 我该怎么承认&#xff0c; 一切都是幻境。 函数的基本性质和无穷小量及其阶的比较 我感觉强化课我要跟上的话&#xff0c;我需要把基础&#xff0c;强化的讲义&#xff0c;还有练习册上面的所有题都刷烂。不然我感觉自己考 140 完全就是痴人说梦。搞笑呢。…

算法学习笔记:12.快速排序 ——从原理到实战,涵盖 LeetCode 与考研 408 例题

快速排序是计算机科学中最经典的排序算法之一&#xff0c;由 Tony Hoare 在 1960 年提出。它凭借平均时间复杂度 O (nlogn)、原地排序&#xff08;空间复杂度 O (logn)&#xff0c;主要来自递归栈&#xff09;以及良好的实际性能&#xff0c;成为工业界处理大规模数据排序的首选…

unity 有打击感的图片,怎么做动画,可以表现出良好的打击效果

完整实现脚本:using UnityEngine; using UnityEngine.UI; using System.Collections;[RequireComponent(typeof(Image))] public class HitEffectController : MonoBehaviour {[Header("基础设置")]public float hitDuration 0.5f; // 打击效果总时长[Header("…

cuda编程笔记(7)--多GPU上的CUDA

零拷贝内存 在流中&#xff0c;我们介绍了cudaHostAlloc这个函数&#xff0c;它有一些标志&#xff0c;其中cudaHostAllocMapped允许内存映射到设备&#xff0c;也即GPU可以直接访问主机上的内存&#xff0c;不用额外再给设备指针分配内存 通过下面的操作&#xff0c;即可让设…

IP地址混乱?监控易IPAM实现全网地址自动化管理与非法接入告警

IP地址出现混乱状况&#xff1f;监控易IPAM能够达成对全网地址予以自动化管理的目标&#xff0c;同时还可针对非法接入的情况发出告警信息。办公室毫无预兆地突然断网了&#xff0c;经过一番仔细排查之后&#xff0c;发现原来是IP地址出现了冲突的情况。有人私自接了路由器&…

安全监测预警平台的应用场景

随着城市化进程加快和基础设施规模扩大&#xff0c;各类安全风险日益突出。安全监测预警平台作为现代安全管理的重要工具&#xff0c;通过整合物联网、大数据、人工智能等先进技术&#xff0c;实现对各类安全隐患的实时监测、智能分析和精准预警。本文将详细探讨安全监测预警平…

007_用例与应用场景

用例与应用场景 目录 内容创作编程开发数据分析客户服务教育培训商业智能研究辅助 内容创作 文案撰写 应用场景&#xff1a; 营销文案和广告语产品描述和说明书社交媒体内容邮件营销内容 实际案例&#xff1a; 任务&#xff1a;为新款智能手表撰写产品描述 输入&#x…

Unity物理系统由浅入深第一节:Unity 物理系统基础与应用

Unity物理系统由浅入深第一节&#xff1a;Unity 物理系统基础与应用 Unity物理系统由浅入深第二节&#xff1a;物理系统高级特性与优化 Unity物理系统由浅入深第三节&#xff1a;物理引擎底层原理剖析 Unity物理系统由浅入深第四节&#xff1a;物理约束求解与稳定性 Unity 引擎…

《[系统底层攻坚] 张冬〈大话存储终极版〉精读计划启动——存储架构原理深度拆解之旅》-系统性学习笔记(适合小白与IT工作人员)

&#x1f525; 致所有存储技术探索者笔者近期将系统攻克存储领域经典巨作——张冬老师编著的《大话存储终极版》。这部近千页的存储系统圣经&#xff0c;以庖丁解牛的方式剖析了&#xff1a;存储硬件底层架构、分布式存储核心算法、超融合系统设计哲学等等。喜欢研究数据存储或…

flutter鸿蒙版 环境配置

flutter支持开发鸿蒙,但是需要专门的flutter鸿蒙项目, Flutter鸿蒙化环境配置&#xff08;windows&#xff09;_flutter config --ohos-sdk-CSDN博客

Java 高级特性实战:反射与动态代理在 spring 中的核心应用

在 Java 开发中&#xff0c;反射和动态代理常被视为 “高级特性”&#xff0c;它们看似抽象&#xff0c;却支撑着 Spring、MyBatis 等主流框架的核心功能。本文结合手写 spring 框架的实践&#xff0c;从 “原理” 到 “落地”&#xff0c;详解这两个特性如何解决实际问题&…

Codeforces Round 855 (Div. 3)

A. Is It a Cat? 去重&#xff0c; 把所有字符看成大写字符&#xff0c; 然后去重&#xff0c; 观察最后结果是不是“MEOW” #include <bits/stdc.h> #define int long longvoid solve() {int n;std::cin >> n;std::string ans, t;std::cin >> ans;for (int…

Scrapy选择器深度指南:CSS与XPath实战技巧

引言&#xff1a;选择器在爬虫中的核心地位在现代爬虫开发中&#xff0c;​​选择器​​是数据提取的灵魂工具。根据2023年网络爬虫开发者调查数据显示&#xff1a;​​92%​​ 的数据提取错误源于选择器编写不当熟练使用选择器的开发效率相比新手提升 ​​300%​​同时掌握CSS…

Windos服务器升级MySQL版本

Windos服务器升级MySQL版本 1.备份数据库 windows下必须以管理员身份运行命令行工具进行备份&#xff0c;如果没有配置MySQL的环境变量&#xff0c;需要进入MySQL Server 的bin目录输入指令&#xff0c; mysqldump -u root -p --all-databases > backup.sql再输入数据库密码…

告别频繁登录!Nuxt3 + TypeScript + Vue3实战:双Token无感刷新方案全解析

前言 在现代 Web 应用中&#xff0c;身份认证是保障系统安全的重要环节。传统的单 Token 认证方式存在诸多不足&#xff0c;如 Token 过期后需要用户重新登录&#xff0c;影响用户体验。本文将详细介绍如何在 Nuxt3 TypeScript Vue3 项目中实现无感刷新 Token 机制&#xff…