遇坑集合
- 配置数据没设置UTF-8编码(记不住) 导致数据库乱码
- 没有设置spring-boot-starter-parent版本与教程一致 导致jpa.findOne()等方法报错
- 忘记写@Runner(SpringRunner.class)+@SpringBootTest注解导致测试类方法一直不成功
- 删除啦默认构造函数导致jpa默写方法失效报错No identifier specified for entity
- 还没搞清楚Date怎么自动记录当前时间并提交(已懂:不是通过注解实现的 是sql语句。。。。)
- @Id 忘啦设置导致No identifier specified for entity
- @Service 忘啦 报错Error creating bean with name
- java.util.Date 测试报错could not execute statement 换成java.sql.Date 并在数据库端更改字符集为utf8 测试sava()成功
- 自动生成创建时间 不能用java.sql.Date 又改回来
- enums 枚举类中没有构造方法 会报错 需要@Getter 不需要set方法
- 把Data当字段 应该Date @Data 是注解
- Page
findByBuyerOpenid(String buyerOpenid, Pageable pageable); (在jpa中加个这方法 花式报错 说参数不对) - 不等价(测试时遇到的)
1
2
3
4
5List<ProductInfo>productInfos=null;
//正常错、对
Assert.assertNotEquals(0,productInfos.size());
//测试一直对
Aseert.assertNouNull(productInfos);
用注解实现创建时间 更新时间 字段 教程
- @EntityListeners
- @CreatedDate
- @LastModifiedDate
- @EnableJpaAuditing
- 缺一不可
1 | (AuditingEntityListener.class) |
用注解实现表之间的关系 (eg:插入一列ProductInfo数据 必须先指定一个ProductCategory)教程
-
- @OneToOne
- @ManyToOne
- @OneToMany
- @ManyToMany
- @Column(name = “自定义字段名”,length = “自定义长度”,nullable = “是否可以空”,unique = “是否唯一”,columnDefinition = “自定义该字段的类型和长度”)
- @Transient 表示该属性并非一个到数据库表的字段的映射
OneToOne关系映射
OneToMany/ManyToOneOneToOne关系映射
1 | //ProductInfo |
ManyToMany关系映射
jpa自定义sql实现复杂查询
- 自定义 select * from product_category 可以
- 下面sql语句数据库可以查出来 程序测试不同 未解决。
- 网上说:Select后面没有别名!!!
- 靠 多表关联查询不能有*吗?
- select a.category_id ,b.product_id from Product_category a inner join Product_info b on a.category_type=b.category_type
- 测试通过。。。。
1 | //jpa中学原生sql |
引错包 导致Page 分页参数错误
- 应该是import org.springframework.data.domain.Pageable;
- 而不是import java.awt.print.Pageable;
- 更正后测试通过
数据库sql建表 一直存在的误区
- CONSTRAINT fk_property_category FOREIGN KEY (cid) REFERENCES category (id)
- 只是建立外键约束 不一定是 一对多/一对一
- 意思是 property表中cid指向category表的id 两者一样 ,在property表插入数据,其cid的值必须在category的id中存在,否则插入失败。
- 一对多等表之间的关系在实体类中体现。
1 | class Dormitory{ |
一个表的外键一定是另一个表的主键吗? of cource!个毛
- 网上两种说法:1.对,2.不一定是主键,但必须是维一索引,主键是维一索引。 区别
- 主键可以有多个 主键约束(PRIMARY KEY) 唯一性约束(UNIQUE) 唯一索引(INDEX)
- 放弃jpa建表 用原生sql建表
jpa 建立外键约束 教程
- @JoinColumn(name = “tid”,foreignKey = @ForeignKey(name = “none”,value = ConstraintMode.NO_CONSTRAINT))
- name值会在创建数据库自动创建外键tid字段。(所以实体类不用声明外键字段)
- 目前问题:外键自动创建啦 但不管插什么都是空
1 |
|
好的东西
- lombok插件 +@Data注解=get/set/toString() idea中下载lombok插件并在pom.xml配置
1 | <dependency> |
- springboot框架注解
- 按ctrl+鼠标点方法 可以看到源代码
- 统一api接口返回的json格式。
- freemaker(.ftl)模板引擎的使用(特定语法完成分页细节判断) pom.xml引入
突然发现artifactId有spring-boot-starter groupId则为org.springframework.boot
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>gson的使用
1 | <dependency> |
- 批量修改/修改统一字段 ctrl+shift+R
- redis 的使用 pom.xml引入
1 | <dependency> |
- websocket 的使用 pom.xml引入
1
2
3
4<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocker</artifactId>
</dependency>
springboot用Pagedui对象+freemaker模板引擎做一个分页demo
总结一下
- 1.知道啦jpa的优势和不足 建表还是用原生sql、
- 2.在jpa中自定义原生sql查询
- 3.数据拼装以及返回格式统一。
- 4.RestController与Controller的区别
- 5.事务、服务、实体类等注解 和第三方的插件lombok
- 6.好用的api接口测试软件postman