【SpringBoot】7 数据库(MySQLMyBatis)

news2024/9/17 4:00:30

MySQL

前提:本地有安装 MySQL 。

连接

使用工具 Navicat Premium ,或者 IDEA 自带的 DB 工具,或者其他能连接 MySQL 数据库的工具都可以。
在这里插入图片描述

1)创建 MySQL Data Source
在这里插入图片描述
2)根据本地配置连接上 MySQL,点击【Test Connection】,显示连接成功,再点击【OK】按钮即可成功连接上 DB。
在这里插入图片描述

版本

此时已经是成功连接上 MySQL,在 console 窗口输入命令查看本地 MySQL 的版本。

SELECT VERSION();

在这里插入图片描述

依赖

前往公共 Maven 查看,发现 MySQL 没有8.0.34的版本,所以用降个版本用 v8.0.33。
仓库地址:https://mvnrepository.com/artifact/com.mysql/mysql-connector-j
在这里插入图片描述

pom.xml

<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
    <version>8.0.33</version>
</dependency>

application.yml

spring:
  application:
    name: system
  thymeleaf:
    prefix: classpath:/templates/ #前缀,默认为classpath:/templates/
    suffix: .html #后缀,默认为.html
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root

com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver 的区别及设定 serverTimezone 的方法:https://www.jb51.net/program/298475don.htm

建库建表

新建库 system,新建表 t_user。

#建库,库名: system
CREATE DATABASE `system` CHARACTER SET 'utf8mb4';

#进入 system 数据库
use `system`;

#建表,表名: t_user
CREATE TABLE `system`.`t_user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `age` tinyint NULL,
  `gender` tinyint(1) NULL COMMENT '性别:男0,女1',
  `deleted` tinyint(1) NOT NULL COMMENT '已经删除:0否,1是',
  `create_time` datetime NOT NULL,
  `update_time` datetime NULL,
  PRIMARY KEY (`id`)
);

MyBatis

官网

MyBatis 3:https://mybatis.org/mybatis-3/
MyBatis-Plus(推荐):https://baomidou.com/

依赖

pom.xml

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>

配置

1)启动类添加 @MapperScan 注解

SystemApplication.java

@SpringBootApplication
@MapperScan("com.lm.system.mapper")
public class SystemApplication extends SpringBootServletInitializer {}

插件(可选)

图标不同是因为装了插件,这个装不装都可以,装了可以在 Mapper 接口和 Mapper.xml 两个间跳转等功能。
在这里插入图片描述

实现代码

实体类

User.java

package com.lm.system.common;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * @Author: DuHaoLin
 * @Date: 2024/7/26
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户实体类")
public class User {

    @TableId(value = "id", type = IdType.INPUT)
    private Integer id; //自增长
    private String name;
    private Integer age;
    private Integer gender; //性别:0男,1女
    private Integer deleted; //是否已经删除:0否,1是
    private LocalDateTime createTime;
    private LocalDateTime updateTime;

}

Mapper / Dao 层

在 system 目录下,新建 mapper 目录,在 mapper 目录下新建 UserMapper 接口。

UserMapper.java(这是个接口)

package com.lm.system.mapper;

import com.lm.system.common.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author: DuHaoLin
 * @Date: 2024/7/27
 */
public interface UserMapper {

    int insertUser(@Param("user") User user); //写入单个用户信息

    int updateUser(@Param("user") User user); //修改单个用户信息

    User queryUserById(int id); //按ID查询用户信息

    List<User> queryAllUser(); //查询所有用户信息

    int deleteUser(int id); //按ID删除用户

}

在 resource 目录下,新建 com 目录,在 com 目录下新建 lm 目录,在 lm 目录下新建 system 目录,在 system 目录下新建 UserMapper.xml 文件。
注:保持 resource 下的 mapper 目录的层级,和 src 中的 mapper 目录的层级一样。

UserMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lm.system.mapper.UserMapper">

    <!--  返回结果集  -->
    <resultMap id="users" type="com.lm.system.common.User">
        <id property="id" column="id" jdbcType="INTEGER" />
        <result property="name" column="name" jdbcType="VARCHAR" />
        <result property="age" column="age" jdbcType="INTEGER" />
        <result property="gender" column="gender" jdbcType="INTEGER" />
        <result property="deleted" column="deleted" jdbcType="INTEGER" />
        <result property="createTime" column="create_time" jdbcType="DATE" />
        <result property="updateTime" column="update_time" jdbcType="DATE" />
    </resultMap>

    <sql id="baseColumn">
        id, `name`, age, gender, deleted, create_time, update_time
    </sql>

    <insert id="insertUser" parameterType="com.lm.system.common.User"
            keyColumn="id" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO t_user (name, age, gender, deleted, create_time, update_time)
        VALUES (#{user.name}, #{user.age}, #{user.gender}, #{user.deleted}, NOW(), NOW())
    </insert>

    <update id="updateUser" parameterType="com.lm.system.common.User">
        UPDATE t_user SET name=#{user.name}, age=#{user.age}, gender=#{user.gender}, update_time=NOW()
        WHERE id = #{user.id}
    </update>

    <select id="queryUserById" parameterType="int" resultType="com.lm.system.common.User">
        SELECT <include refid="baseColumn"></include>
        FROM t_user
        WHERE id = #{id} AND deleted = 0
    </select>

    <select id="queryAllUser" resultMap="users">
        SELECT <include refid="baseColumn"></include>
        FROM t_user
        WHERE deleted = 0
    </select>

    <update id="deleteUser" parameterType="int">
        UPDATE t_user SET deleted = 1
        WHERE id = #{id}
    </update>

</mapper>

Service 层

在 system 目录下,新建 service 目录,在 service 目录下新建 UserService 接口。

UserService.java(这是一个接口)

package com.lm.system.service;

import com.lm.system.common.User;

import java.util.List;

/**
 * @Author: DuHaoLin
 * @Date: 2024/7/27
 */
public interface UserService {

    int insertUser(User user); //写入单个用户信息

    int updateUser(User user); //修改单个用户信息

    User queryUserById(int id); //按ID查询用户信息

    List<User> queryAllUser(); //查询所有用户信息

    int deleteUser(int id); //按ID删除用户

}

在 service 目录下新建 impl 目录,在 impl 目录下新建 UserServiceImpl 类。

UserServiceImpl.java

package com.lm.system.service.impl;

import com.lm.system.common.User;
import com.lm.system.mapper.UserMapper;
import com.lm.system.service.UserService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * @Author: DuHaoLin
 * @Date: 2024/7/27
 */
@Service
public class UserServiceImpl implements UserService {

    @Resource
    private UserMapper userMapper;

    @Override
    public int insertUser(User user) {
        return userMapper.insertUser(user);
    }

    @Override
    public int updateUser(User user) {
        return userMapper.updateUser(user);
    }

    @Override
    public User queryUserById(int id) {
        return userMapper.queryUserById(id);
    }

    @Override
    public List<User> queryAllUser() {
        return userMapper.queryAllUser();
    }

    @Override
    public int deleteUser(int id) {
        return userMapper.deleteUser(id);
    }
}

Controller 层

未完待续!

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

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

相关文章

移动UI:排行榜单页面如何设计,从这五点入手,附示例。

移动UI的排行榜单页面设计需要考虑以下几个方面&#xff1a; 1. 页面布局&#xff1a; 排行榜单页面的布局应该清晰明了&#xff0c;可以采用列表的形式展示排行榜内容&#xff0c;同时考虑到移动设备的屏幕大小&#xff0c;应该设计合理的滚动和分页机制&#xff0c;确保用户…

Android 软键盘挡住输入框

Android原生输入法软键盘挡住输入框,网上各种解法,但不起效。 输入框都是被挡住了,第二张图的小点,实际就是输入法的光标。 解法: packages\inputmethods\LatinIME\java\res\values-land config.xml <!-- <fraction name="config_min_keyboard_height"&g…

2024年国际高校数学建模大赛(IMMCHE)问题A:金字塔石的运输成品文章分享(仅供学习)

2024 International Mathematics Molding Contest for Higher Education Problem A: Transportation of Pyramid Stones&#xff08;2024年国际高校数学建模大赛&#xff08;IMMCHE&#xff09;问题A&#xff1a;金字塔石的运输&#xff09; 古埃及金字塔石材运输优化模型研究…

【单片机毕业设计选题24084】-基于嵌入式的16位AD采集系统设计

系统功能: 系统上电后显示“欢迎使用数模转换系统请稍后”后两秒后进入正常显示。 第一行显示ADS1115第一通道采集到的电压值 第二行显示ADS1115第二通道采集到的电压值 第一行显示ADS1115第三通道采集到的电压值 第二行显示ADS1115第四通道采集到的电压值 手动调节四个电…

【产品应用】一体化伺服电机在AGV小车中的应用

随着自动化技术的快速发展&#xff0c;自动引导车&#xff08;AGV&#xff0c;Automated Guided Vehicle&#xff09;在物流、仓储和生产等领域的应用日益广泛。 作为智能物流体系中的重要设备&#xff0c;AGV小车通过先进的控制技术、传感器技术和导航系统&#xff0c;实现了…

潜水通信定位系统的功能概述_鼎跃安全

水域救援是一项极具挑战性的救援行动&#xff0c;其特点鲜明&#xff0c;集突发性、时间敏感性、技术精密性、难度系数高及潜在危险性之大成。这类救援任务往往要求在极短的时间内迅速响应&#xff0c;面对复杂多变的水域环境&#xff0c;救援人员必须具备高超的专业技能和冷静…

23万一张的天价卡牌,如何撑起一个港股IPO?

23万&#xff0c;可以买到什么&#xff1f; 是拿下一辆涨价后的宝马i3&#xff1f;还是在三线城市全款盘下一套房&#xff1f;又或是来一次环球旅行&#xff1f;这些都已经过时了&#xff0c;对于现在的年轻人来说&#xff0c;他们或许会选择拿这些钱去二手市场&#xff0c;收…

pycharm关闭项目时,页面卡住了,怎么办?

问题 在关闭pycharm时&#xff0c;有时会遇到卡在退出进度条的界面&#xff0c;很讨厌&#xff0c;那我们要怎么办才能退出呢&#xff1f; 说明&#xff1a;本篇文章不是从根源上解决这个问题&#xff0c;无法避免这种情况。 解决方法 方法一&#xff1a; 在卡住时&#xf…

Golang | Leetcode Golang题解之第287题寻找重复数

题目&#xff1a; 题解&#xff1a; func findDuplicate(nums []int) int {slow, fast : 0, 0for slow, fast nums[slow], nums[nums[fast]]; slow ! fast; slow, fast nums[slow], nums[nums[fast]] { }slow 0for slow ! fast {slow nums[slow]fast nums[fast]}return s…

STM32-寄存器时钟配置指南

目录 启动 SystemInit SetSysClock 总结 启动 从startup_stm32f0xx.s内的开头的Description可以看到 ;* Description : STM32F051 devices vector table for EWARM toolchain. ;* This module performs: ;* - Set the in…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑤ | 11.13 - 11.14

前言 第11章对应的内容选择题和案例分析都会进行考查&#xff0c;这一章节属于10大管理的内容&#xff0c;学习要以教材为准。本章上午题分值预计在15分。 目录 11.13 制定预算 11.13.1 主要输入 11.13.2 主要输出 11.14 规划质量管理 11.14.1 主要输入 11.14.2 主要工…

MySQL查询优化 limit 100000,10加载很慢该怎么优化

需求&#xff1a;查询19年以后发布的商品 数据库表结构如下&#xff1a; 目前数据量&#xff1a;264751 优化前执行时间&#xff1a;0.790s 优化后执行时间&#xff1a;0.467s select id,no,title,cart_title,cid_name from tb_item where id > (select id from tb_item …

Redis 缓存

安装 安装 Redis 下载&#xff1a; Releases tporadowski/redis (github.com) winr ----services.msc-----将redis 设置为手动(只是学习&#xff0c;如果经常用可以设置为自动) 安装 redis-py 库 pip install redis-py Redis 和 StrictRedis redis-py 提供 Redis 和 Str…

记忆注意力用于多模态情感计算!

记忆注意力用于多模态情感计算&#xff01; 目录 情感计算 一、概述 二、研究背景 三、模型结构和代码 六、数据集介绍 七、性能展示 八、复现过程 九、运行过程 模型总结 本文所涉及所有资源均在传知代码平台可获取。 情感计算 近年来&#xff0c;社交媒体的快速扩张推动了用户…

跨境电商独立站:Shopify/Wordpress/店匠选哪个?

在面对不断增加的平台运营压力时&#xff0c;不少跨境电商的商家逐渐将注意力转向建立自己的独立站。据《中国跨境出口电商发展报告&#xff08;2022&#xff09;》所示&#xff0c;中国拥有的独立站数量在2022年已接近20万个&#xff0c;这表明独立站已成为卖家拓展海外市场的…

构建现代数据湖

现代数据湖是一半数据仓库和一半数据湖&#xff0c;对所有事情都使用对象存储。使用对象存储来构建数据仓库是通过 Open Table Formats OTF&#xff09; 实现的&#xff0c;例如 Apache Iceberg、Apache Hudi 和 Delta Lake&#xff0c;这些规范一旦实现&#xff0c;就可以无缝…

800以内的蓝牙耳机推荐有哪些?四款优选精品百元蓝牙耳机推荐

面对市场上琳琅满目的品牌和型号&#xff0c;如何选择一款性价比高、功能全面的蓝牙耳机成为了一个让人头疼的问题&#xff0c;尤其是在众多的百元价位段的蓝牙耳机&#xff0c;800以内的蓝牙耳机推荐有哪些&#xff1f;作为一个选蓝牙耳机的过来人&#xff0c;我总结了四款优选…

一个极简的 vuedraggable 示例

https://andi.cn/page/621613.html

代码随想录算法训练营第 25 天 | LeetCode491.递增子序列 LeetCode46.全排列 LeetCode47.全排列ii

代码随想录算法训练营 Day25代码随想录算法训练营第 25 天 | LeetCode491.递增子序列 LeetCode46.全排列 LeetCode47.全排列ii 目录 代码随想录算法训练营前言LeetCode491.递增子序列LeetCode46.全排列LeetCode47.全排列ii 一、LeetCode491.递增子序列1.题目链接2.思路3.题解 …

React Native在移动端落地实践

在移动互联网产品迅猛发展的今天&#xff0c;技术的不断创新使得企业越来越注重降低成本、提升效率。为了在有限的开发资源下迅速推出高质量、用户体验好的产品&#xff0c;以实现公司发展&#xff0c;业界催生了许多移动端跨平台解决方案。这些方案不仅简化了开发流程&#xf…