Spring boot + Hibernate + MySQL实现用户管理示例

news2025/1/4 19:55:28

安装MySQL

Windows 11 Mysql 安装及常用命令_windows11 mysql-CSDN博客

整体目录

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.test</groupId>
    <version>0.0.1-SNAPSHOT</version>
 	<artifactId>mservice-sql</artifactId>
  	<name>mservice-sql</name>
  	<description>mservice-sql</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>21</java.version>
        <spring-cloud.version>2024.0.0</spring-cloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
   

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        <dependency>
        	<groupId>org.springframework.boot</groupId>
        	<artifactId>spring-boot-starter-data-jpa</artifactId>
    	</dependency>
    
    	<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>		
		</dependency>


    	
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

配置端口号和MySQL连接

server.port=8000
#数据库连接
spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/数据库名
#数据库用户名
spring.datasource.primary.username=用户名
#数据库密码
spring.datasource.primary.password=密码
#自动更新数据库
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#显示sql
spring.jpa.show-sql=true
#在视图渲染过程中不执行数据库查询
spring.jpa.open-in-view=false

SqlApplication.java

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
public class SqlApplication {

    public static void main(String[] args) {
        SpringApplication.run(SqlApplication.class, args);
    }

}

User.java

注意:import jakarta.persistence.*;

package com.test.entity;


import java.io.Serializable;

import jakarta.persistence.*;
 
@Entity
@Table(name = "users")
public class User implements Serializable {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    private String username;
 
    private String password;
 
    // Getters and Setters
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String getPassword() {
        return password;
    }
 
    public void setPassword(String password) {
        this.password = password;
    }
}

UserRepository

package com.test.dao;



import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.stereotype.Repository;

import com.test.entity.User;

public interface UserRepository {
    User findById(Long id);
    User save(String username,String password);
    
}

UserDao

注解@PersistenceContext(unitName = "primaryEntityManager")须与PrimaryDbConfig中一致。

package com.test.dao;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.stereotype.Repository;

import com.test.entity.User;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;

@Repository

public class UserDao implements UserRepository{
	
	@PersistenceContext(unitName = "primaryEntityManager")
    private EntityManager entityManager;
	

	@Override
	public User findById( Long id) {
        try {     
            User user = entityManager.find(User.class, id);
			return user;
		}catch(HibernateException e) {
			e.printStackTrace();
		}

		return null;
	}


	@Override
	public User save(String username,String password) {
		User user = new User();
        user.setUsername(username);
        user.setPassword(password);
        try {    
            entityManager.persist(user);
			return user;
		}catch(HibernateException e) {
			e.printStackTrace();
		}

		return user;
	}

}

PrimaryDbConfig

其中:"com.test.dao"是Dao路径;"com.test.entity"是实体路径。

package com.test.conf;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

import javax.sql.DataSource;

/*
 *
 * 数据库配置
 *
 * basePackages:JPA扫描配置
 * entityManagerFactoryRef:实体扫描配置
 * transactionManagerRef:事务配置
 *
 * */
@Configuration
@EnableJpaRepositories(basePackages = "com.test.dao", entityManagerFactoryRef = "primaryEntityManager", transactionManagerRef = "primaryTransactionManager")
public class PrimaryDbConfig {

    private final Logger log = LoggerFactory.getLogger(getClass());

    private DataSource dataSource;

    private LocalContainerEntityManagerFactoryBean entityManager;

    /*
     * 创建数据库连接
     * @Primary 配置多个数据源时,用于标记主库
     * @ConfigurationProperties 指定配置文件中的属性前缀
     *
     * */
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    @Bean(name = "primaryDataSource")
    public DataSource primaryDataSource() {
        dataSource = DataSourceBuilder.create().build();
        log.info("正在连接数据库1...");
        return dataSource;
    }

    /*
     * 实体扫描配置
     *
     * 方法名与类注解中的entityManagerFactoryRef的值保持一致,配置多个数据源时方法名不能相同
     *
     * */
    @Bean
    @Primary
    LocalContainerEntityManagerFactoryBean primaryEntityManager(EntityManagerFactoryBuilder builder) {
        log.info("正在扫描接数据库1的实体类...");
        entityManager = builder.dataSource(dataSource).packages("com.test.entity")
                .persistenceUnit("primaryPersistenceUnit").build();
        return entityManager;
    }

    /*
     * 事务配置
     *
     * 方法名与类注解中的transactionManagerRef的值保持一致,配置多个数据源时方法名不能相同
     *
     * */
    @Bean
    @Primary
    PlatformTransactionManager primaryTransactionManager(EntityManagerFactoryBuilder builder) {
        log.info("正在配置接数据库1的事务管理器...");
        return new JpaTransactionManager(entityManager.getObject());
    }
}

UserController:

注意:save接口的注解@Transactional(value = "primaryTransactionManager")

package com.test.controller;


import com.test.entity.User;
import com.test.dao.*;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
 

 
@Controller
@RequestMapping("/api/users")
public class UserController {
 
    @Autowired
    private UserRepository userService;
 
    @RequestMapping("/id")
    @ResponseBody
    public User getUserById( Long id) {   
        return userService.findById(id);
    }
    
    @RequestMapping("/save")
    @ResponseBody
    @Transactional(value = "primaryTransactionManager")
    public User save(String name,String password) {
    	return userService.save(name, password);
    }
 

}

启动程序:

此时数据库中自动创建了数据表users。

浏览器测试:

添加用户:

http://localhost:8000/api/users/save?name=test&password=12345

查询用户:

http://localhost:8000/api/users/id?id=1

Navicat查看MySQL:

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

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

相关文章

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!

大模型Weekly 03&#xff5c;OpenAI o3发布&#xff1b;DeepSeek-V3上线即开源&#xff01;DeepSeek-V3上线即开源&#xff1b;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」&#xff0c;持…

电路学习之前言

1.作为一名嵌入式开发者&#xff0c;去学习电路是必经之路。如果是一名嵌入式软件开发者&#xff0c;可能对电路和硬件的开发要求是能看懂电路图即可&#xff0c;但是&#xff0c;学习电路可以进一步提高看电路图的能力&#xff0c;可以提升自己的整体实力水平。而且&#xff0…

Java反射详解(二)

上一篇博客&#xff1a;Java反射详解&#xff08;一&#xff09; 写在前面&#xff1a;大家好&#xff01;我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正&#xff0c;感谢大家的不吝赐教。我的唯一博客更新地址是&#xff1a;https://ac-fun.blog.c…

zentao ubuntu上安装

#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz&#xff08;https://www.zentao.net/downloads.html&#xff09; https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…

逆境清醒文章总目录表

逆境清醒文章总目录表 零、时光宝盒&#x1f33b; &#xff08;https://blog.csdn.net/weixin_69553582 逆境清醒&#xff09; 《你的答案》歌曲原唱&#xff1a;阿冗&#xff0c;填 词&#xff1a;林晨阳、刘涛&#xff0c;谱曲&#xff1a;刘涛 也许世界就这样&#xff0c…

【嵌入式硬件】嵌入式显示屏接口

数字显示串行接口&#xff08;Digital Display Serial Interface&#xff09; SPI 不过多赘述。 I2C-bus interface 不过多赘述 MIPI DSI MIPI (Mobile Industry Processor Interface) Alliance, DSI (Display Serial Interface) 一般用于移动设备&#xff0c;下面是接口…

AI证件照制作 API 快速生成示例

AI证件照制作 API 快速生成证件照示例 本文将介绍一种 AI证件照制作 API 对接说明&#xff0c;它是可以通过输入人像照片URL以及自己喜欢的模板来制作各种风格的证件照。 接下来介绍下 AI证件照制作 API 的对接说明。 申请流程 要使用 API&#xff0c;需要先到 AI证件照制作…

一个在ios当中采用ObjectC和opencv来显示图片的实例

前言 在ios中采用ObjectC编程利用opencv来显示一张图片&#xff0c;并简单绘图。听上去似乎不难&#xff0c;但是实际操作下来&#xff0c;却不是非常的容易的。本文较为详细的描述了这个过程&#xff0c;供后续参考。 一、创建ios工程 1.1、选择ios工程类型 1.2、选择接口模…

006-Jetpack Compose for Android之传感器数据

需求分析 想要看看手机的传感器数据&#xff0c;看看滤波一下能玩点什么无聊的。先搞个最简单的&#xff0c;手机本身的姿态。 需求&#xff1a;采集手机姿态数据&#xff0c;显示在界面上。 那么我们需要&#xff1a; 一个文本标签类似的控件&#xff0c;显示手机姿态数据…

SpringBoot3 快速启动框架

文章目录 1 SpringBoot3 介绍 1.1 SpringBoot3 简介1.2 快速入门1.3 入门总结 2 SpringBoot3 配置文件 2.1 统一配置管理概述2.2 属性配置文件使用2.3 YAML配置文件使用2.4 批量配置文件注入2.5 多环境配置和使用 3 SpringBoot 整合 springMVC 3.1 实现过程3.2 web相关配置3.3…

大型ERP系统GL(总账管理)模块需求分析

主要介绍了GL系统的需求分析&#xff0c;包括系统概述、功能描述、帐薄管理、报表管理、期末处理、财务报表以及凭证的快速输入方式、可用性设计、保存、自动审核和打印等方面的内容。系统概述部分介绍了系统的功能结构和模块流程图。 功能描述部分详细描述了系统的基础资料和业…

利用python将图片转换为pdf格式的多种方法,实现批量转换,内置模板代码,全网最全,超详细!!!

文章目录 前言1、img2pdf库的使用1.2 安装img2pdf库1.3 案例演示&#xff08;模板代码&#xff09; 2、Pillow库的使用2.1 pillow库的安装2.2 案例演示&#xff08;模板代码&#xff09; 3、PyMuPDF库的使用3.1 安装pymupdf库3.2 案例演示&#xff08;模板代码&#xff09;2.3 …

协议幻变者:DeviceNet转ModbusTCP网关开启机器手臂智能新纪元

技术背景DeviceNet是一种广泛应用于工业自动化领域的现场总线标准&#xff0c;它能够实现控制器与现场设备之间的高效通信&#xff0c;常用于连接各种传感器、执行器以及其他工业设备&#xff0c;如机器人、电机驱动器等&#xff0c;具有实时性强、可靠性高的特点。而ModbusTCP…

Linux 安装运行gatk的教程

1.下载安装 wget https://github.com/broadinstitute/gatk/releases/download/4.1.8.1/gatk-4.1.8.1.zip2.解压 unzip *.zip3.查看 gatk --help 如下显示表示安装成功&#xff1a; 注意&#xff1a;仅限在该包所在位置的路径下能使用

使用Xilinx PCIE XDMA框架读写访问DDR3内容

在 FPGA 开发中&#xff0c;使用 XDMA&#xff08;PCIe DMA&#xff09;是实现主机和 FPGA 之间数据传输的常见方法。xdma_rw.exe 是一个官方提供的命令行工具&#xff0c;用于与 FPGA 进行读写操作&#xff0c;支持从 PCIe 总线读取或写入数据。我利用xdma框架实现了DDR3内存的…

【论文笔记之 Mega-TTS2】Boosting Prompting Mechanisms For Zero-Shot Speech Synthesis

本文对 Ziyue Jiang 等人于 2024 年发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载&#xff0c;但请务必注明出处。 论文链接&#xff1a;https://arxiv.org/pdf/2307.07218 目录 Abstract1. 介绍2. 背景3. 方法3.1. 解耦出韵律和音色3.2. 压缩…

haproxy+nginx负载均衡实验

准备三台虚拟机&#xff1a; HAProxy 服务器192.168.65.131Web 服务器 1192.168.65.132Web 服务器 2192.168.65.133 在 HAProxy 服务器&#xff08;192.168.65.131&#xff09;上操作&#xff1a; 安装 HAProxy&#xff1a; sudo yum install -y haproxy编辑 HAProxy 配置…

[论文阅读] (34)ESWA2024 基于SGDC的轻量级入侵检测系统

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

华三交换机怎么进行链路聚合?

目录 准备&#xff1a;两台交换机 配置&#xff1a;进行交换机配置 完成&#xff1a;检查链路聚合是否成功 准备&#xff1a;两台交换机 1、进行连线 2、上行Core交换机都选取 Ten-GigabitEthernet1/0/51、Ten-GigabitEthernet1/0/52和 Ten-GigabitEthernet2/0/51、Ten-Giga…

【无线传感网】无线传感器网络覆盖技术

文章目录 覆盖算法设计思路及性能评价标准覆盖感知模型布尔感知模型概率感知模型 无线传感网络覆盖算法分类按照配置方式确定性覆盖随机性覆盖 根据覆盖目标面覆盖点覆盖栅栏覆盖 典型的WSN覆盖算法与协议基于网格的覆盖定位传感器配置算法圆周覆盖连通传感器覆盖轮换活跃/休眠…