Springboot 整合 hibernate 和 jpa_spring.jpa.properties.hibernate.dialect-程序员宅基地

技术标签: springboot  

hibernate 和 jpa 的关系这里就不介绍了,你可以这么理解:hibernate用jpa的方式来实现

1.引入依赖  (jpa里面已经有了hiebrnate的依赖包)

<!--整合hibernate要jpa-->
<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
     <groupId>mysql</groupId>
     <artifactId>mysql-connector-java</artifactId>
</dependency>

2.修改 application.properties

datasource的参数跟你整合mybatis一样,不过整合hibernate还得指定jpa的配置

#datasource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123

#jpa配置
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
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

3.创建实体类(这里用注解式开发,没有了.hbm.xml文件)

通过注解将表名和类名,字段名和属性名关联起来,还有指定主键生成策略

package com.liqiye.springbootdemo.entity;

import java.io.Serializable;
 
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Entity;
import javax.persistence.Table;

/**
 * @author liqiye
 * @description hibernate的实体类
 * @date 2019/5/11
 */
@Entity    // @Entity标识一个实体类,任何Hibernate映射对象都要有这个注解
@Table(name = "Person")
public class Person implements Serializable{
    
    @Id
    // @GeneratedValue(strategy = GenerationType.AUTO)  // 这个和默认一样是以Oracle的方式来实现自增主键,会自动生成hibernate_sequence表
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;
    @Column(name = "name")
    protected String name;
 
    public Long getId() {
        return id;
    }
 
    public void setId(Long id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

4.定义数据库操作接口

类似mybatis的mapper接口一样,包含操作数据库的方法,注入到service层使用,这里用的jpa,继承 JpaRepository 类

 JpaRepository 的子类已经实现了简单的增删改查的方法,我们也可以自定义HQL的方法

package com.liqiye.springbootdemo.mapper;

import com.liqiye.springbootdemo.entity.Person;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

// hibernate的接口,springboot整合hibernate用的是jpa,接口要集成JpaRepository
// 里面已经集成了几个方法,额外的查询需要我们手动添加方法HQL

public interface PersonRepository extends JpaRepository<Person,Integer> {
    public Person findById(Long id);  // 这个在集成的类的子类里面有明确的sql实现,不用再写SQL或者HQL,也可以不写,直接在service里用子类的

    public Person save(Person user);  // 同上

    @Query(value = "SELECT p FROM Person p WHERE name=:name")   // 这是HQL  :xx 指传入参数,跟下面注解@Param对应
    // @Query(value = "SELECT * FROM Person WHERE name=?", nativeQuery = true)   // 这是SQL   nativeQuery为true代表使用SQL语言
    public Person findByName(@Param("name") String name);

}

5.service 

package com.liqiye.springbootdemo.service;

import com.liqiye.springbootdemo.entity.Person;
import com.liqiye.springbootdemo.mapper.PersonRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author liqiye
 * @description
 * @date 2019/5/11
 */
@Service
public class PersonService {

    @Autowired
    private PersonRepository personRepository;

    public Person findById(Long id){
        return personRepository.findById(id);
    }

    public Person findByName(String name){
        return personRepository.findByName(name);
    }

    public void save(Person person){
        personRepository.save(person);
    }

}

5.controller

package com.liqiye.springbootdemo.controller;

import com.liqiye.springbootdemo.entity.Person;
import com.liqiye.springbootdemo.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author liqiye
 * @description
 * @date 2019/5/11
 */
@Controller
public class PersonController {

    @Autowired
    private PersonService personService;

    @RequestMapping("/findById")
    @ResponseBody
    public String findById(String id){
        return personService.findById(Long.parseLong(id)).toString();
    }

    @RequestMapping("/findByName")
    @ResponseBody
    public String findByName(String name){
        return personService.findByName(name).toString();
    }

    @RequestMapping("/save")
    @ResponseBody
    public String save(){
        Person person = new Person();
        person.setName("张三");
        personService.save(person);
        return "插入成功";
    }

}

6.测试

运行项目,发现数据库自动创建了person 表

发起接口请求 http://localhost:8080/save 成功插入数据

发起接口请求 http://localhost:8080/findById?id=1 成功返回一条person数据

发起接口请求 http://localhost:8080/findByName?name=张三 成功返回一条person数据

 

总结:整体下来,跟整合mybatis的用法大同小异,只不过其中的具体实现有点差别。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_42132143/article/details/90110726

智能推荐

Linux 终端会话中,启动任务并放到后台运行_linux 唤醒后台任务-程序员宅基地

文章浏览阅读698次。是一个在 Linux 和类 Unix 系统中使用的命令,用于显示当前终端会话中正在运行或暂停的作业(job)列表。linux要执行一个脚本,耗时很长,想要脚本在后台运行,用户注销或终端软件关闭时也可以继续运行。在一个终端会话中,你可以同时启动多个任务,并将其中一个任务放到后台运行。命令,你可以在终端关闭后继续运行程序,而且它会将标准输出和错误输出重定向到当前目录下的。命令可以列出这些正在运行或暂停的作业,并提供与它们相关的信息。在输出中,作业编号前面包含了一个标识符,如。这样,每次运行都会创建一个新的。_linux 唤醒后台任务

手动安装m4, autoconf, automake, libtool-程序员宅基地

文章浏览阅读64次。安装m4wgethttp://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz\&& tar -xzvf m4-1.4.13.tar.gz \&& cd m4-1.4.13 \&& ./configure -prefix=/usr/localmake && make ins..._如何安装autoconf、 automake、 libtoo

QMenu风格设计qss+阴影_qmenu qss-程序员宅基地

文章浏览阅读755次,点赞9次,收藏10次。Qt的菜单经常在软件开发中用到,默认的菜单效果都不符合设计师的要求,本篇介绍QMenu菜单的风格设计,包括样式表和阴影。_qmenu qss

asp数组使用_asp 数组函数-程序员宅基地

文章浏览阅读3k次。在ASP编程中使用数组数组的定义Dim MyArrayMyArray = Array(1,5,123,12,98)可扩展数组Dim MyArray()for i = 0 to 10ReDim Preserve MyArray(i)MyArray(i)=inext将一个字符串分割并返回分割结果的数组Dim MyArrayMyArray = Split(tempcnt,chr(13)&chr(10))_asp 数组函数

Python学习笔记——类的创建和调用_python类的定义和调用-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏4次。这里写Py目录标题面向对象对象三级目录面向对象对象 对象,是一个抽象概念,英文称作“Object”,表示任何存在的事物。时间万物皆对象。在现实世界中,随处可见的一个事物就是对象,对象是事物存在的实体,就如一个人。 通常将对象划分为两部分,即静态部分和动态部分。静态部分被称为“属性”,任何对象都有具备自身的属性,这些属性不仅是客观存在的,而且是不能忽视的,就如人的性别;动态的属性部分指的是对象的行为,即对象执行的动作,就如人可以行走。 在三级目录..._python类的定义和调用

OpenSSL 和 keytool 的区别_openssl和keytool签发证书区别-程序员宅基地

文章浏览阅读3.7k次。(科普向,大神笑笑就好)学习生成证书的过程,我们会用到 连个工具:openssl、keytool进一步了解,我们会知道,这两个工具,单独也可以生成证书。那他们生成的证书区别是什么?数字证书管理工具openssl和keytool的区别一句话:keytool没办法签发证书,而openssl能够进行签发和证书链的管理因此,keytool 签发的所谓证书只是一种 自签名证书自签名证书所..._openssl和keytool签发证书区别

随便推点

IJKPLAYER源码分析-Android端显示-程序员宅基地

文章浏览阅读88次。上文分析了OpenGL ES渲染的实现。本文边可以分析video画面是如何在Android端窗口上显示的了。

数学建模(七)-----预测类-------time series_时间序列 赛马问题-程序员宅基地

文章浏览阅读1k次。构成要素:长期趋势,季节变动,循环变动,不规则变动长期趋势( T )现象在较长时期内受某种根本性因素作用而形成的总的变动趋势季节变动( S )现象在一年内随着季节的变化而发生的有规律的周期性变动循环变动( C )现象以若干年为周期所呈现出的波浪起伏形态的有规律的变动不规则变动(I )是一种无规律可循的变动,包括严格的随机变动和不规则的突发性影响很大的变动两种类型️ https://ww..._时间序列 赛马问题

OJDBC版本【classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别】_class12.jar和ojdbc.jar-程序员宅基地

文章浏览阅读883次。classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle JDBC驱动来解决的?最常使用的ojdbc14.jar有多个版本,classes12.jar有多个版本你了解吗? 连接类型:1、JDBC OCI: oci是oracle call int_class12.jar和ojdbc.jar

MFC编译程序,缺少MFC动态链接库的解决-程序员宅基地

文章浏览阅读189次。MFC编译程序,缺少MFC动态链接库的解决问题:VS2010 c++编写的程序在别人的机子运行不了,缺少mfc100u.dll xxx100d.dll等的解决方法解决方法: 1.将这些dll打包,和应用程序一起发布; 2.采用MFC静态编译;附1:VS2010中静态编译设置方法使用VS2010编译的程序在windows xp中运行时 经常会出现找不到 相关的DLL文..._mfc 去除dll mfc动态库

【经验分享】计算机专业如何自己增加项目经验?-程序员宅基地

文章浏览阅读4.1k次,点赞9次,收藏23次。来源知乎精选话题,已获得作者授权,详情见阅读全文 现状:最近在找软件开发的实习工作,分别参加了华为,CVTE等面试,在面试过程中,没有项目经验,立马就被面试官表示 没有任何..._知乎 计算机项目经历

精选114个JAVA本科的计算机毕业设计精品,有手就能上手-程序员宅基地

文章浏览阅读31次。对于即将迎来毕业设计的计算机专业的你,选择合适的题目和成功完成项目是个棘手的问题。Springboot电子政务理念的高校”校长信箱的设计与实现48q90。Springboot中小型企业物流管理系统的设计与实现ey32q。Springboot基于的流浪动物领养系统的设计与实现gz2gy。Springboot学生学业预警管理系统的设计与实现57j7l。Springboot高校餐饮管理系统的设计与实现ttu99。Springboot高校宿舍管理系统的设计与实现ukgdt。

推荐文章

热门文章

相关标签