1. 程式人生 > >springboot + hibernate實現一個簡單的查詢功能

springboot + hibernate實現一個簡單的查詢功能

一,環境

idea,jdk8,oracle

二,實現效果

三,步驟

1 新建一個springboot專案

file->new->project->Spring Initializr

next->填寫自己的groupid等資訊->next->選擇web和jpa元件

next專案就新建成功了.

2 修改為自己的maven倉庫(如果想使用預設的倉庫也可以不修改)

file->settings

3 修改專案為sources,便於後面新建class,package檔案(這一步可以等你新建類出問題的時候才做)

file->project structure->點選下面的sources

4 在pom.xml中引入oracle依賴(正常情況是不應該寫version的,由於懶得去找springboot對應的版本了,就先這樣,但很容易引起衝突)

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.1.0.6.0</version>
</dependency>

如果maven倉庫中沒有這個jar包請,去官網下載,並手動編譯到本地倉庫,編譯命定如下

mvn install:install-file -Dfile=E:/ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.1.0.6.0 -Dpackaging=jar -DgeneratePom=true 

5 配置資料連線  application.yml檔案

#配置資料庫連線
spring:
  datasource:
    driver-class-name: oracle.jdbc.driver.OracleDriver
    url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
    username: xiaobai
    password: 1
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
#配置埠號
server:
  port: 8080

6 編寫dao,service,controller層程式碼

EmpDao.java

package com.yxf.springboothibernate.dao;

import com.yxf.springboothibernate.model.Emp;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface EmpDao  extends JpaRepository<Emp,Integer> {
    @Query("select t from Emp t where t.guid = :id")//無法注入empdao
    public Emp findUserById(@Param("id") String id);//引數需要用@param
}
EmpService.java與EmpServiceImpl.java
package com.yxf.springboothibernate.service;

import com.yxf.springboothibernate.model.Emp;


public interface EmpService {
    Emp findUserById(String id);
}
package com.yxf.springboothibernate.service;

import com.yxf.springboothibernate.dao.EmpDao;
import com.yxf.springboothibernate.model.Emp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class EmpServiceImpl implements  EmpService {
    @Autowired
    private EmpDao empDao;
    @Override
    public Emp findUserById(String id) {
        return empDao.findUserById(id);
    }
}

Emp.java

package com.yxf.springboothibernate.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
//@Table(name="emp")
public class Emp /*implements Serializable */{
    @Id
    //@GeneratedValue
    private String guid;
    private String name;
    private double sal;
    private String deno;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSal() {
        return sal;
    }

    public void setSal(double sal) {
        this.sal = sal;
    }

    public String getDeno() {
        return deno;
    }

    public void setDeno(String deno) {
        this.deno = deno;
    }

    public String getGuid() {
        return guid;
    }

    public void setGuid(String guid) {
        this.guid = guid;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "guid='" + guid + '\'' +
                ", name='" + name + '\'' +
                ", sal=" + sal +
                ", deno='" + deno + '\'' +
                '}';
    }
}

EmpController.java

package com.yxf.springboothibernate.controller;

import com.yxf.springboothibernate.model.Emp;
import com.yxf.springboothibernate.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class EmpController {
    @Autowired
    private EmpService empService;
    @ResponseBody
    @RequestMapping("/query")
    public String queryEmp(){
        Emp emp = empService.findUserById("F003C33CB34349AAA0A860CC9A2D208F");
        System.out.println(emp.toString());
        return emp.toString();
    }
}

7 執行主檔案

四 問題總結

在寫這個demo的過程中也遇到過好幾個問題,由於對hibernate的知識有些遺忘了

1 啟動的時候出現如下錯誤

nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'empDao': 

明顯是dao這個bean物件建立錯誤,但找了很久才發現是我的查詢語句裡面的表寫的是emp,我資料庫裡面是emp,java物件是Emp

此時這裡應該是使用Emp不然就會出現以上錯誤

2 訪問的時候報以下錯誤

IllegalStateException: For queries with named parameters you need to use provide names for method param

需要在傳的引數加上@Param