.(可有可无)Developer Tools : Spring Boot DevTools(热加载),如果有Jrebel推荐使用,没有则需要配置该热加载文件.
Lombok:实体类注解开发公具
3.配置 .XML配置文件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--阿里巴巴Druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
<scope>runtime</scope>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.properties</include>
<include>*.xml</include>
<include>*.yml</include>
<include>**/*.xml
org.springframework.boot
spring-boot-maven-plugin
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
5.1.44
true
4,添加generatorConfig.xml文件至resources目录下
配置EditConfiguations的Maven启动方式命令:mybatis-generator:generate -e
配置文件内容如下:具体情况具体分析,^^
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
<!-- 引入配置文件 -->
<properties resource="jdbc.properties"/>
<!--指定数据库jdbc驱动jar包的位置-->
<classPathEntry location="D:\Tomcats\MyRepository\maven\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/>
<!-- 一个数据库一个context -->
<context id="infoGuardian">
<!-- 注释 -->
<commentGenerator>
<property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
<property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
</commentGenerator>
<!-- jdbc连接 -->
<jdbcConnection driverClass="${jdbc.driver}"
connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>
<!-- 类型转换 -->
<javaTypeResolver>
<!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.) -->
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 01 指定javaBean生成的位置 -->
<!-- targetPackage:指定生成的model生成所在的包名 -->
<!-- targetProject:指定在该项目下所在的路径 -->
<javaModelGenerator targetPackage="com.study.jpa.model"
targetProject="src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
<!-- 是否对model添加构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否针对string类型的字段在set的时候进行trim调用 -->
<property name="trimStrings" value="false"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- 02 指定sql映射文件生成的位置 -->
<sqlMapGenerator targetPackage="mapper"
targetProject="src/main/resources">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- 03 生成XxxMapper接口 -->
<!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
<!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
<!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
<javaClientGenerator targetPackage="com.study.jpa.mapper"
targetProject="src/main/java" type="XMLMAPPER">
<!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
<!-- 配置表信息 -->
<!-- schema即为数据库名 -->
<!-- tableName为对应的数据库表 -->
<!-- domainObjectName是要生成的实体类 -->
<!-- enable*ByExample是否生成 example类 -->
<!--<table schema="" tableName="t_book" domainObjectName="Book"-->
<!--enableCountByExample="false" enableDeleteByExample="false"-->
<!--enableSelectByExample="false" enableUpdateByExample="false">-->
<!--<!– 忽略列,不生成bean 字段 –>-->
<!--<!– <ignoreColumn column="FRED" /> –>-->
<!--<!– 指定列的java数据类型 –>-->
<!--<!– <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> –>-->
<!--</table>-->
<!-- <table schema="" tableName="t_books" domainObjectName="Book"
enableCountByExample="false" enableDeleteByExample="false"
enableSelectByExample="false" enableUpdateByExample="false">
<!– 忽略列,不生成bean 字段 –>
<!– <ignoreColumn column="FRED" /> –>
<!– 指定列的java数据类型 –>
<!– <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> –>
</table>-->
</context>
</generatorConfiguration>
5.修改自动创建的实体类信息
这个类中的类名要在你的数据库中存在(不存在的话,springboot会逆向生成表),这里的id,name是表中的名称,要注意变量的类型与数据库名称类型一致;
另外,这里使用的@Entity 是声明映射Person这个实体类,@Id标注用于声明一个实体类的属性映射为数据库的主键列。,@GeneratedValue用于标注主键的生成策略 这里了解一下
@ToString
@Entity
@Table(name = "t_books")
public class Book {
@Id
@GeneratedValue
@Column(name = "bid")
private Integer bid;
@Column(name = "bname")
private String bname;
@Column(name = "bpinyin")
private String bpinyin;
@Column(name = "typeid")
private Integer typeid;
@Column(name = "author")
private String author;
@Column(name = "price")
private Float price;
@Column(name = "docid")
private Integer docid;
@Column(name = "press")
private String press;
@Column(name = "breif")
private String breif;
@Column(name = "state")
private Integer state;
@Column(name = "tdate")
private Date tdate;
@Column(name = "sales")
private Integer sales;
6 添加xxxJPA接口,例如BookJPA.java
package com.study.jpa.service;
import com.study.jpa.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookRepository extends JpaRepository<Book,Integer> {
}
测试之前需要配置application.yml(你的有能是application.properties,改一下后缀名即可,我比较喜欢.yml文件的简洁)
server:
port: 8088
servlet:
context-path: /jpa
spring:
datasource:
#1.JDBC
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/0606?useUnicode=true&characterEncoding=utf8
username: root
password: 123
druid:
#2.连接池配置
#初始化连接池的连接数量 大小,最小,最大
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
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filter:
stat:
merge-sql: true
slow-sql-millis: 5000
#3.基础监控配置
web-stat-filter:
enabled: true
url-pattern: /*
#设置不统计哪些URL
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
#deny: 192.168.1.100
redis:
database: 0
host: 192.168.68.128
port: 6379
password: 123
jedis:
pool:
max-active: 100
max-idle: 3
max-wait: -1
min-idle: 0
timeout: 1000
mybatis:
#配置SQL映射文件路径
mapper-locations: classpath*:mapper/*.xml
#配置别名
type-aliases-package: com.zking.jpa.model
#pagehelper分页插件配置
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
7.编写controller层
package com.study.jpa.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.study.jpa.model.Book;
import com.study.jpa.service.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class BookController {
@Autowired
private BookRepository bookRepository;
// 查看全部
@RequestMapping(value = "/hello",method = RequestMethod.GET)
public void sau(HttpServletResponse response) throws IOException{
List<Book> list=bookRepository.findAll();
Map<Integer,Object> map=new HashMap<>();
for (Book book : list) {
System.out.println(book);
map.put(book.getBid(),book.getBname());
ObjectMapper json=new ObjectMapper();
String ss = json.writeValueAsString(map);
PrintWriter out = response.getWriter();
out.print(ss);
out.flush();
out.close();
}
}
//添加一个
@PostMapping(value = "/hello")
public Person addPerson(@RequestParam("Bid") Integer id,@RequestParam("Bname") String name){
Book b = new Book();
b.setBid(id);
b.setBname(name);
return bookRepository.save(b);
}
@GetMapping(value = "/hello/add")
public Person addPerson1(@RequestParam("id") Integer id,@RequestParam("name") Integer name){
Book b = new Book();
b.setId(id);
b.setName(name);
return bookRepository.save(b);
}
//修改一个
@PutMapping(value = "/hello/{id}")
public Person updatePerson(@PathVariable("id") Integer id,@RequestParam("name") Integer name){
Book b = new Book();
b.setId(id);
b.setName(name);
return bookRepository.save(b);
}
@GetMapping(value = "/hello/upd")
public Person updPerson(@RequestParam("id") Integer id,@RequestParam("name") int name){//@PathVariable("id") Integer id){
Book b = findOne(id);
b.setName(name);
return bookRepository.save(b);
}
//查找一个
@GetMapping(value = "/hello/{id}")
public Person findOne(@PathVariable("Bid") Integer id){
return bookRepository.findById(id).orElse(null);
}
//删除
@GetMapping(value = "/hello/del/{id}")
public void deletePerson(@PathVariable("id") Integer id){
Book b = findOne(id);
bookRepository.delete(b);
}
}