SpringBoot入门系列:第五篇 JPA mysql

来源:互联网 发布:和彩云管家 网络异常 编辑:程序博客网 时间:2024/06/04 20:14

一,准备工作,建立spring-boot-sample-mysql工程

1、http://start.spring.io/

     A、Artifact中输入spring-boot-sample-MySQL

     B、勾选Web下的web

     C、勾选SQL下的JPA MYSQL

2、Eclips中导入工程spring-boot-sample-mysql

     A、解压快捷工程spring-boot-sample-mysql到某文件夹

     B、eclips中file->import->Import Existing Maven Projects-->Select Maven projects-->finish导入工程

当然,之前有相关的项目基础结构,也只需要把对应的pom.xml里面的配置复制过来即可...无需如此繁琐的操作


二,使用JPA,构建业务对象及访问库

1、在包com.example下建立domain文件夹

2、在domain中建立类Person

[java] view plain copy
  1. package com.example.domain;  
  2.   
  3. import javax.persistence.Entity;  
  4. import javax.persistence.GeneratedValue;  
  5. import javax.persistence.Id;  
  6.   
  7. @Entity  
  8. public class Person {  
  9.       
  10.     @Id  
  11.     @GeneratedValue  
  12.     private Long id;  
  13.       
  14.     private String name;  
  15.       
  16.     private Integer age;  
  17.       
  18.     private String address;  
  19.   
  20.     public Person() {  
  21.         super();  
  22.     }  
  23.   
  24.     public Person(Long id, String name, Integer age, String address) {  
  25.         super();  
  26.         this.id = id;  
  27.         this.name = name;  
  28.         this.age = age;  
  29.         this.address = address;  
  30.     }  
  31.   
  32.     public Long getId() {  
  33.         return id;  
  34.     }  
  35.   
  36.     public void setId(Long id) {  
  37.         this.id = id;  
  38.     }  
  39.   
  40.     public String getName() {  
  41.         return name;  
  42.     }  
  43.   
  44.     public void setName(String name) {  
  45.         this.name = name;  
  46.     }  
  47.   
  48.     public Integer getAge() {  
  49.         return age;  
  50.     }  
  51.   
  52.     public void setAge(Integer age) {  
  53.         this.age = age;  
  54.     }  
  55.   
  56.     public String getAddress() {  
  57.         return address;  
  58.     }  
  59.   
  60.     public void setAddress(String address) {  
  61.         this.address = address;  
  62.     }  
  63.   
  64. }  
注意:构造函数

3、在包com.example下建立repository文件夹

4、在repository中建立接口PersonRepository

[java] view plain copy
  1. package com.example.repository;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.data.jpa.repository.JpaRepository;  
  6. import org.springframework.data.jpa.repository.Query;  
  7. import org.springframework.data.repository.query.Param;  
  8. import org.springframework.stereotype.Repository;  
  9.   
  10. import com.example.domain.Person;  
  11.   
  12. @Repository  
  13. public interface PersonRepository extends JpaRepository<Person,Long> {  
  14.   
  15.     List<Person> findByName(String name);  
  16.       
  17.     List<Person> findByAddress(String address);  
  18.       
  19.     List<Person> findByNameAndAddress(String name,String address);  
  20.       
  21.     @Query("select p from Person p where p.name=:name and p.address=:address")  
  22.     List<Person> withNameAndAddressQuery(@Param("name")String Name,@Param("address")String address);  
  23. }  
5、在web中建立DataController

[java] view plain copy
  1. package com.example.web;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.slf4j.Logger;  
  6. import org.slf4j.LoggerFactory;  
  7. import org.springframework.beans.factory.annotation.Autowired;  
  8. import org.springframework.data.domain.Page;  
  9. import org.springframework.data.domain.PageRequest;  
  10. import org.springframework.data.domain.Sort;  
  11. import org.springframework.data.domain.Sort.Direction;  
  12. import org.springframework.web.bind.annotation.RequestMapping;  
  13. import org.springframework.web.bind.annotation.RestController;  
  14.   
  15. import com.example.domain.Person;  
  16. import com.example.repository.PersonRepository;  
  17.   
  18. @RestController  
  19. public class DataController {  
  20.       
  21.     protected static Logger logger=LoggerFactory.getLogger(DataController.class);  
  22.   
  23.     @Autowired  
  24.     PersonRepository personRepository;  
  25.       
  26.     @RequestMapping("/save")  
  27.     public Person save(String name,String address,Integer age){  
  28.         logger.debug("save 开始");  
  29.         Person p=personRepository.save(new Person(null,name,age,address));  
  30.         logger.debug("save 结束");  
  31.         return p;  
  32.     }  
  33.       
  34.     @RequestMapping("/q1")  
  35.     public List<Person> q1(String address){  
  36.         logger.debug("q1 开始");  
  37.         logger.debug("q1 接收参数address={}",address);  
  38.         List<Person> people=personRepository.findByAddress(address);  
  39.         return people;  
  40.     }  
  41.       
  42.     @RequestMapping("/q2")  
  43.     public List<Person> q2(String name,String address){  
  44.         logger.debug("q2 开始");  
  45.         logger.debug("q2接收参数name={},address={}",name,address);  
  46.         return personRepository.findByNameAndAddress(name, address);  
  47.     }  
  48.       
  49.     @RequestMapping("/q3")  
  50.     public List<Person> q3(String name,String address){  
  51.         logger.debug("q3 开始");  
  52.         logger.debug("q3接收参数name={},address={}",name,address);  
  53.         return personRepository.withNameAndAddressQuery(name, address);  
  54.     }  
  55.       
  56.     @RequestMapping("/sort")  
  57.     public List<Person> sort(){  
  58.         logger.debug("sort 开始");  
  59.         List<Person> people=personRepository.findAll(new Sort(Direction.ASC,"age"));  
  60.         return people;  
  61.     }  
  62.       
  63.     @RequestMapping("/page")  
  64.     public Page<Person> page(){  
  65.         logger.debug("page 开始");  
  66.         Page<Person> people=personRepository.findAll(new PageRequest(1,2));  
  67.         return people;  
  68.     }  
  69. }  
6、配置数据库连接,在application.properties(src/main/resources下)

spring.datasource.url=jdbc:mysql://192.168.56.201:3306/bootsample?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true

7、运行测试

A、先保存数据

http://localhost:8080/save?name=aa&&address=北京&&age=1
http://localhost:8080/save?name=ab&&address=北京&&age=2
http://localhost:8080/save?name=cq1&&address=重庆&&age=50
http://localhost:8080/save?name=cq2&&address=重庆&&age=51

B、查询q1

http://localhost:8080/q1?address=北京

C、查询q2

http://localhost:8080/q2?address=北京&&name=aa

D、查询q3

http://localhost:8080/q3?address=北京&&name=aa

E、排序

http://localhost:8080/sort

F、分页

http://localhost:8080/page


运用hibernate访问mysql,基本也是老技术,只是用JPA简化了dao层代码,对于业务对象基本没有变化

只看这篇肯定会遇到一些错误,可以参考我的上一篇,可以解决那些没有注入的或者没有扫描的问题,都是一些注解的配置等等.