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. 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>
posted @ 2021-07-16 22:15  zhiy  阅读(171)  评论(0)    收藏  举报