hibernate入门,springboot整合hibernate

news2024/11/23 13:15:12

Mybatis和Hibernate是我们常用的两大ORM框架,这篇文章主要介绍hibernate的使用,如何通过springboot整合hibernate,实现简单的crud功能。

添加依赖

首先,需要创建一个springboot项目,这里就取名为hibernate。项目创建完成后,修改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 https://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>2.3.4.RELEASE</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>hibernate</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
        <mysql.version>8.0.28</mysql.version>
        <druid.version>1.1.21</druid.version>
        <lombok.version>1.18.22</lombok.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>

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>

        <!--druid-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

        <!--hibernate-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
        </dependency>
    </dependencies>

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

配置文件

然后修改配置文件application.yml

server:
  port: 8080
  servlet:
    context-path: /

spring:
  # 数据源
  datasource:
    username: root
    password: root
    url: jdbc:mysql://localhost:3306/hibernate
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
  # 只返回不为null的数据
  jackson:
    default-property-inclusion: non_null

  jpa:
    database: MYSQL
    show-sql: true
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        dialect: org.hibernate.dialect.MySQL8Dialect
    database-platform: org.hibernate.dialect.MySQL8Dialect

logging:
  level:
    springfox: error
    com.example.hibernate: debug

完成以上工作,就可以开始使用hibernate了。

实体类

首先创建一个实体类User:在项目根目录下创建entity包,在entity包下创建一个类User

package com.example.hibernate.entity;

import lombok.Data;

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

/**
 * @author heyunlin
 * @version 1.0
 */
@Data
@Entity
@Table(name = "user")
public class User implements Serializable {
    private static final long serialVersionUID = 18L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    /**
     * 用户名
     */
    @Column(name = "username")
    private String username;

    /**
     * 密码
     */
    @Column(name = "password")
    private String password;
}

其中@Entity表示这是一个JPA实体类,@Table(name = "user")指定实体类对应数据库表名为user,@Id表示数据库的标识字段,也就是主键,@Column指定对应数据库字段。

持久层

接下来,创建持久层对象

在项目根目录下创建dao包,在entity包下创建一个UserDao接口,然后继承JpaRepository接口,该接口有两个参数化类型,第一个表示实体类的类型,第二个表示主键的类型,也就是@Id注解标注的字段的类型,这里是Integer。

package com.example.hibernate.dao;

import com.example.hibernate.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

/**
 * @author heyunlin
 * @version 1.0
 */
@Repository
public interface UserDao extends JpaRepository<User, Integer> {

}

然后在启动类上面使用@EnableJpaRepositories注解

package com.example.hibernate;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

/**
 * @author heyunlin
 * @version 1.0
 */
@SpringBootApplication
@EnableJpaRepositories
public class HibernateApplication {
    private static final Logger logger = LoggerFactory.getLogger(HibernateApplication.class);

    public static void main(String[] args) {
        if (logger.isDebugEnabled()) {
            logger.debug("启动hibernate...");
        }
        
        SpringApplication.run(HibernateApplication.class, args);
    }

}

业务层

接下来创建业务层,在项目根目录下创建service包,在service包下创建一个UserService接口

package com.example.hibernate.service;

import com.example.hibernate.entity.User;

import java.util.List;

/**
 * @author heyunlin
 * @version 1.0
 */
public interface UserService {

    /**
     * 查询全部用户
     * @return List<User>
     */
    List<User> selectAll();
}

service包下面创建impl包,在impl包下创建UserService的实现类,调用持久层userDao的方法

package com.example.hibernate.service.impl;

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

import java.util.List;

/**
 * @author heyunlin
 * @version 1.0
 */
@Service
public class UserServiceImpl implements UserService {
    private final UserDao userDao;

    @Autowired
    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public List<User> selectAll() {
        return userDao.findAll();
    }

}

功能测试

完成以上任务之后,启动项目

可以看到,hibernate在启动过程中自动根据User实体类帮我们创建了user表。

接着我们往表里插一条数据用来测试

INSERT INTO user(id, username, password) VALUES (1, 'heyunin', '12345');

然后访问http://localhost:8080/user/selectAll获取全部用户

 添加、修改和删除的方法就不测试了,按照同样的步骤在service层和controller层创建对应的方法就可以了。

好了,文章就分享到这里了,看完如果觉得对你有所帮助,不要忘了点赞+收藏哦~

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

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

相关文章

Baichuan-13B 介绍及微调

文章目录 Baichuan-13B介绍Baichuan-13B特点Baichuan-13B效果Baichuan-13B模型参数 推理和部署微调和部署 Baichuan-13B介绍 2023年7月11日&#xff0c;百川智能发布Baichuan-13B&#xff01; github地址&#xff1a;https://github.com/baichuan-inc/Baichuan-13B Baichuan-…

Spring实现文件上传,文件上传

第一步&#xff1a;创建jsp文件 创建form表单 提交文件是post 文件上传的表单 服务端能不能获得数据&#xff0c;能 实现单文件上传的步骤&#xff1a; 导入相应的坐标&#xff1a;在pom.xml文件中进行导入 再导入这份&#xff1a; 第二步&#xff0c;在spring-MVC的上传中去配…

【SpringⅡ】简单高效地存储读取对象

目录 &#x1f9e5;1 配置扫描路径 &#x1f9e4;2 类注解实现 Bean 对象的存储 &#x1fa71;2.1 五大类注解的使用 &#x1f381;2.2 五大类注解之间的关系 &#x1f38f;2.3 Java 项目的标准分层 &#x1f383;3 方法注解实现 Bean 对象的存储 &#x1f388;3.1 Bean…

❤️创意网页:HTML5 Canvas技术实现绚丽多彩的烟花特效

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

node中的数据持久化之mysql

一、数据库的基本概念 1. 什么是数据库 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建、访问、管理、搜索和复制所保存的数据。我们也可以将数据存储在其他地方&#xff0c;例如&#xff1…

XML加密和数字签名

上篇文章我们了解了常用的Java加密库和算法,这篇文章主要讲解Java解密在XML中的使用。 XML加密 XML加密(XML Encryption)是指对XML文档中的敏感数据进行加密,以确保只有授权的用户能够解密和访问这些数据。XML加密使用对称或非对称加密算法,对敏感数据进行加密,并将加…

237. 删除链表中的节点

题目描述&#xff1a; 主要思路&#xff1a; 将当前要删除的节点和后边一个的节点值交换&#xff0c;然后删除当前节点后边的一个节点即可。 class Solution { public:void deleteNode(ListNode* node) {node->valnode->next->val;node->nextnode->next->n…

分享一个唯美雪花界面

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>雪</title><meta name"viewport" content"widthdevice-width, initial-scale1&…

linux开机启动输入法且设置英文状态

debian&#xff0c;gnome桌面。fcitx5框架&#xff0c;四叶草输入法。 首先把fcitx5加到开机启动项&#xff0c;方法很多&#xff0c;gnome的插件“优化”里面可以添加开机启动项。 这样开机就能启动输入法&#xff0c;而不用再手动输入shell命令fcitx5了。 但是启动时是中…

vue-element-admin解决跨域问题

更改vue.config.js publicPath: process.env.NODE_ENV production ? /tyzfadmin : /,//开发和生产环境不一样&#xff0c;做个判断 outputDir: dist, assetsDir: static, lintOnSave: false, runtimeCompiler: true, productionSourceMap: false, devServer: {port: port,op…

瑞芯微|如何让拥有双网口的Linux设备实现数据包转发?

本文主要讲解如何&#xff0c;解决基于3568实现双网口互通问题。 一、组网 如下图所示&#xff1a; rk3568自带2个千兆以太口&#xff0c;对应网卡名称为&#xff1a;eth0、eth1pc1和pc2分别连接这2个网口pc1与eth0连接&#xff0c;网段&#xff1a;192.168.30.0pc2与eth1连…

途乐证券-新型城镇概念拉升,东方园林涨停,蕾奥规划等大涨

新型乡镇概念19日盘中发力走高&#xff0c;到发稿&#xff0c;蕾奥规划涨近13%&#xff0c;东方园林涨停&#xff0c;顾地科技涨超8%&#xff0c;新城市、艾布鲁、启迪环境等涨超5%。 消息面上&#xff0c;在国新办18日举行的国务院方针例行吹风会上&#xff0c;住建部房地产市…

django rest_framework 框架动态设置序列化返回的字段

动态修改字段可以使Django rest框架API像graphQL端点一样&#xff0c;只从模型中检索所需的字段。 一旦序列化器被初始化&#xff0c;就可以使用.fields属性访问序列化器上设置的字段字典。访问和修改此属性允许您动态修改序列化器。 显式地修改fields参数可以帮助您做一些奇…

解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

如何从零搭建一个 LLM 应用&#xff1f;不妨试试 LangChain Milvus 的组合拳。 作为开发 LLM 应用的框架&#xff0c;LangChain 内部不仅包含诸多模块&#xff0c;而且支持外部集成&#xff1b;Milvus 同样可以支持诸多 LLM 集成&#xff0c;二者结合除了可以轻松搭建一个 LLM…

猿辅导推出颠覆性产品小猿学练机,加速个性化学习时代到来

近期&#xff0c;沉默近两年的猿辅导在智能硬件领域释放动作&#xff0c;发布旗下首款智能硬件产品——小猿学练机。这一动作代表着&#xff0c;猿辅导正式入局1000亿智能硬件市场。据了解&#xff0c;小猿学练机面向全国中小学生&#xff0c;主打学练一体、以练促学&#xff0…

外部邻区TAC配置错误导致语音被叫无响应问题分析

1、问题描述 用户131********用户&#xff08;中兴AXON 40终端&#xff09;容易出现被叫无响应的现象&#xff0c;现场测试发生概率大约10%。 2、信令分析 6月4日现场测试时&#xff0c;11.47分左右&#xff0c;131********测试时出现一起未接通问题。 端到端平台信令回溯分析…

ubuntu - Linux 下的常用命令

ls 查看当前文件夹下的内容 pwd 查看当前所在文件夹 cd 切换文件夹 touch 如果文件不存在&#xff0c;创建文件 mkdir 创建新目录 rm 删除指定的文件 clear 清屏 ctrl shift 放大终端窗口的字体显示 ctrl - 缩小终端窗口的字体显示 按 上&#xff0f;下 光标键可以在…

【硕士论文完美复现】【价格型需求响应】基于需求侧响应的配电网供电能力综合评估(Matlab代码实现)

目录 &#x1f4a5;1 概述 1.1 电价伸缩系数分析 1.2 需求侧响应数学模型 1.3 粒子群算法求解 1.4 本文流程图 &#x1f4da;2 运行结果 2.1 风电和光伏的出力情况 2.2 峰谷时段分类 2.3 分时电价制定及负荷响应结果 2.3.1 仅考虑需求响应 2.3.2 考虑分布式和需…

图论 并查集 模拟 位运算—题841、127、684、685、657、31、463、1356 C++实现与有向图 无向图 并查集总结

文章目录 841.钥匙和房间DFSBFS 127. 单词接龙684.冗余连接685.冗余连接II657. 机器人能否返回原点31.下一个排列463. 岛屿的周长解法1解法2 1356. 根据数字二进制下 1 的数目排序解法1解法2 注意点 图论&#xff1a;题841、127 并查集&#xff1a;题684、685 模拟&#xff1a;…

记一次从溯源分析到云服务器接管

起因是我这个臭运维的在给客户做常态化的溯源分析&#xff0c;好巧不巧发现了一个IP扔到奇安信威胁情报平台看一下&#xff0c;发现部署了大量的服务&#xff0c;且为阿里云服务器。 看到这里&#xff0c;我大胆的推测&#xff0c;云上的信息中心&#xff0c;客户花点钱&#x…