spring_boot demo

创建工按照自己需求导入需要导入的包

springbooot 创建完成后会自动生成配置文件,与实体类,和test

在工程中自动创建的 application.properties 中写配置文件

#配置文件 此文件是后缀形式

#更改端口号 默认为8080
server.port=8180

#配置数据库链接
spring.datasource.url=jdbc:mysql://localhost:3306/(数据库名字)?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=*******
spring.datasource.password=*******

#配置jpa初始化模式会自动读取classpath下面的data.sql文件进行执行
#还会读取schema.sql
#schema.sql里面一般会写建表语句
#data.sql里面会写插入语句
spring.datasource.initialization-mode=always

#关于jpa配置
#执行sql语句时,是否在控制台打印
spring.jpa.show-sql=true
#关闭根据实体类创建表的功能
#none
#create 如果表不存在,则根据实体类配置创建表
#update 如果实体类的配置更改了,与表对应不上,那会更新表的结构
#creat-drop 工程启动的时候先删除表在创建表
spring.jpa.hibernate.ddl-auto=create-drop

创建 Emp实体类

package com.lanou.demo.springboot.entity;

import lombok.*;

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

@Data//次注解增加 getter setter, toString,equals,hashcode
/*@Getter//只增加getter
@Setter//只增加setter
*/
@AllArgsConstructor//增加一个全参的构造方法
@NoArgsConstructor//增加一个无参的构造方法
@Builder//增加建造者模式来创建对象
@Table(name = "emp")//配置该实体类所对应的表名是什么
@Entity
public class Emp implements Serializable{

    //配置主键列要id注释
    @Id
//    配置主键自增长方式
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long euuid;
    @Column(name = "emp_name", unique = true, nullable = false)
    private String ename;
    private String email;
    private String tele;
//
//    fetch=FetchType.LAZY为默认的数据延迟加载,
//    fetch=FetchType.EAGER为急加载。
//    cascade={CascadeType.PERSIST,CascadeType.MERGE,
//            CascadeType.REFRESH,CascadeType.REMOVE}.
//    其中:
//    CascadeType.PERSIST级联新增(又称级联保存);
//    CascadeType.MERGE:级联合并(级联更新);
//    CascadeType.REMOVE:级联删除;
//    CascadeType.REFRESH:级联刷新
//    CascadeType.ALL:以上四种都是;
//    一般采用CascadeType.MERGE:级联合并(级联更新)即可。默认值是均不进行关联。

    //referencedColumnName:参考列名,默认的情况下是列表的主键
    //nullable=是否可以为空,
    //insertable:是否可以插入,
    //updatable:是否可以更新
    // columnDefinition=列定义,
    //foreignKey=外键
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "dep_uuid",referencedColumnName="uuid",nullable=false)
    private Dep dep;

    //    name属性:外键列的名称,默认情况下是:
// 引用实体的字段名称 +“_”+ 被引用的主键列的名称。一般也可以自定义,一般见名知意,就可以采用默认值。
//    referencedColumnName属性:
// 参考列,默认值是关联表的主键。例如你可以定义pet_name为参考列,那么就会将pet的name的值关联到这一列。

}

创建Dep实体类

package com.lanou.demo.springboot.entity;

import lombok.Data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;


@Data
//使用jpa需要配置实体类与表之间的对应关系
//这个配置方式 与hibernate 一样
@Table(name = "dep")//配置该实体类所对应的表名是什么
@Entity
public class Dep implements Serializable {
//    jpa是一个标准
//    hibernate是jpa的一个实现
//    hibernate有个宗旨:尽量少写sql语句


    //配置主键列要id注释
    @Id
//    配置主键自增长方式
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long uuid;

    @Column(name = "dep_name", unique = true, nullable = false)
    private String name;
    //    默认情况下实体类的驼峰格式会自动映射到列的下划线形式
    private String mobile;

//    //    多对一
//    @ManyToOne//里面填对象
//    @JoinColumn(name = "euuid")
//    private Emp emp;

    //  一对多
    @OneToMany(mappedBy = "dep", fetch = FetchType.EAGER)
    private List<Emp> empList;



    //  多对多
//    @ManyToMany
//    @JoinTable(name = "user_authority",joinColumns = @JoinColumn(name = "user_id"),
//    inverseJoinColumns = @JoinColumn(name = "authority_id"))
//    //1、关系维护端,负责多对多关系的绑定和解除
//    //2、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User)
//    //3、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Authority)
//    //4、其实可以不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名,
//    //即表名为user_authority
//    //关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id
//    //关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,即authority_id
//    //主表就是关系维护端对应的表,从表就是关系被维护端对应的表
//  private List<Authority> authorityList;

}

写spl语句 的几种方式

第一种 : 自动生成sql语句
第二种 ;使用注解写sql语句

package com.lanou.demo.springboot.repository;

import com.lanou.demo.springboot.entity.Dep;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
//继承JpaRepository<> 就可以根据方法名自动生成sql语句
//第一个参数写实体类,第二个参数写主键的类型
public interface DepRepository extends JpaRepository<Dep,Long> {

    第一种
    //jpa 可以根据方法名自动生成sql语句
    List<Dep> findByNameContains(String name);

    第二种
    /*nativeQuery = true 正常sql语句*/
    @Query(value = "select *from dep where dep_name like concat('%',:name,'%')",nativeQuery = true)
    List<Dep> findByName(@Param("name") String name);

    第三种
    List<Dep> findAllTest();
}

第三种 在 DepRepository接口 写好方法 创建一个实体类实现

package com.lanou.demo.springboot.repository;

import com.lanou.demo.springboot.entity.Dep;
import com.sun.org.apache.xerces.internal.impl.XMLEntityManager;
import org.springframework.stereotype.Repository;

import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import java.util.List;

/*jpa 会自动根据类名的规则,会自动将该类作为对应接口的实现类*/
@Repository
public class DepRepositoryImpl {

    @Resource
    private EntityManager  entityManager;

    public List<Dep> findAllTest(){
        String sql="select *from dep";
        Query nativeQuery = this.entityManager.createNativeQuery(sql, Dep.class);
        List resultList = nativeQuery.getResultList();
        return resultList;
    }

}

猜你喜欢

转载自www.cnblogs.com/lxx-1843693653/p/11110342.html