标签:update 构造 shc unique 结构 ica too lte rem
创建工按照自己需求导入需要导入的包
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;
}
}
标签:update 构造 shc unique 结构 ica too lte rem
原文地址:https://www.cnblogs.com/lxx-1843693653/p/11110342.html