Spring Boot + jpa + oracle 整合及遇到的坑

组里大佬撸的代码,借鉴简单的部分

一、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


 

你可能感兴趣的:(springboot)