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