springboot之jpa支持
JPA是什么
JPA (Java Persistence API)Java持久化API。是一套Sun公司Java官方制定的ORM 方案,是规范,是标准 ,sun公司自己并没有实现
JPA的总体思想和现有Hibernate、TopLink、JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
ORM映射元数据
JPA支持XML和JDK5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
API
用来操作实体对象,执行CRUD操作,框架在后台替代我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
查询语言
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
使用
导入相关pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
application.yml文件配置
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
实体类
只需要写实体类中列段,标明在运行项目,jpa就会在数据库中建表了,
package com.tzp.springboot02.entity;
import lombok.Data;
import javax.persistence.*;
/**
* @author 心如止水
* @site www.xiaomage.com
* @company
* @create 2019-11-13 22:36
*/
@Data
@Entity
@Table(name="t_springboot_book") //创建数据库表
public class Hbook {
@Id //标明是个ID
@GeneratedValue //为自增列
private Integer bid;
@Column(length = 100)
private String bname;
@Column
private Float price;
// @ManyToOne 此注解可生成主外键关系
}
jpa值增删改查
- 只要继承JpaRepository,通常所用的增删查改方法都有
- 第一个参数:操作的实体类
- 第二个参数:实体类对应数据表的主键
package com.tzp.springboot02;
import com.tzp.springboot02.entity.Hbook;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* @author 心如止水
* @site www.xiaomage.com
* @company
* @create 2019-11-13 23:03
*/
@Component
@Service
public interface HbookDao extends JpaRepository<Hbook, Integer> {
}
如果要对sql语句进行修改的话,可以在dao方法的当前方法添加注解,名字是什么不代表sql里必须要写什么类型的sql,方法里括号参数可以传到上面注解里去,所以注解名字不必太在意,
@SQLInsert(sql="select * from t_spring_book where bname ='zs'")
public void getAll();
JpaController
package com.tzp.springboot02.controller;
import com.tzp.springboot02.dao.HbookDao;
import com.tzp.springboot02.entity.Hbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author 心如止水
* @site www.xiaomage.com
* @company
* @create 2019-11-13 23:17
*/
@RestController
@RequestMapping("/jpa")
public class JpaController {
@Autowired
private HbookDao jpaDao;
@RequestMapping("/add")
public String add(Hbook book){
jpaDao.save(book);
return "success";
}
@RequestMapping("/edit")
public String edit(Hbook book){
jpaDao.save(book);
return "success";
}
@RequestMapping("/del")
public String del(Hbook book){
jpaDao.delete(book);
return "success";
}
@RequestMapping("/getOne")
public Hbook getOne(Integer bid){
// 会出现懒加载问题:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
// return jpaDao.getOne(bid);
return jpaDao.findById(bid).get();
}
@RequestMapping("/getAll")
public List<Hbook> getAll(){
return jpaDao.findAll();
}
}
查询数据
Springboot+bootstrap界面版之增删改查及图片上传
本次案例采取的是spring data jpa和bootstrap3来完成的,并没有使用github提供的分页插件Pagehelper,pagehelper与SSM配合分页在前面博客已经有所讲解。
pom依赖
下面这里是加上了<mysql.version>5.1.44</mysql.version>
,<version>${mysql.version}</version>
我们需要把它降低驱动版本
<properties>
<java.version>1.8</java.version>
<mysql.version>5.1.44</mysql.version>
</properties>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</dependency>
application.yml文件配置
server:
servlet:
context-path: /springboot
spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=utf8
username: mybatis_ssm
password: xiaoli
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 30000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: true
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
filter:
stat:
merge-sql: true
slow-sql-millis: 5000
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
session-stat-enable: true
session-stat-max-count: 100
stat-view-servlet:
enabled: true
url-pattern: /druid/*
reset-enable: true
login-username: admin
login-password: admin
allow: 127.0.0.1
thymeleaf:
cache: false
# 解决图片上传大小限制问题,也可采取配置类
servlet:
multipart:
max-file-size: 20MB
max-request-size: 60MB
在启动类Springboot05Application.java添加注解 @EnableTransactionManagement
上传文件映射配置类MyWebAppConfigurer.java
/**
* 资源映射路径
*/
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/uploadImages/**").addResourceLocations("file:E:/temp/");
super.addResourceHandlers(registry);
}
}
StringUtils
一些常用的方法
package com.tzp.springboot03.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
public class StringUtils {
// 私有的构造方法,保护此类不能在外部实例化
private StringUtils() {
}
/**
* 如果字符串等于null或去空格后等于"",则返回true,否则返回false
*
* @param s
* @return
*/
public static boolean isBlank(String s) {
boolean b = false;
if (null == s || s.trim().equals("")) {
b = true