第三課 從零開始學Spring boot 之 (Mysql + Hibernate JPA 反向工程)

一、反向生成數據庫

       什麼是JPA呢?

JPA全稱Java Persistence API.JPA通過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。

http://baike.baidu.com/link?url=LdqIXvzTr0RDjY2yoRdpogDdzaZ_L-DrIOpLLzK1z38quk6nf2ACoXEf3pWKTElHACS7vTawPTmoFv_QftgT_q

       接下里就說本文章重點了,那麼怎麼操作呢?只需要如下配置就可以了。

1、pom.xml添加相關依賴

  1. <!-- mysql依賴 -->
  2.   <dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</artifactId>

    <version>1.0.16</version>

    </dependency>

    <dependency>

    <groupId>mysql</groupId>

    <artifactId>mysql-connector-java</artifactId>

    <version>5.1.36</version>

    </dependency>

    <!-- hibernate jpa依賴 -->

    <dependency>  

               <groupId>org.springframework.boot</groupId>  

               <artifactId>spring-boot-starter-data-jpa</artifactId>  

    </dependency>


     

2、在項目的src/main/resources目錄下新建application.properties文件,並添加相關配置



Properties文件配置:


  1. ########################################################  

    ###datasource  

    ########################################################  

    spring.datasource.url = jdbc:mysql://localhost:3306/test

    spring.datasource.username = root

    spring.datasource.password = root

    spring.datasource.driverClassName = com.mysql.jdbc.Driver 

    spring.datasource.max-active=20

    spring.datasource.max-idle=8

    spring.datasource.min-idle=8

    spring.datasource.initial-size=10

       

    ########################################################  

    ### Java Persistence Api  

    ########################################################  

    # Specify the DBMS  

    spring.jpa.database = MYSQL

    # Show or not log for each sql query  

    spring.jpa.show-sql = true

    # Hibernate ddl auto (create, create-drop, update)  

    spring.jpa.hibernate.ddl-auto = update

    # Naming strategy  

    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

    # stripped before adding them to the entity manager)  

    spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect



     

接下來就可以使用Hibernate的反向工程了,在實體類註解@Entity就會自動進行表的DDL操作了。

我們在實體類中加入註解:@Entity  並添加主鍵 @Id 註解及策略@GeneratedValue(strategy= GenerationType.AUTO)  


  1. import javax.persistence.*;

  2. import com.alibaba.fastjson.annotation.JSONField;


    @Entity//加入這個註解,Demo就會進行持久化了,在這裏沒有對@Table進行配置,請自行配置。

    public class Student {

    @Id

    @GeneratedValue(strategy= GenerationType.AUTO)

    private int id;

    private String studentName;

    private String six;

    }

 

運行之後,就可以在數據庫中看到student表了。

注:在此過程中可能出現的問題:

(1)jdbc.driver錯誤、如下圖所示:


運行過程中出現上面的error,首先確定你的application.properties配置文件及jar包是否正確,第二,檢查以下properties文件配置數據源處是否存在多餘的空格(尤其是尾部)

(2)、springboot-jpa 報錯:no identifier specified for entity

    遇到這種問題,直接把entity裏面引入的 import javax.persistence 改成import javax.persistence.*

二、springboot +hibernate持久化

  (1)   創建實體類Demo,如果已經存在,可以忽略。

            

     

   (2)   創建jpa repository類操作持久化。

    

package com.gongh.repository;

import org.springframework.data.repository.CrudRepository;

import com.gongh.model.Student;

public interface StudentRepository extends CrudRepository<Student, Integer> {

	//另外就是在Spring Data的核心接口裏面Repository是最基本的接口了, 

	//spring提供了很多實現了該接口的基本接口,如:CrudRepository,PagingAndSortingRepository,SimpleJpaRepository,QueryDslJpaRepository等大量查詢接口

}

        (3)   創建service類。

package com.gongh.repository.service;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

import com.gongh.model.Student;
import com.gongh.repository.StudentRepository;

/**
 * 提供student的服務類
 * @author gh
 *
 */
@Service
public class StudentService {
	
	@Resource
    private StudentRepository studentRepository;

	@Transactional
	 public void save(Student student){
		studentRepository.save(student);
	  }
}

        (4)   controller中

package com.gongh;

import javax.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.gongh.model.Student;
import com.gongh.repository.service.StudentService;

@RestController
@RequestMapping("/Student")
public class StudentController {
	
	@Resource
	private StudentService studentService;
	
	   /**
	    * 測試保存方法
	    * @return
	    */
	    @RequestMapping("/save")
	    public String save(){
	    	Student student = new Student();  
	    	student.setStudentName("James And LiLei");
	    	student.setAge(10);
	    	student.setSix("男");
	    	studentService.save(student);
	       return "save success";
	    }
}

之後就可以進行測試了,訪問地址:http://127.0.0.1:8080/Student/save

查看數據庫,就可以看到已經添加的數據了。




三、springboot + jdbcTemplate 進行數據庫操作


(1)   pom.xml加入jdbcTemplate的依賴;

<dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>

(2)   編寫StudentDao類,聲明爲:@Repository,引入JdbcTemplate

package com.gongh.dao;

import javax.annotation.Resource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.gongh.model.Student;

/**
 * 使用JdbcTemplate操作數據庫
 * @author gh
 *
 */
@Repository
public class StudentDao {
	 
	@Resource
	 private JdbcTemplate jdbcTemplate;

	    /**
	     * 根據id獲取學生對象
	     * @param id
	     * @return
	     */
	    public Student getById(int id){
	       String sql = "select * from student where id=?";
	       RowMapper<Student> rowMapper = new BeanPropertyRowMapper<Student>(Student.class);
	       return jdbcTemplate.queryForObject(sql, rowMapper,id);
	    }

}

(3)   編寫StudentService類,引入StudentDao進行使用

package com.gongh.repository.service;

import javax.annotation.Resource;
import javax.transaction.Transactional;

import org.springframework.stereotype.Service;

import com.gongh.dao.StudentDao;
import com.gongh.model.Student;
/**
 * 提供student的服務類
 * @author gh
 *
 */
@Service
public class StudentService {

    @Resource
    private StudentDao studentDao;

	@Transactional
	public Student getById(int id){
        return studentDao.getById(id);

	}
}

(4)   編寫controller進行測試

/** 

     * 返回student數據: 

     * @return 

     */ 

    @RequestMapping("/getStudentById")  

    public Student getStudentById(int id){  

    return studentService.getById(id);

    } 



然後地址欄輸入:http://127.0.0.1:8080/Student/getStudentById?id=1就可以獲取到信息啦

腫麼樣,是不是很簡單的樣子。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章