好友
阅读权限 30
听众
最后登录 1970-1-1
萋小磊
发表于 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依赖
< 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 . HikarIDA taSource
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.258 INFO 23984 --- [ main] c.s.demo.repository.UserRepositoryTest : User(id=3, name=小磊, age=1)
在查看log中 发现jpa任然帮我们实现了查询功能
总结 没啥总结的 具体看看文档其实啥都会了 文档写的很清楚 不懂就写个demo 不是太难的事情
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。