组里大佬撸的代码,借鉴简单的部分
一、maven依赖
只需要三个依赖:springboot , springboot jpa , ojdc。lombok是@slf4j用的,可以简化日志代码;其中ojdc 如果maven不能下载的话,可以到csdn下载:https://download.csdn.net/download/qq_38113432/10647749
org.springframework.boot
spring-boot-starter-parent
2.0.4.RELEASE
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-data-jpa
com.oracle
ojdbc6
11.2.0.4
org.springframework.boot
spring-boot-starter-test
test
org.projectlombok
lombok
org.springframework.boot
spring-boot-maven-plugin
二、配置文件
#最简配置
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@192.168.1.21:1521:assistantdb
spring.datasource.username=assistant
spring.datasource.password=assistant123
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
spring.jpa.hibernate.ddl-auto = update
spring.jpa.show-sql=true
server.port=8081
不得不提,springboot的约定大于配置真的很强大,几行代码就完成了我们的配置
三、实体类
实体类很简单,主要就是表名列名别写错
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table( name = "FILE_INFO" )
public class FileInfoBean {
@Column( name = "FILE_NAME" )
private String fileName;
@Column( name = "DATE_TIME" )
@Id
private String dateTime;
@Column( name = "MONTH" )
private String month;
@Column( name = "FILE_TYPE" )
private String fileType;
@Column( name = "FILE_SIZE" )
private long fileSize;
public FileInfoBean() {
}
public FileInfoBean( String fileName, String month, String dateTime, String fileType, long fileSize ) {
this.fileName = fileName;
this.month = month;
this.dateTime = dateTime;
this.fileType = fileType;
this.fileSize = fileSize;
}
public String getFileName() {
return fileName;
}
public void setFileName( String fileName ) {
this.fileName = fileName;
}
public String getMonth() {
return month;
}
public void setMonth( String month ) {
this.month = month;
}
public String getDateTime() {
return dateTime;
}
public void setDateTime( String dateTime ) {
this.dateTime = dateTime;
}
public String getFileType() {
return fileType;
}
public void setFileType( String fileType ) {
this.fileType = fileType;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize( long fileSize ) {
this.fileSize = fileSize;
}
}
四、Repository接口
继承JpaRepository,添加想要的方法;这里就是按月份和文件类型分页查询
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface FileInfoRepository extends JpaRepository< FileInfoBean, String > {
Page< FileInfoBean > findAllByMonthAndFileType( String month, String fileType, Pageable pageable );
}
五、Controller类
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/**
* 查询文件信息
*/
@RestController
@Slf4j
public class FileInfoController {
private FileInfoRepository FileInfoRepository;
private ObjectMapper mapper;
public FileInfoController( FileInfoRepository FileInfoRepository, ObjectMapper mapper ) {
this.FileInfoRepository = FileInfoRepository;
this.mapper = mapper;
}
@RequestMapping( "/getFileInfoLog" )
@ResponseBody
public String getFileInfoLog( @RequestParam( value = "page_index", required = false, defaultValue = "1" ) Integer pageNum,
@RequestParam( value = "page_total", required = false, defaultValue = "20" ) Integer pageSize,
@RequestParam( value = "file_type", defaultValue = "log" ) String fileType,
@RequestParam( value = "log_date" ) String month ) {
log.info( "查询{}周期归档日志,文件类型{},分页信息:当前第{}页 - 每页{}条数据", month, fileType, pageNum, pageSize );
// 初始化返回值
String responseJson = "{}";
Map< String, Object > result = new HashMap<>( 3 );
result.put( "result", 500 );
result.put( "message", "数据转换失败!" );
result.put( "data", new ArrayList<>() );
// 准备分页条件
Pageable pageable = PageRequest.of( pageNum, pageSize, Sort.Direction.DESC, "dateTime" );
// 查询结果
log.info( "查询归档信息数据..." );
Page< FileInfoBean > page = FileInfoRepository.findAllByMonthAndAndFileType( month, fileType, pageable );
log.info( "查询到{}条归档信息数据", page.getTotalElements() );
// 组装返回值
result.put( "result", 200 );
result.put( "message", "成功" );
result.put( "data", page.getContent() );
try {
responseJson = mapper.writeValueAsString( result );
} catch ( JsonProcessingException e ) {
log.error( "数据转换失败!", e );
}
log.info( "查询结果准备完毕,返回结果数据!" );
return responseJson;
}
}
接下来就启动程序访问接口测试吧,其他的增删改查是需要调用不同的repository就行了
六、遇到的坑
1. Pageable pageable = PageRequest.of( pageNum, pageSize, Sort.Direction.DESC, "dateTime" );
分页中的排序字段用的是bean类中的字段,不是数据库表中的字段,我们用数据库中的字段"date_time"就报错了
"no property name DATE found for ...";
2.jpa中默认用了sql server的方言,使用oracle 的方言需要在application文件中加入配置
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect