1.数据库带两个参数,一个时区,一个utf-8(&allowMultiQueries=true允许多条语句同时执行)
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?serverTimezone=GMT%2B8&characterEncoding=UTF-8&allowMultiQueries=true
username: xxx
password: xxxxxxxxx
2.控制台显示sql语句
spring:
jpa:
hibernate:
ddl-auto: update #自动更新表结构
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect #不加这句则默认为myisam引擎
show-sql: true #显示sql语句
properties:
hibernate.format_sql: true #格式化sql语句
3.排序,分页
Sort sort = new Sort(Sort.Direction.DESC,"id"); //正序列ASC
PageRequest pageRequest=PageRequest.of(1,5,sort);
Page<User> li=userService.findAll(pageRequest);
for (User user:li){
System.err.println(user);
}
4.主键回调
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
PS:@GeneratedValue注解的strategy属性提供四种值:
-AUTO主键由程序控制, 是默认选项 ,不设置就是这个
-IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
-SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持
-Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植
5.测试时要添加
@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional //不加会报no session
@Rollback(false) //默认自动回滚事务,取消
public class Demo3ApplicationTests {
6.@Query
@Query(value = " select * from tt where id>=:s and id<=:t ",nativeQuery = true)
List<User> aaa(Long s,Long t);
@Query(value = " select * from tt where name like %:name% ",nativeQuery = true)
List<User> bbb(String name);
7.@Query insert,update或delete是要加@Modifying 进行修饰
总结如下
(1)INSERT,UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作;
(2)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。
8.jpa语言规则看https://blog.youkuaiyun.com/wujiaqi0921/article/details/78789087