1.pom
<!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.4.10</version> </dependency> <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>
2.application.yml
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test??useUnicode=true&&characterEncoding=utf8 username: root password: 123456 jpa: show-sql: true hibernate: ddl-auto: update jackson: default-property-inclusion: custom server: port: 8100
jpa配置说明:
(1).show-sql是否显示sql语句
(2).hibernate:
ddl-auto:
主要作用是:自动创建、更新、验证数据库表结构
参数配置介绍:
create:
每次加载hibernate时都会删除上一次的生成的表,
然后根据model类重新生成表,哪怕没有改变,
这是导致数据库表数据丢失的一个重要原因。
create-drop:
每次加载hibernate时根据model类生成表,但sessionFactory关闭时,表自动删除。
update:最常用
首次加载hibernate时根据model类自动建立起表结构(要先建立数据库)
以后加载hibernate时根据model类自动更新表结构,即使表结构变了,老数据不删除。
注意:当部署到服务器后,表结构不会立即建立起来,应用首次运行后才会建立表结构。
validate:
每次加载hibernate时,验证创建数据库表结构,和数据库表比较,不创建新表,会插入新值。
3.创建实体类
@Entity public class Person { @Id @Column(name = "id", nullable = false) @GeneratedValue private Long id; private String name; private Integer age; private String address; public Person() { } public Person(Long id, String name, Integer age, String address) { this.id = id; this.name = name; this.age = age; this.address = address; } public Long getId() { return id; } public void setId(Long 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; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; }
4.dao层
@Service public interface PersonRepository extends JpaRepository<Person, Long> { List<Person> findByAddress(String name); Person findByNameAndAddress(String name, String address); @Query("select p from Person p where p.name=:name and p.address=:address") Person withNameAndAddressQuery(@Param("name") String name, @Param("address") String address); @Query("select p from Person p where p.name=:name and p.address=:address and p.age=:age") Person withNameAndAddressAndAgeQuery(String name, String address,Integer age); }
可以点进去看一下JpaRepository
5.controller
@RestController @RequestMapping("/") public class PersionController { @Autowired PersonRepository personRepository; @RequestMapping("/save") public Person save(String name, String address, Integer age) { Person person = personRepository.save(new Person(null, name, age, address)); return person; } @RequestMapping("/q1") public List<Person> q1(String address) { List<Person> people = personRepository.findByAddress(address); return people; } @RequestMapping("/q2") public Person q2(String name, String address) { Person people = personRepository.findByNameAndAddress(name, address); return people; } @RequestMapping("/q3") public Person q3(String name, String address) { Person person = personRepository.withNameAndAddressQuery(name, address); return person; } @RequestMapping("/q4") public Person q4(String name, String address,Integer age) { Person person = personRepository.withNameAndAddressAndAgeQuery(name, address,age); return person; } @RequestMapping("/sort") public List<Person> sort() { List<Person> people = personRepository.findAll(new Sort(Sort.Direction.ASC, "age")); return people; } @RequestMapping("/page") public Page<Person> page(int page, int size){ Page<Person> all = personRepository.findAll(new PageRequest(page, size)); return all; } @RequestMapping("/all") public List<Person> all(){ return personRepository.findAll(); } }启动成功。。。。