SpringBoot+Hibernate+Spring Data JPA+Maven入门

2023-11-10

整合SpringBoot 和 Hibernate,实现简单的CRUD。


框架版本

  • SpringBoot 2.0.0.RELEASE

  • Hibernate 5.2.14.Final


pom.xml文件

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- JPA, Hibernate, mysql -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- mysql数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

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

在application.properties文件中配置mysql数据源

spring.thymeleaf.cache=false

#Spring Boot中的乱码和编码问题
spring.http.encoding.force=true

########################################################
### datasource
########################################################
spring.datasource.url = jdbc:mysql://localhost:3306/springboot
spring.datasource.username = root
spring.datasource.password = password
spring.datasource.driverClassName = com.mysql.jdbc.Driver
#spring.datasource.max-active=20
#spring.datasource.max-idle=8
#spring.datasource.min-idle=8
#spring.datasource.initial-size=10
########################################################
### Java Persistence Api
########################################################
# Specify the DBMS
spring.jpa.database = MYSQL
# Show or not log for each sql query
spring.jpa.show-sql = true
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto = update

# Naming strategy
#[org.hibernate.cfg.ImprovedNamingStrategy #org.hibernate.cfg.DefaultNamingStrategy]
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the entity manager)
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5Dialect

可配置属性总结:

##########################################
###datasource
##########################################
###spring.datasource.url:mysql地址
###spring.datasource.user:数据库用户名
###spring.datasource.password:数据库密码
###spring.datasource.driverClassName:对应数据库驱动
###spring.datasource.max-active:指定连接池中最大的活跃连接数
###spring.datasource.max-idle:指定连接池最大的空闲连接数量
###spring.datasource.min-idle:指定必须保持连接的最小值(For DBCP and Tomcat connection pools)
###spring.datasource.initial-size:指定启动连接池时,初始建立的连接数量
##########################################
###其他信息总结
##########################################
###spring.dao.exceptiontranslation.enabled  是否开启PersistenceExceptionTranslationPostProcessor,默认为true
###spring.datasource.abandon-when-percentage-full  设定超时被废弃的连接占到多少比例时要被关闭或上报
###spring.datasource.allow-pool-suspension  使用Hikari pool时,是否允许连接池暂停,默认为: false
###spring.datasource.alternate-username-allowed  是否允许替代的用户名
###spring.datasource.auto-commit  指定updates是否自动提交.
###spring.datasource.catalog  指定默认的catalog.
###spring.datasource.commit-on-return  设置当连接被归还时,是否要提交所有还未完成的事务
###spring.datasource.connection-init-sql  指定连接被创建,再被添加到连接池之前执行的sql.
###spring.datasource.connection-init-sqls  使用DBCP connection pool时,指定初始化时要执行的sql
###spring.datasource.connection-properties.[key]  在使用DBCP connection pool时指定要配置的属性
###spring.datasource.connection-test-query  指定校验连接合法性执行的sql语句
###spring.datasource.connection-timeout  指定连接的超时时间,毫秒单位.
###spring.datasource.continue-on-error  在初始化数据库时,遇到错误是否继续,默认false
###spring.datasource.data  指定Data (DML)脚本
###spring.datasource.data-source-class-name  指定数据源的全限定名.
###spring.datasource.data-source-jndi  指定jndi的地址
###spring.datasource.data-source-properties.[key]  使用Hikari connection pool时,指定要设置的属性
###spring.datasource.db-properties  使用Tomcat connection pool,指定要设置的属性
###spring.datasource.default-auto-commit  是否自动提交.
###spring.datasource.default-catalog  指定连接默认的catalog.
###spring.datasource.default-read-only  是否设置默认连接只读.
###spring.datasource.default-transaction-isolation  指定连接的事务的默认隔离级别.
###spring.datasource.driver-class-name  指定driver的类名,默认从jdbc url中自动探测.
###spring.datasource.fair-queue  是否采用FIFO返回连接.
###spring.datasource.health-check-properties.[key]  使用Hikari connection pool时,在心跳检查时传递的属性
###spring.datasource.idle-timeout  指定连接多久没被使用时,被设置为空闲,默认为10ms
###spring.datasource.ignore-exception-on-pre-load  当初始化连接池时,是否忽略异常.
###spring.datasource.init-sql  当连接创建时,执行的sql
###spring.datasource.initial-size  指定启动连接池时,初始建立的连接数量
###spring.datasource.initialization-fail-fast  当创建连接池时,没法创建指定最小连接数量是否抛异常
###spring.datasource.initialize  指定初始化数据源,是否用data.sql来初始化,默认: true
###spring.datasource.isolate-internal-queries  指定内部查询是否要被隔离,默认为false
###spring.datasource.jdbc-interceptors  使用Tomcat connection pool时,指定jdbc拦截器,分号分隔
###spring.datasource.jdbc-url  指定JDBC URL.
###spring.datasource.jmx-enabled  是否开启JMX,默认为: false
###spring.datasource.jndi-name  指定jndi的名称.
###spring.datasource.leak-detection-threshold  使用Hikari connection pool时,多少毫秒检测一次连接泄露.
###spring.datasource.log-abandoned  使用DBCP connection pool,是否追踪废弃statement或连接,默认为: false
###spring.datasource.log-validation-errors  当使用Tomcat connection pool是否打印校验错误.
###spring.datasource.login-timeout  指定连接数据库的超时时间.
###spring.datasource.max-age  指定连接池中连接的最大年龄
###spring.datasource.max-lifetime  指定连接池中连接的最大生存时间,毫秒单位.
###spring.datasource.max-open-prepared-statements  指定最大的打开的prepared statements数量.
###spring.datasource.max-wait  指定连接池等待连接返回的最大等待时间,毫秒单位.
###spring.datasource.maximum-pool-size  指定连接池最大的连接数,包括使用中的和空闲的连接.
###spring.datasource.min-evictable-idle-time-millis  指定一个空闲连接最少空闲多久后可被清除.
###spring.datasource.min-idle  指定必须保持连接的最小值(For DBCP and Tomcat connection pools)
###spring.datasource.minimum-idle  指定连接维护的最小空闲连接数,当使用HikariCP时指定.
###spring.datasource.name  指定数据源名.
###spring.datasource.num-tests-per-eviction-run  指定运行每个idle object evictor线程时的对象数量
###spring.datasource.password  指定数据库密码.
###spring.datasource.platform  指定schema要使用的Platform(schema-${platform}.sql),默认为: all
###spring.datasource.pool-name  指定连接池名字.
###spring.datasource.pool-prepared-statements  指定是否池化statements.
###spring.datasource.propagate-interrupt-state  在等待连接时,如果线程被中断,是否传播中断状态.
###spring.datasource.read-only  当使用Hikari connection pool时,是否标记数据源只读
###spring.datasource.register-mbeans  指定Hikari connection pool是否注册JMX MBeans.
###spring.datasource.remove-abandoned  指定当连接超过废弃超时时间时,是否立刻删除该连接.
###spring.datasource.remove-abandoned-timeout  指定连接应该被废弃的时间.
###spring.datasource.rollback-on-return  在归还连接时,是否回滚等待中的事务.
###spring.datasource.schema  指定Schema (DDL)脚本.
###spring.datasource.separator  指定初始化脚本的语句分隔符,默认: ;
###spring.datasource.sql-script-encoding  指定SQL scripts编码.
###spring.datasource.suspect-timeout  指定打印废弃连接前的超时时间.
###spring.datasource.test-on-borrow  当从连接池借用连接时,是否测试该连接.
###spring.datasource.test-on-connect  创建时,是否测试连接
###spring.datasource.test-on-return  在连接归还到连接池时是否测试该连接.
###spring.datasource.test-while-idle  当连接空闲时,是否执行连接测试.
###spring.datasource.time-between-eviction-runs-millis  指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔
###spring.datasource.transaction-isolation  指定事务隔离级别,使用Hikari connection pool时指定
###spring.datasource.url  指定JDBC URL.
###spring.datasource.use-disposable-connection-facade  是否对连接进行包装,防止连接关闭之后被使用.
###spring.datasource.use-equals  比较方法名时是否使用String.equals()替换==.
###spring.datasource.use-lock  是否对连接操作加锁
###spring.datasource.username  指定数据库名.
###spring.datasource.validation-interval  指定多少ms执行一次连接校验.
###spring.datasource.validation-query  指定获取连接时连接校验的sql查询语句.
###spring.datasource.validation-query-timeout  指定连接校验查询的超时时间.
###spring.datasource.validation-timeout  设定连接校验的超时时间,当使用Hikari connection pool时指定
###spring.datasource.validator-class-name  用来测试查询的validator全限定名.
###spring.datasource.xa.data-source-class-name  指定数据源的全限定名.
###spring.datasource.xa.properties  指定传递给XA data source的属性
##########################################
##SPring JPA配置信息
##########################################
###spring.jpa.database  指定目标数据库.
###spring.jps.show-sq  是否显示sql语句
###spring.jpa.hibernate.ddl-auto  指定DDL mode (none, validate, update, create, create-drop). 当使用内嵌数据库时,默认是create-drop,否则为none.
###spring.jpa.hibernate.naming-strategy  指定命名策略.
##########################################
###其他
##########################################
###spring.jpa.database-platform  指定目标数据库的类型.
###spring.jpa.generate-ddl  是否在启动时初始化schema,默认为false
###spring.jpa.hibernate.ddl-auto  指定DDL mode (none, validate, update, create, create-drop). 当使用内嵌数据库时,默认是create-drop,否则为none.
###spring.jpa.hibernate.naming-strategy  指定命名策略.
###spring.jpa.open-in-view  是否注册OpenEntityManagerInViewInterceptor,绑定JPA EntityManager到请求线程中,默认为: true
###spring.jpa.properties  添加额外的属性到JPA provider.
###spring.jpa.show-sql  是否开启sql的log,默认为: false
##########################################

编写程序

(1)编写实体类User

package com.tao.springboot.hibernate.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;

/**
 * 创建一个实体类User。
 * 每一个实体类对应数据库中的一张表。
 * 1、使用@Entity注解进行持久化操作,当JPA检测到被@Entity注解的实体类的时候,
 *    会在数据库中自动创建一张对应的表。
 * 2、通过@Table注解来为数据库中将要创建的表命名。
 */
@Entity
@Table(name = "tb_user")
@Data  //lombok的注解
public class User implements Serializable {

    /**
     * 使用@Id注解来指定哪个字段作为主键。
     * 使用@GeneratedValue注解来指定主键的生成策略,mysql默认的是自增长。
     */
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String userName;
    private String password;
}

(2)编写UserDao接口

package com.tao.springboot.hibernate.dao;

import com.tao.springboot.hibernate.entity.User;
import org.springframework.data.repository.CrudRepository;

public interface UserDao extends CrudRepository<User, Integer> {

}

(3)编写UserService接口

package com.tao.springboot.hibernate.service;

import com.tao.springboot.hibernate.entity.User;

import java.util.List;

public interface UserService {

    void save(User user);

    void delete(Integer id);

    List<User> getAll();
}

(4)编写UserService接口的实现类UserServiceImpl

package com.tao.springboot.hibernate.service.impl;

import com.tao.springboot.hibernate.dao.UserDao;
import com.tao.springboot.hibernate.entity.User;
import com.tao.springboot.hibernate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    /**
     * save,update,delete方法需要绑定事务
     * 使用@Transactional进行事务绑定
     */
    /**
     * 保存数据
     * @param user
     */
    @Transactional
    @Override
    public void save(User user) {
        userDao.save(user);
    }

    /**
     * 删除数据
     * @param id
     */
    @Transactional
    @Override
    public void delete(Integer id) {
        userDao.deleteById(id);
    }

    /**
     * 查询数据
     * @return
     */
    @Override
    public List<User> getAll() {

        Iterable<User> users = userDao.findAll();
        Iterator<User> iter = users.iterator();
        List<User> res = new ArrayList<>();
        while(iter.hasNext()) {
            res.add(iter.next());
        }

        return res;
    }
}

(5)编写UserController

package com.tao.springboot.hibernate.web.controller;

import com.tao.springboot.hibernate.entity.User;
import com.tao.springboot.hibernate.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;


    @GetMapping("/hello")
    @ResponseBody
    public String home() {

        return "Hello World!";
    }

    /**
     * 保存一个用户信息
     * @param model
     * @return
     */
    @RequestMapping("/save")
    public String save(Model model) {

        User user = new User();
        user.setUserName("李四");
        user.setPassword("123456789");
        userService.save(user);
        model.addAttribute("msg", "添加数据成功");
        return "result";
    }

    @RequestMapping("/delete")
    public String delete(Model model) {
        userService.delete(1);
        model.addAttribute("msg", "删除数据成功");
        return "result";
    }

    @GetMapping("/all")
    @ResponseBody
    public List<User> getAll() {
        return userService.getAll();
    }
}

(6)在入口函数中添加@EnableJpaRepositories注解和@EntityScan注解

package com.tao.springboot.hibernate;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EnableJpaRepositories("com.tao.springboot.hibernate.dao") // JPA扫描该包路径下的Repositorie
@EntityScan("com.tao.springboot.hibernate.entity") // 扫描Entity实体类
public class SpringbootHibernateApplication {

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

(7)启动程序,测试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot+Hibernate+Spring Data JPA+Maven入门 的相关文章

随机推荐

  • 心电信号越界怎么回事_心电图机的干扰及其正确处理方法

    心电图机是记录人体体表各点随时间而变化的心电波形的医疗仪器 医生根据心电图机所记录的波形的形态 波幅大小以及各波之间的相对时间关系来鉴别诊断心脏疾病 因此 心电图机所记录的心电图的精确度对于心脏疾病的鉴别诊断至关重要 但是 由于心电信号比较
  • JAVA面试常考

    1 自我介绍 讲下最有难度的项目 2 对线程安全的理解 3 比如有一个局部变量i 1 两个线程同时执行 是否线程安全 4 比如再有一个共享变量 如何保证线程安全 5 说说ThreadLocal 底层如何实现 6 hashmap实现原理 7
  • 【BATCHNORMALIZATION、LAYERNORMALIZATION、INSTANCENORMALIZATION和GROUPNORMALIZATION】

    总览 神经网络中有各种归一化算法 Batch Normalization BN Layer Normalization LN Instance Normalization IN Group Normalization GN 从公式看它们都差
  • ServerSocket 的建立与使用(多线程)

    1 main方法 package peixun public class MyServerSocket public static void main String args new ServerListener start 2 建立连接
  • 多元线性回归的梯度下降

    目录 1 线性回归的基本概念 2 线性回归算法 3 多元梯度下降算法 4 总结 1 线性回归的基本概念 在回归分析中 如果只包含一个自变量和一个因变量 且二者关心可近似用一条直线表示 则称该回归分析为一元线性回归分析 如果包含两个及两个以上
  • 多模态(图像和文本跨模态)分类

    文章目录 前言 一 数据集介绍 二 处理过程 1 处理图片文本标签数据 1 将label由消极 中立 积极的标签变成数字 0 1 2 并且将其保存在path2label字典中 2 分别将图像文件和文本文件形成列表 3 分别将文本内容 对应的
  • 计算机插本2a院校,广东省专插本2A院校有哪些

    满意答案 yandianhua 2012 12 23 采纳率 45 等级 12 已帮助 15307人 晨光英语考试团很荣幸为您解答 2011年广东省本科插班生招生院校名单 院校代码 院校名称 以下院校是2A线的 533 深圳大学 534 五
  • 刷题之455. 分发饼干 -----贪心初试

    假设你是一位很棒的家长 想要给你的孩子们一些小饼干 但是 每个孩子最多只能给一块饼干 对每个孩子 i 都有一个胃口值 g i 这是能让孩子们满足胃口的饼干的最小尺寸 并且每块饼干 j 都有一个尺寸 s j 如果 s j gt g i 我们可
  • 性能测试浅谈

    早期的性能测试更关注后端服务的处理能力 一个用户去访问一个页面的请求过程 如上图 数据传输时间 当你从浏览器输入网址 敲下回车 开始 真实的用户场景请不要忽视数据传输时间 想想你给远方的朋友写信 信件需要经过不同的交通运输工具送到朋友手上
  • 去除移动端h5的横向滚动条

    我的问题是 在移动端第一次访问h5页面时 页面尺寸被放大了一点 没有手机适配 所以出现了横向滚动条 手指缩小页面尺寸后 横向滚动条才消失 解决方案 在入口页面index html的标签里添加下面一行代码
  • Qt中的中信号槽与异步调用

    Qt中使用信号 槽机制处理跨对象之间的调用 该机制的好处有 1 使得调用关系的绑定和解除十分灵活 不必修改类成员函数代码 2 在不暴露更多全局变量的情况下实现跨命名空间调用 3 可以多个信号对应多个槽 也可以信号之间绑定 对应于GUI中的逻
  • python 使用for循环简单爬取图片(1)

    现在的网站大多做了反爬处理 找一个能爬的网站还真不容易 下面开始一步步实现 1 简单爬录目图片 1 import urllib request 2 import re 3 4 def gethtml url 5 page urllib re
  • Spring_AOP_0100_Annotation入门

    为了以后更好的实习 今天了解了一下spring的aop的基础知识 做了一些简单的测试 算入门aop吧 记录下来 方便以后查阅 spring的版本2 5 6 由于目前aspectj的aop比spring做得更出色 而且spring也提倡直接使
  • Jmeter(三十五) - 从入门到精通进阶篇 - 关联(详解教程)

    1 简介 上一篇中介绍了如果想要同时发送多条请求 那么怎样才能让每条数据某些请求参数改变呢 这就用到了jMeter参数化 在实际测试场景中 我们往往还有这样的需求 登录后服务器响应的token作为下次请求的参数 这就是所谓的参数关联 当请求
  • impala目录

    文章目录 1 入门 2 shell命令使用 3 java操作 1 入门 2 shell命令使用 https blog csdn net qq 21383435 article details 84925144 3 java操作
  • 最新xcode打包IPA(完整详细图文)

    网上的xcode打包ipa教程大多太旧而且又不完整 所以整理了一个最新的完整详细的xcode打包APP的图文教程分享给小白到大神路上的你我 xcode打包IPA包之前先申请iOS证书 然后导入证书才能打包导出IPA包 分为5 步进行 1 申
  • SpringCloud(一)——微服务基础及简单微服务项目搭建

    单体应用开发 传统的web应用开发是将所有的功能模块都打包到一个包中一起部署运行 单体应用集成简洁部署简单 但是随着项目复杂的的增加 单体应用会变得越来越大越来越臃肿 每次进行小功能的更新都需要更新整个包重新部署 什么是微服务 微服务没有一
  • Design Compiler (九)——综合后的形式验证

    这里来讲一下formality的使用 貌似跟tcl和DC没有很强的联系 然而说没有联系 也是不正确的 在综合完成之后 可以进行形式验证 此外这里不是专门讲解formality的使用的 因此只会简单地实践一下它的用法 formality是Sy
  • 前端之HTML

    目录 1 编写一个HTML代码 2 HTML常见语法 2 1注释标签 2 2标题标签 2 3段落标签 2 4换行标签 2 5格式化标签 2 6图片标签 2 6 1img标签的其他属性 2 7超链接标签 2 7 1空连接 2 8列表标签 2
  • SpringBoot+Hibernate+Spring Data JPA+Maven入门

    整合SpringBoot 和 Hibernate 实现简单的CRUD 框架版本 SpringBoot 2 0 0 RELEASE Hibernate 5 2 14 Final pom xml文件