一、反向生成數據庫
什麼是JPA呢?
JPA全稱Java Persistence API.JPA通過JDK 5.0註解或XML描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。
接下里就說本文章重點了,那麼怎麼操作呢?只需要如下配置就可以了。
1、pom.xml添加相關依賴
- <!-- mysql依賴 -->
<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文件,並添加相關配置
########################################################
###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)
import javax.persistence.*;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就可以獲取到信息啦
腫麼樣,是不是很簡單的樣子。。。。。