建立工按照本身需求导入须要导入的包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; } }