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

打印 上一主题 下一主题

主题 1812|帖子 1812|积分 5436

安装MySQL

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


pom.xml


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3.          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4.     <modelVersion>4.0.0</modelVersion>
  5.     <parent>
  6.         <groupId>org.springframework.boot</groupId>
  7.         <artifactId>spring-boot-starter-parent</artifactId>
  8.         <version>3.4.0</version>
  9.         <relativePath/> <!-- lookup parent from repository -->
  10.     </parent>
  11.     <groupId>com.test</groupId>
  12.     <version>0.0.1-SNAPSHOT</version>
  13.         <artifactId>mservice-sql</artifactId>
  14.           <name>mservice-sql</name>
  15.           <description>mservice-sql</description>
  16.     <url/>
  17.     <licenses>
  18.         <license/>
  19.     </licenses>
  20.     <developers>
  21.         <developer/>
  22.     </developers>
  23.     <scm>
  24.         <connection/>
  25.         <developerConnection/>
  26.         <tag/>
  27.         <url/>
  28.     </scm>
  29.     <properties>
  30.         <java.version>21</java.version>
  31.         <spring-cloud.version>2024.0.0</spring-cloud.version>
  32.     </properties>
  33.     <dependencies>
  34.         <dependency>
  35.             <groupId>org.springframework.boot</groupId>
  36.             <artifactId>spring-boot-starter-web</artifactId>
  37.         </dependency>
  38.         
  39.    
  40.         <dependency>
  41.             <groupId>org.springframework.boot</groupId>
  42.             <artifactId>spring-boot-starter-test</artifactId>
  43.             <scope>test</scope>
  44.         </dependency>
  45.         
  46.         <dependency>
  47.                 <groupId>org.springframework.boot</groupId>
  48.                 <artifactId>spring-boot-starter-data-jpa</artifactId>
  49.             </dependency>
  50.    
  51.             <dependency>
  52.                         <groupId>com.mysql</groupId>
  53.                         <artifactId>mysql-connector-j</artifactId>               
  54.                 </dependency>
  55.            
  56.     </dependencies>
  57.     <dependencyManagement>
  58.         <dependencies>
  59.             <dependency>
  60.                 <groupId>org.springframework.cloud</groupId>
  61.                 <artifactId>spring-cloud-dependencies</artifactId>
  62.                 <version>${spring-cloud.version}</version>
  63.                 <type>pom</type>
  64.                 <scope>import</scope>
  65.             </dependency>
  66.         </dependencies>
  67.     </dependencyManagement>
  68.     <build>
  69.         <plugins>
  70.             <plugin>
  71.                 <groupId>org.springframework.boot</groupId>
  72.                 <artifactId>spring-boot-maven-plugin</artifactId>
  73.             </plugin>
  74.         </plugins>
  75.     </build>
  76. </project>
复制代码
application.properties

设置端标语和MySQL连接
  1. server.port=8000
  2. #数据库连接
  3. spring.datasource.primary.jdbc-url=jdbc:mysql://localhost:3306/数据库名
  4. #数据库用户名
  5. spring.datasource.primary.username=用户名
  6. #数据库密码
  7. spring.datasource.primary.password=密码
  8. #自动更新数据库
  9. spring.jpa.properties.hibernate.hbm2ddl.auto=update
  10. #显示sql
  11. spring.jpa.show-sql=true
  12. #在视图渲染过程中不执行数据库查询
  13. spring.jpa.open-in-view=false
复制代码
SqlApplication.java

  1. package com.test;
  2. import org.springframework.boot.SpringApplication;
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;
  4. @SpringBootApplication
  5. public class SqlApplication {
  6.     public static void main(String[] args) {
  7.         SpringApplication.run(SqlApplication.class, args);
  8.     }
  9. }
复制代码
User.java
注意:import jakarta.persistence.*;
  1. package com.test.entity;
  2. import java.io.Serializable;
  3. import jakarta.persistence.*;
  4. @Entity
  5. @Table(name = "users")
  6. public class User implements Serializable {
  7.     @Id
  8.     @GeneratedValue(strategy = GenerationType.IDENTITY)
  9.     private Long id;
  10.     private String username;
  11.     private String password;
  12.     // Getters and Setters
  13.     public Long getId() {
  14.         return id;
  15.     }
  16.     public void setId(Long id) {
  17.         this.id = id;
  18.     }
  19.     public String getUsername() {
  20.         return username;
  21.     }
  22.     public void setUsername(String username) {
  23.         this.username = username;
  24.     }
  25.     public String getPassword() {
  26.         return password;
  27.     }
  28.     public void setPassword(String password) {
  29.         this.password = password;
  30.     }
  31. }
复制代码
UserRepository

  1. package com.test.dao;
  2. import org.springframework.data.jpa.repository.JpaRepository;
  3. import org.springframework.data.repository.NoRepositoryBean;
  4. import org.springframework.stereotype.Repository;
  5. import com.test.entity.User;
  6. public interface UserRepository {
  7.     User findById(Long id);
  8.     User save(String username,String password);
  9.    
  10. }
复制代码
UserDao

注解@PersistenceContext(unitName = "primaryEntityManager")须与PrimaryDbConfig中同等。
  1. package com.test.dao;
  2. import org.hibernate.HibernateException;
  3. import org.hibernate.Session;
  4. import org.springframework.stereotype.Repository;
  5. import com.test.entity.User;
  6. import jakarta.persistence.EntityManager;
  7. import jakarta.persistence.PersistenceContext;
  8. @Repository
  9. public class UserDao implements UserRepository{
  10.        
  11.         @PersistenceContext(unitName = "primaryEntityManager")
  12.     private EntityManager entityManager;
  13.        
  14.         @Override
  15.         public User findById( Long id) {
  16.         try {     
  17.             User user = entityManager.find(User.class, id);
  18.                         return user;
  19.                 }catch(HibernateException e) {
  20.                         e.printStackTrace();
  21.                 }
  22.                 return null;
  23.         }
  24.         @Override
  25.         public User save(String username,String password) {
  26.                 User user = new User();
  27.         user.setUsername(username);
  28.         user.setPassword(password);
  29.         try {   
  30.             entityManager.persist(user);
  31.                         return user;
  32.                 }catch(HibernateException e) {
  33.                         e.printStackTrace();
  34.                 }
  35.                 return user;
  36.         }
  37. }
复制代码
PrimaryDbConfig

其中:"com.test.dao"是Dao路径;"com.test.entity"是实体路径。
  1. package com.test.conf;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.boot.context.properties.ConfigurationProperties;
  5. import org.springframework.boot.jdbc.DataSourceBuilder;
  6. import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
  7. import org.springframework.context.annotation.Bean;
  8. import org.springframework.context.annotation.Configuration;
  9. import org.springframework.context.annotation.Primary;
  10. import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
  11. import org.springframework.orm.jpa.JpaTransactionManager;
  12. import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
  13. import org.springframework.transaction.PlatformTransactionManager;
  14. import javax.sql.DataSource;
  15. /*
  16. *
  17. * 数据库配置
  18. *
  19. * basePackages:JPA扫描配置
  20. * entityManagerFactoryRef:实体扫描配置
  21. * transactionManagerRef:事务配置
  22. *
  23. * */
  24. @Configuration
  25. @EnableJpaRepositories(basePackages = "com.test.dao", entityManagerFactoryRef = "primaryEntityManager", transactionManagerRef = "primaryTransactionManager")
  26. public class PrimaryDbConfig {
  27.     private final Logger log = LoggerFactory.getLogger(getClass());
  28.     private DataSource dataSource;
  29.     private LocalContainerEntityManagerFactoryBean entityManager;
  30.     /*
  31.      * 创建数据库连接
  32.      * @Primary 配置多个数据源时,用于标记主库
  33.      * @ConfigurationProperties 指定配置文件中的属性前缀
  34.      *
  35.      * */
  36.     @Primary
  37.     @ConfigurationProperties(prefix = "spring.datasource.primary")
  38.     @Bean(name = "primaryDataSource")
  39.     public DataSource primaryDataSource() {
  40.         dataSource = DataSourceBuilder.create().build();
  41.         log.info("正在连接数据库1...");
  42.         return dataSource;
  43.     }
  44.     /*
  45.      * 实体扫描配置
  46.      *
  47.      * 方法名与类注解中的entityManagerFactoryRef的值保持一致,配置多个数据源时方法名不能相同
  48.      *
  49.      * */
  50.     @Bean
  51.     @Primary
  52.     LocalContainerEntityManagerFactoryBean primaryEntityManager(EntityManagerFactoryBuilder builder) {
  53.         log.info("正在扫描接数据库1的实体类...");
  54.         entityManager = builder.dataSource(dataSource).packages("com.test.entity")
  55.                 .persistenceUnit("primaryPersistenceUnit").build();
  56.         return entityManager;
  57.     }
  58.     /*
  59.      * 事务配置
  60.      *
  61.      * 方法名与类注解中的transactionManagerRef的值保持一致,配置多个数据源时方法名不能相同
  62.      *
  63.      * */
  64.     @Bean
  65.     @Primary
  66.     PlatformTransactionManager primaryTransactionManager(EntityManagerFactoryBuilder builder) {
  67.         log.info("正在配置接数据库1的事务管理器...");
  68.         return new JpaTransactionManager(entityManager.getObject());
  69.     }
  70. }
复制代码
UserController:

注意:save接口的注解@Transactional(value = "primaryTransactionManager")
  1. package com.test.controller;
  2. import com.test.entity.User;
  3. import com.test.dao.*;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Controller;
  6. import org.springframework.transaction.annotation.Transactional;
  7. import org.springframework.web.bind.annotation.*;
  8. @Controller
  9. @RequestMapping("/api/users")
  10. public class UserController {
  11.     @Autowired
  12.     private UserRepository userService;
  13.     @RequestMapping("/id")
  14.     @ResponseBody
  15.     public User getUserById( Long id) {   
  16.         return userService.findById(id);
  17.     }
  18.    
  19.     @RequestMapping("/save")
  20.     @ResponseBody
  21.     @Transactional(value = "primaryTransactionManager")
  22.     public User save(String name,String password) {
  23.             return userService.save(name, password);
  24.     }
  25. }
复制代码
启动步伐:


此时数据库中自动创建了数据表users。
浏览器测试:
添加用户:
http://localhost:8000/api/users/save?name=test&password=12345

查询用户:
http://localhost:8000/api/users/id?id=1


Navicat检察MySQL:







免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表