吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2934|回复: 1
收起左侧

[Java 转载] Spring Data Jpa 初体验

  [复制链接]
萋小磊 发表于 2018-11-23 22:23
这里开始使用idea创建一个Springboot的项目  注意版本 这里使用的2.1.0

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

Maven依赖
微信截图_20181123205702.png


<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 ... =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
微信截图_20181123210154.png
看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.258  INFO 23984 --- [           main] c.s.demo.repository.UserRepositoryTest   : User(id=3, name=小磊, age=1)


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


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

免费评分

参与人数 1吾爱币 +1 收起 理由
孤云 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

programmingCat 发表于 2018-11-23 22:58
楼主666,写的非常好
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 21:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表