一.JPA

特点:JPA可以根据方法名自动匹配sql语句.

JPA是一个标准

Hibernate是JPA的一个实现,宗旨是尽量少写sql语句.

使用JPA

1.application.properties配置:

在springBoot工程下的application.properties配置文件中的相关配置:

#配置数据库链接
spring.datasource.url=jdbc:mysql://数据库信息?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=****** #配置数据库初始化的模式,会自动读取resources文件下面的data.sql文件(自定义)进行执行
#还会读取schema.sql文件
#schema.sql一般会写建表语句
#data.sql里面会写数据库插入的语句
spring.datasource.initialization-mode=always #关于JPA的配置
#执行sql语句的时候,是否在控制台打印
spring.jpa.show-sql=true
#none 关闭根据实体类创建表的功能
#create 如果表不存在,则根据实体类的配置创建表
#update 如果实体类的配置更改了,与表对应不上,那么会更新表的结构
#create-drop 工程启动的时候先删除表在创建表。
spring.jpa.hibernate.ddl-auto=none

2.创建实体类

JPA会根据配置的实体类自动创建相应的表.

package com.example.demo.entity;
import lombok.Data;
import javax.persistence.*; @Data
@Entity
//上面这两个注解是lombok里面的
//使用JPA需要配置实体类与表的对应关系
@Table(name = "dep") //配置实体类对应的表的名字是什么
public class Dep { //主键列需要配置ID注解
@Id
//配置注解自增长的方式
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long uuid;
//name : 自定义表名
//unique : 是否唯一
//nullable : 是否为空.
@Column(name = "dep_name" ,unique = true,nullable = false)
private String name;
//默认情况下。实体类的驼峰式的属性会自动映射到列的下划线形式
private String depTele; //建立表的之间的关联.
//OneToOne :一对一
//OneToMany :一对多
//ManyToMany : 多对对
@ManyToMany(fetch = FetchType.EAGER)
//创建外键
@JoinTable(name = "role_menu",joinColumns = @JoinColumn(name = "role_id"),
inverseJoinColumns = @JoinColumn(name = "menu_id"))
private Set<MenuEntity> menus; }

  

3.创建接口

创建一个接口,继承于JpaRepository<class,Long>

该接口有很多对数据库操作的方法,不需要实现,用的时候只需要利用多态调用父接口的方法就能对数据库进行操作.

比如:findById()方法,根据id查询所有.

1.这里面也可以自定义一些方法,不过方法名要符合规则.

2.可以利用@Query注解为自定义的方法配置自己的sql语句.

3.可以定义一个方法,由实现类来重写方法,在实现类里面重写更复杂的sql

package com.example.demo.repository;

import com.example.demo.entity.Dep;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query; import java.util.List; public interface DepRepository extends JpaRepository<Dep,Long> { //JPA可以根据方法名自动生成SQL语句
List<Dep> findAllByNameContaining(String name);
    //为方法配置自定义的sql
@Query(value = "select * from dep where name like concat('%', :name,'%')",nativeQuery = true)
List<Dep> findByname(@Param("name") String name);

//定义一个方法,有实现类来重写该方法,重写sql语句,
List<Dep> findAllTest();
}

接口的实现类.

不需要在类上写implements实现上面的接口,JPA会根据类名的命名规则自动匹配实现类.

注入一个EntityManager对象,该对象会根据sql语句和实体类对数据操作.

//JPA会根据类名的规则,自动将该类的作为对应接口的实现类
@Repository
public class DepRepositoryImpl { @Resource
private EntityManager entityManager; public List<Dep> findAllTest(){ String sql = "select * from dep";
Query query = this.entityManager.createNativeQuery(sql, Dep.class);
List list = query.getResultList(); return list;
} }

4.直接在Service层调用接口方法对数据库进行操作.

   //注入接口对象
@Resource
private DepRepository depRepository; Optional<Dep> optional = this.depRepository.findById(uuid);
//获取到的optional是一个代理对象
//这个代理对象是与数据库绑定的
//当改变这个代理对象的属性的值时,会自动改变数据库中的值
if (optional.isPresent()){
//把代理对象转为实体类对象
Dep dep = optional.get();
return dep;
}

  

二.lombok

lombok主要是对创建的实体类的一些简化,

一些常用的lombok注解:

@Data :   给实体类配置get和set,tostring方法

@AllgrgsConstructor  ;配置一个全参的构造方法

@NoArgsConstrutor : 添加一个空的构造方法

@Builder :创建建造者模式来创建对象.

@Getter : 创建get方式

@Setter ; 创建set方法

@Slf4j  :创建日志对象.

package com.example.demo.entity;
import lombok.*; @Data //真加getter&setter,toString,equals,hashcode
//@Getter //只真加getter方法 其他同理
@AllArgsConstructor //添加一个全参数的构造方法
@NoArgsConstructor //添加一个无参数的构造方法
@Builder //真加一个建造者模式来创建对象
public class Emp { private Long uuid;
private String name;
private String email;
private String tele;
}

  

springBoot_JPA和lombok的更多相关文章

  1. 记录一次bug解决过程:eclipse集成lombok插件

    一 总结 eclipse集成插件lombok: 启动Spring Boot项目: sublime全局搜索关键字:ctrl + shift + F JDK8中的lambda表达式使用 二 BUG描述:集 ...

  2. lombok在IntelliJ IDEA下的使用

    lombok是一款可以精减java代码.提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码.代码越少,意味着出b ...

  3. lombok 简化java代码注解

    lombok 简化java代码注解 安装lombok插件 以intellij ide为例 File-->Setting-->Plugins-->搜索"lombok plug ...

  4. Lombok 安装、入门 - 消除冗长的 java 代码

    lombok 提供了简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码. lombok 的官方网址:http://projectlombok.org/  lombok 安装1. ...

  5. lombok介绍

    Lombok是一种JavaArchive(JAR)文件,可用来消除Java代码的冗长.在写代码时,可以通过这个插件消除各种getter和setter,toString等常用方法. lombok 注解: ...

  6. Lombok简化Java代码

    导包:import lombok.Data; Lombok简化Java代码: 在Lombok中,生成构造方法的annotation一共有三个:@NoArgsConstructor, @Required ...

  7. myeclipse 手动安装 lombok

    1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下    2. 打开 eclipse.ini / myeclipse.ini,在最后面插 ...

  8. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  9. Java代码简化神器-Lombok

    一.背景 前段时间在开源社区中发现了一个比较牛逼的简化Java代码的神器-Lombok,接着自己写了demo进行测试和练习,感觉真的很不错,特此分享给需要的小伙伴们~ 二.开发之前的准备 1.lomb ...

随机推荐

  1. jquery preventDefault()事件

    定义和用法 preventDefault() 方法阻止元素发生默认的行为(例如,当点击提交按钮时阻止对表单的提交). 语法 event.preventDefault() 参数 描述 event 必需. ...

  2. 使用反射机制,获取 ArrayList 的容量大小

    本文所有说明及代码示例都是基于JDK 1.8  ArrayList 提供size()方法获取当前集合的元素数量,但无法知道当前集合的容量,翻看 ArrayList 的源代码,可以看到字段 elemen ...

  3. java-day13

    异常 指的是程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止 异常分类:编译异常,运行期异常 异常的产生过程分析 throw关键字:指方法中抛出指定异常 使用格式:throw new ...

  4. Neo4j模糊查询及分页查询

    Neo4j模糊查询:采用正则方式: MATCH (n:House) where n.Name =~ '李.*' RETURN n 分页: 使用skip 及 limit MATCH (n:House) ...

  5. 一些CSS3新技术

    前些日子在SmashingMagazine看到一篇关于CSS3新技术不错的文章,它详细介绍了CSS3的新特性和它的使用方法,它包括:浏览器专有属性.选择器(属性选择器.连字符.伪类.伪元素).RGBA ...

  6. JDBC_入门及注入问题

    .JDBC基本概念: java database Connectivity java数据库连接,java语言操作数据库 本质: 官方定义的一套操作所有关系型数据库的规则,即接口. 各个数据库厂商实现这 ...

  7. kerberos协议介绍

    一.kerberos认证过程: client向kerberos服务请求,希望获取访问server的权限.kerberos得到了这个消息,首先得判断client是否是可信赖的,也就是白名单黑名单的说法. ...

  8. shell 命令 文件(解)压缩 tar,zip, gzip,bzip2

    1.gzip / gunzip [ gzip data.c]  对文件进行压缩,生成 data.c.gz    同时删除了原文件    同时压缩两个文件     [gunzip  data.c.gz  ...

  9. .net Core开源框架NetModular记录

    NetModular 源码: https://github.com/iamoldli/NetModular 文档: https://nm.iamoldli.com/docs/guide/

  10. splice用法

    splice()方法给数组添加内容,返回新的数组 splice()方法替换数组一项内容,返回新的数组 如果添加进数组的元素个数不等于被删除的元素个数,数组的长度会发生相应的改变. 比如:从第 2 位开 ...