spring_boot demo

建立工按照本身需求导入须要导入的包java

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

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

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

#更改端口号 默认为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实体类sql

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"))
//    //一、关系维护端,负责多对多关系的绑定和解除
//    //二、@JoinTable注解的name属性指定关联表的名字,joinColumns指定外键的名字,关联到关系维护端(User)
//    //三、inverseJoinColumns指定外键的名字,要关联的关系被维护端(Authority)
//    //四、其实能够不使用@JoinTable注解,默认生成的关联表名称为主表表名+下划线+从表表名,
//    //即表名为user_authority
//    //关联到主表的外键名:主表名+下划线+主表中的主键列名,即user_id
//    //关联到从表的外键名:主表中用于关联的属性名+下划线+从表的主键列名,即authority_id
//    //主表就是关系维护端对应的表,从表就是关系被维护端对应的表
//  private List<Authority> authorityList;

}

写spl语句 的几种方式 使用Jpaapache

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

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接口 写好方法 建立一个实体类实现app

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

}
相关文章
相关标签/搜索