pom.xml中添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
如果需要测试,还要添加:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
application.properties中添加:
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 #serverTimezone=UTC指定时区,mysql 6.0+版本需要配置这个参数
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #可以不加,因为根据url可以判断出数据库类型
添加entity类:
@Entity
@DynamicInsert(true) // true 是默认值,写不写一样
@DynamicUpdate(true) // true 是默认值,写不写一样
public class Student {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column
private String name;
@Column
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
添加dao类:
public interface StudentRepository extends JpaRepository<Student, Integer>{
}
添加测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
public class StudentDaoTest {
@Autowired
private StudentRepository StudentRepository;
@Test
public void query() {
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC, "name")); // 根据name排序
Sort sort = Sort.by(orders);
Page<Student> page = StudentRepository.findAll(PageRequest.of(1,5,sort));
Stream<Student> stream = page.get();
for (Student student : page) {
System.out.println(student);
}
}
@Test
public void now() {
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC, "name")); // 根据name排序
Sort sort = Sort.by(orders);
Page<Student> page = StudentRepository.findAll(PageRequest.of(1,5,sort));
Stream<Student> stream = page.get();
for (Student student : page) {
System.out.println(student);
}
}
@Test
public void old() {
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC, "name")); // 根据name排序
Sort sort = new Sort(orders);
Page<Student> page = StudentRepository.findAll(new PageRequest(1, 5,sort));
Stream<Student> stream = page.get();
for (Student student : page) {
System.out.println(student);
}
}
}
启动,会自动创建表,然后手动插入sql语句:
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('1', '20', 'lisi');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('4', '40', 'maliu');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('3', '30', 'wangwu');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('5', '50', 'maliu');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('6', '60', 'rose');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('7', '58', 'jack');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('8', '46', 'guanyu');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('9', '26', 'zhangfei');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('10', '34', 'zhaoyun');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('11', '30', 'machao');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('12', '38', 'huangzhong');
INSERT INTO `student` (`id`, `age`, `name`) VALUES ('13', '78', 'caocao');
再次执行测试,发现可以查到结果了。
如果要打印sql:
spring.jpa.show-sql=true #是否打印sql,默认是false
spring.jpa.properties.hibernate.format_sql=true #是否格式化sql语句,默认是false
设置自动生成:
spring.jpa.hibernate.ddl-auto=update #没有表创建表,新增列创建列
更多数据库链接选项在DataSourceProperties类中,官网地址:
https://github.com/spring-projects/spring-boot/blob/v2.2.1.RELEASE/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jdbc/DataSourceProperties.javaspring.jpa.open-in-view=true
的作用是:
hibernate 允许对关联对象、属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行。如果 Service 层返回一个启用了延迟加载功能的领域对象给 Web 层,当 Web 层访问到那些需要延迟加载的数据时,由于加载领域对象的 Hibernate Session 已经关闭,这些导致延迟加载数据的访问异常。