基于:【狂神说Java】SpringBoot最新教程IDEA版通俗易懂
1 导入依赖
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
<version>2.4.0</version>
</dependency>
<!-- mybatis-spring-boot-starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!-- druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.3</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
比较重要的就是上面四个:MySQL
、druid
、jdbc
、mybatis
;
2 配置yml
# 数据库基本配置
spring:
datasource:
username: root
password: "123456"
url: jdbc:mysql://127.0.0.1:3306/datasets?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 数据源其他配置
initialSize: 5
minIdle: 5
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall
maxPoolPreparedStatementPerConnectionSize: 20
useGlobalDataSourceStat: true
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
# mybatis配置
mybatis:
type-aliases-package: xyz.deepmez.pojo # 别名
mapper-locations: classpath:mybatis/mapper/*.xml # mapper文件注册
这里面的配置包括数据源的配置、Druid的相关配置、mybatis相关配置;
3 编写pojo实体类
public class Iris {
private int dataIndex;
private double sepalLength;
private double sepalWidth;
private double petalLength;
private double petalWidth;
private String label;
}
还包括相关的getter、setter、有参无参构造方法。
4 在Mapper包下编写接口
@Mapper
public interface IrisMapper {
List<Iris> getAllIris();
Iris getIrisById(int id);
}
注解@Mapper
的作用是自动生成一个实现类,也就是之前SQLSession那一套,然后生成一个bean交给spring管理,可以交给Service注入;
5 编写mapper.xml写sql语句
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace和接口匹配-->
<mapper namespace="xyz.deepmez.mapper.IrisMapper">
<select id="getAllIris" resultType="Iris">
SELECT * FROM iris
</select>
<select id="getIrisById" resultType="Iris" parameterType="int">
SELECT * FROM iris where dataIndex=#{id}
</select>
</mapper>
注意:这个xml文件最好写在:classpath:mybatis/mapper/
,然后在配置文件中配置:mapper-locations: classpath:mybatis/mapper/*.xml
,我个人还是比较推崇不使用注解来写sql的风格,因为有时候需要有动态sql、一对多、多对一的情况,最好还是单独编写业务;
6 Controller层
本来应该是Service层去调用,这里方便演示,直接交给Controller
@RestController
public class HelloController {
//自动注入,IrisMapper的getMapper
@Autowired
IrisMapper irisMapper;
@RequestMapping("/data")
@ResponseBody
public List<Iris> hello() {
List<Iris> list = irisMapper.getAllIris();
System.out.println(list);
return list;
}
}
@RestController
:SpringMVC注解,直接返回值,不用交给视图解析器,并且注册为bean交给Spring管理;@Autowired
:把@Mapper
的实现类自动注入到这里,可以直接使用实现接口的方法;@RequestMapping("/data")
:访问的路由;@ResponseBody
:和@RestController
功能一样,直接返回数据,只是作用在方法上面;
7 测试
运行访问:http://localhost:8080/data
前端看到数据。