1. 程式人生 > >springboot入門_數據庫訪問_jpa

springboot入門_數據庫訪問_jpa

spring runt out end HERE pid lis data 文件中

本文記錄使用jpa訪問數據庫。

創建spring boot項目,並在pom文件中添加相應的依賴包。

 1 <dependency>
 2             <groupId>org.springframework.boot</groupId>
 3             <artifactId>spring-boot-starter-data-jpa</artifactId>
 4         </dependency>
 5         <dependency>
 6             <groupId>org.springframework.boot</groupId>
 7
<artifactId>spring-boot-starter-web</artifactId> 8 </dependency> 9 10 <dependency> 11 <groupId>mysql</groupId> 12 <artifactId>mysql-connector-java</artifactId> 13 <scope>runtime</scope> 14
</dependency>

在resources路徑下創建yml文件,並配置數據庫連接信息,JPA默認使用hibernate做的實現,所以也需要配置hibernate個別參數項,yml文件如下:

 1 spring:
 2   datasource:
 3     url: jdbc:mysql://localhost:3306/test
 4     username: root
 5     password: 123456
 6   jpa:
 7     show-sql: true
 8     hibernate:
 9       ddl-auto: update
10 database: mysql

創建實體類,與數據庫表做映射

 1 @Entity
 2 @Table(name="t_city")
 3 public class City {
 4 
 5     @Id
 6     @GeneratedValue(strategy = GenerationType.AUTO)
 7     private Integer id;
 8     @Column(name = "city_code", length = 50)
 9     private String cityCode;
10     @Column(name = "city_name", length = 50)
11     private String cityName;
12     //省略get和set方法
13 }

創建dao接口,並繼承JpaRepository

 1 @Repository
 2 public interface CityRepository extends JpaRepository<City, Long> {
 3 
 4     /**
 5      * 查詢所有
 6      * @return
 7      */
 8     List<City> findAll();
 9 
10     /**
11      * 根據ID查詢
12      * @param id
13      * @return
14      */
15     @Query("from City where id = :id")
16     City findById(@Param("id") Integer id);
17 
18     @Transactional
19     @Query("update City set city_name=?1 where city_code = ?2")
20     @Modifying
21     int update(String name, String code);
22 
23 }

創建一個service

 1 @Service
 2 public class CityService {
 3 
 4     @Autowired
 5     private CityRepository cityRepository;
 6 
 7     public int add(City city){
 8         Object obj = cityRepository.save(city);
 9         System.out.println(obj.toString());
10         return 1;
11     }
12 
13     public void delete(long id){
14         cityRepository.deleteById(id);
15     }
16 
17     public void update(String name, String code){
18         cityRepository.update(name, code);
19     }
20 
21     public List<City> findAllCity(){
22         return cityRepository.findAll();
23     }
24 
25     public City findById(Integer id){
26         return cityRepository.findById(id);
27     }
28 
29 }

創建controller,提供api方法測試

@RestController
@RequestMapping("data/jpa/city")
public class CityController {

    @Autowired
    private CityService cityService;

    @PutMapping
    public String add(@RequestBody City city){
        System.out.println(city.toString());
        cityService.add(city);
        return "success";
    }

    @DeleteMapping(value="/{id}")
    public String delete(@PathVariable String id){
        cityService.delete(Long.valueOf(id));
        return "success";
    }

    @PostMapping
    public String update(@RequestBody City city){
        cityService.update(city.getCityName(), city.getCityCode());
        return "success";
    }

    @GetMapping("/{id}")
    public City findById(@PathVariable("id") int id){
        City city = cityService.findById(id);
        return city;
    }

    @GetMapping("/list")
    public List<City> findAllCity(){
        List<City> cityList = cityService.findAllCity();
        return cityList;
    }

}

對於一般的增刪改查方法,我們也可在再dao中繼承CrudRepository來實現對應的方法。一般在開發中,我們的業務也會用到分頁排序等功能,這JPA也做了支持,我們可以通過繼承PagingAndSortingRepository來實現。

springboot入門_數據庫訪問_jpa