Spring Boot 集成 Spring Data JPA 的基本使用
Spring Boot 与数据访问
mybatis jdbc Spring Data JPA
mybatis 纯注解开发
- 在dao接口上添加@Mapper注解 spring boot 生成代理对象 或者 在main方法添加MapperScan("dao所在包名") 一次直接扫描所有的dao层
- 在方法上填写 注解@Select @Insert @Updata @Delect 可以直接在方法上填写sql语句
spring boot 集成spring data jpa
什么是JPA?
全称Java Persistence API,可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中。
为我们提供了:
1)ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
如:@Entity、@Table、@Column、@Transient、@Query等注解。
2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。底层调用的是Hibernate
1> 实体类的编写和逆向生成sql表
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "tbl_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;
public class User {
@Id //这是一个主键
@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键
private Integer id;
@Column(name = "last_name",length = 50) //这是和数据表对应的一个列 length 表示长度
private String lastName;
@Column //省略默认列名就是属性名
private String email;
2> 编写dao层 继承JpaRepository<T,Serviliber> 封装了常用的方法
//继承JpaRepository来完成对数据库的操作
//自带了对数据库的操作
public interface UserRepository extends JpaRepository<User,Integer> {
List<T> findAll()
List<T> findAll(Sort sort)//获取所有
List<T> findAllById(Iterable<ID> ids)
<S extends T> List<S> saveAll(Iterable<S> entities)
void flush()
<S extends T> S saveAndFlush(S entity)
<S extends T> List<S> saveAllAndFlush(Iterable<S> entities)
@Deprecated
default void deleteInBatch(Iterable<T> entities)
void deleteAllInBatch(Iterable<T> entities)
void deleteAllByIdInBatch(Iterable<ID> ids)
void deleteAllInBatch()
T getOne(ID id)
<S extends T> List<S> findAll(Example<S> example)
<S extends T> List<S> findAll(Example<S> example,
Sort sort)
}
- 1 JpaSpecificationExecutor 接口 可以完成条件查询 可以完成自定义条件查询
public interface UserRepository extends JpaSpecificationExecutor<User,Integer> {
//@Query("from User where id=#{id}")//面向对象的自查寻语句
// @Query("select * from t_user where id=#{id}") 常规sql语句查询
public User findById(Intager id);
}
@Test
public void test2(){
Specification<Users> spec = new Specification<Users>() {
@Override// root 代表源数据 CriteriaBuilder 代表添加条件
public Predicate toPredicate(Root<Users> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("username"),"王五"));
list.add(cb.equal(root.get("userage"),24));
//此时条件之间是没有任何关系的。
Predicate[] arr = new Predicate[list.size()];
return cb.and(list.toArray(arr));
}
};
List<Users> list = this.usersDao.findAll(spec);
for (Users users : list) {
System.out.println(users);
}
}
3> 基本的yml文件配置
server:
port: 8080
servlet:
context-path: /
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=false
username: root
password: mysql123
jpa:
database: MySQL
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
show-sql: true # 显示sql语句
hibernate:
ddl-auto: update # 是否创建数据库表
ddl-auto
create:每次运行程序时,都会重新创建表,故而数据会丢失create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错none: 禁用DDL处理
4> pom文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

浙公网安备 33010602011771号