zoukankan      html  css  js  c++  java
  • springBoot_JPA和lombok

    一.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;
    }
    

      

  • 相关阅读:
    联想 Vibe Shot(Z90-3) 免recovery 获取ROOT权限 救砖 VIBEUI V3.1_1625
    联想 Z5S(L78071)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.370
    联想 Z5(L78011) 免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 10.5.254
    联想 S5 Pro(L78041)免解锁BL 免rec 保留数据 ROOT Magisk Xposed 救砖 ZUI 5.0.123
    第二阶段 冲刺八
    第二阶段 冲刺七
    第二阶段 冲刺六
    第二阶段 冲刺五
    代码大全阅读笔记03
    学习进度十二
  • 原文地址:https://www.cnblogs.com/zhouchangyang/p/11125118.html
Copyright © 2011-2022 走看看