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不是太难的事情 楼主666,写的非常好
页:
[1]