SpringBoot入门系列:第五篇 JPA mysql

来源:互联网 发布:蚌埠电视台网络直播 编辑:程序博客网 时间:2024/06/06 05:43

一,准备工作,建立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导入工程

3、工程导入之后,文件结构如下图


4、在包com.example下建立web文件夹

5、便于测试,引入spring-boot-sample-helloworld的HelloController及配置文件logback.xml

HelloController代码为

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  1. package com.example.web;  
  2.   
  3. import org.slf4j.Logger;  
  4. import org.slf4j.LoggerFactory;  
  5. import org.springframework.web.bind.annotation.PathVariable;  
  6. import org.springframework.web.bind.annotation.RequestMapping;  
  7. import org.springframework.web.bind.annotation.RestController;  
  8.   
  9. @RestController  
  10. public class HelloController {  
  11.   
  12.     protected static Logger logger=LoggerFactory.getLogger(HelloController.class);  
  13.       
  14.     @RequestMapping("/")  
  15.     public String helloworld(){  
  16.         logger.debug("访问hello");  
  17.         return "Hello world!";  
  18.     }  
  19.       
  20.     @RequestMapping("/hello/{name}")  
  21.     public String helloName(@PathVariable String name){  
  22.         logger.debug("访问helloName,Name={}",name);  
  23.         return "Hello "+name;  
  24.     }  
  25. }  
logback.xml配置为
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  1. <configuration>    
  2.     <!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,,,, -->    
  3.     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">    
  4.         <encoder>    
  5.             <pattern>%d %p (%file:%line\)- %m%n</pattern>  
  6.             <charset>GBK</charset>   
  7.         </encoder>    
  8.     </appender>    
  9.     <appender name="baselog"    
  10.         class="ch.qos.logback.core.rolling.RollingFileAppender">    
  11.         <File>log/base.log</File>    
  12.         <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">    
  13.             <fileNamePattern>log/base.log.%d.i%</fileNamePattern>    
  14.             <timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">    
  15.                 <!-- or whenever the file size reaches 64 MB -->    
  16.                 <maxFileSize>64 MB</maxFileSize>    
  17.             </timeBasedFileNamingAndTriggeringPolicy>    
  18.         </rollingPolicy>    
  19.         <encoder>    
  20.             <pattern>    
  21.                 %d %p (%file:%line\)- %m%n  
  22.             </pattern>    
  23.             <charset>UTF-8</charset> <!-- 此处设置字符集 -->   
  24.         </encoder>    
  25.     </appender>    
  26.     <root level="info">    
  27.         <appender-ref ref="STDOUT" />    
  28.     </root>    
  29.     <logger name="com.example" level="DEBUG">    
  30.         <appender-ref ref="baselog" />    
  31.     </logger>    
  32. </configuration>  
注:logback.xml文件位于src/main/resources下

6、启动工程,通过浏览器查看正确性

http://localhost:8080/

http://localhost:8080/hello/上帝

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

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

2、在domain中建立类Person

[java] view plain copy 在CODE上查看代码片派生到我的代码片
  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 在CODE上查看代码片派生到我的代码片
  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 在CODE上查看代码片派生到我的代码片
  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层代码,对于业务对象基本没有变化。

0 0
原创粉丝点击