萋小磊 发表于 2018-11-23 22:23

Spring Data Jpa 初体验

这里开始使用idea创建一个Springboot的项目注意版本 这里使用的2.1.0

首先 简单阅读文档: https://docs.spring.io/spring-data/jpa/docs/2.1.2.RELEASE/reference/html/

Maven依赖



<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>


配置文件 数据源:
#数据源配置 驱动向下兼容 无需修改
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/fms?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
spring.datasource.username=root
spring.datasource.password=root
#以下数据库配置来自于 https://mp.weixin.qq.com/s?__biz=MzUzNTY4NTYxMA==&mid=2247483699&idx=1&sn=5efd1f9d872688eba0029c71b3668662&chksm=fa80f1b6cdf778a0bbd12ce5e97507d697058d7bc070082a8ca828c9910c1379ead43c7b9a05&scene=21#wechat_redirect
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=20
spring.datasource.hikari.auto-commit=true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=DatebookHikariCP
spring.datasource.hikari.max-lifetime=1800000
spring.datasource.hikari.connection-timeout=600000
spring.datasource.hikari.connection-test-query=SELECT 1


接着配置一个东西 这玩意可以自动生成表
spring.jpa.hibernate.ddl-auto=spring.jpa.show-sql=true
spring.jpa.generate-ddl=true

看idea的提示的话 有四个 从字面意思也很容易理解
下面解释来:https://blog.csdn.net/zhangtongpeng/article/details/79609942
ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空

ddl-auto:create-drop----每次程序结束的时候会清空表

ddl-auto:update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新

ddl-auto:validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错

这里先设置:update

跟进去 看看 org.springframework.boot.autoconfigure.orm.jpa.HibernateProperties

看名字是hibernate的实现但是是在spring的包下面 所以emmmmm 看看这这段话

hibernate是持久化实现技术,而jpa是持久化的标准,一个是具体实现,一个是接口协议,当然springdata jpa是在hibernate的基础上更上层的封装实现。


以前看过小马哥(马昕曦)说过,Jpa的规范是拉着hibernate的作者一起去定义的,所以很多相识的点 都是去参照hibernate的   题外话到此结束


@Data
@Entity
@Table(name = "jpa_user")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    Integer id;

    @NotNull
    String name;

    @NotNull
    Integer age;
}


唯一值得注意的是javax.persistence.GeneratedValue   

@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface GeneratedValue {
    GenerationType strategy() default GenerationType.AUTO;

    String generator() default "";
}



这里看到的默认是auto 进去看看


public enum GenerationType {
    TABLE,
    SEQUENCE,
    IDENTITY,
    AUTO;

    private GenerationType() {
    }
}


这是一个枚举 定义了基本的几种自增 如果是Oracle就是需要SEQUENCE

@data lombok.Data 就是lombok有兴趣可以看看https://www.projectlombok.org/

public interface UserRepository extends JpaRepository<User, Integer> {

}






@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class UserRepositoryTest {

    @Autowired
    UserRepository userRepository;

    @Test
    public void add() {
      User user = new User();
      user.setName("小磊");
      user.setAge(1);
      userRepository.save(user);
      log.info("save OK!");
    }

}


org.springframework.data.jpa.repository.JpaRepository save方法来自于这里

具体数据查看数据库 新增OK

然后看看jpa最简单的地方

User queryUserByName(String name);

添加UserRepository接口上
看名字很好理解 查询User条件是name

@Test
public void query() {
    User user = userRepository.queryUserByName("小磊");
    log.info(user.toString());
}

Hibernate: select user0_.id as id1_0_, user0_.age as age2_0_, user0_.name as name3_0_ from jpa_user user0_ where user0_.name=?
2018-11-23 22:14:27.258INFO 23984 --- [         main] c.s.demo.repository.UserRepositoryTest   : User(id=3, name=小磊, age=1)


在查看log中 发现jpa任然帮我们实现了查询功能


总结 没啥总结的 具体看看文档其实啥都会了 文档写的很清楚 不懂就写个demo不是太难的事情

programmingCat 发表于 2018-11-23 22:58

楼主666,写的非常好
页: [1]
查看完整版本: Spring Data Jpa 初体验