一,创建spring项目
方法1:
通过IDEA:File ——New Project——Spring Initializr
勾选这些就OK啦,以后要添加的时候再加。
方法2:
通过官网创建:https://start.spring.io/
创建好在IDEA打开就好啦!
二,准备工作
1.在pom.xml里面添加缺少的依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.56</version>
</dependency>
2.在application.properties添加属性配置
server.port=8080
#连接本地数据库
spring.datasource.name=******
spring.datasource.url=jdbc:mysql://localhost:3306/******
spring.datasource.username=***
spring.datasource.password=***
##############################druid连接池的配置信息########################
#使用druid数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#初始化连接大小
spring.datasource.druid.initial-size=5
#最小连接池数量
spring.datasource.druid.min-idle=5
#最大连接池数量
spring.datasource.druid.max-active=800
#获取连接时最大等待时间,单位毫秒
spring.datasource.druid.max-wait=60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#测试连接
spring.datasource.druid.validation-query=SELECT 1
#申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
spring.datasource.druid.test-while-idle=true
#获取连接时执行检测,建议关闭,影响性能
spring.datasource.druid.test-on-borrow=false
#归还连接时执行检测,建议关闭,影响性能
spring.datasource.druid.test-on-return=false
#是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
spring.datasource.druid.pool-prepared-statements=false
#开启poolPreparedStatements后生效
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
#配置扩展插件,常用的插件有=>stat:监控统计 ?log4j:日志 ?wall:防御sql注入
#spring.datasource.druid.filters=stat,wall,log4j
#通过connectProperties属性来打开mergeSql功能;慢SQL记录
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
########################mybatis设置#####################################################
#注意:一定要对应mapper映射xml文件的所在路径
#mybatis.mapper-locations=classpath:/mapping/*.xml
# 注意:对应实体类的路径
mybatis.type-aliases-package=com.example.demo1.entity
mybatis.configuration.map-underscore-to-camel-case=true
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
三,开始写代码啦
开始写之前的流程图:
1.实体类:
@Data
@Builder
public class RoundTable {
private int id;
private String name;
private String banner;
private String tinyBanner;
private String urlToken;
private long visitsCount;
private long includeCount;
}
注意:有@Data和@Builder注解就不用写get和set方法啦!
2.mapper接口:
public interface RoundTableMapper {
@Select("Select id,name,banner,tiny_banner,url_token," +
"visits_count,include_count From t_round_table")
@Results({
@Result(id = true,property = "id",column = "id",javaType = Integer.class),
@Result(property = "name",column = "name",javaType = String.class),
@Result(property = "banner",column = "banner",javaType = String.class),
@Result(property = "tinyBanner",column = "tiny_banner",javaType = String.class),
@Result(property = "urlToken",column = "url_token",javaType = String.class),
@Result(property = "visitsCount",column = "visits_count",javaType = Long.class),
@Result(property = "includeCount",column = "include_count",javaType = Long.class)
})
List<RoundTable> getAllTables();
@Select("Select id,name,banner,tiny_banner,url_token," +
"visits_count,include_count From t_round_table Order by visits_count DESC limit 0,4")
@Results({
@Result(id = true,property = "id",column = "id",javaType = Integer.class),
@Result(property = "name",column = "name",javaType = String.class),
@Result(property = "banner",column = "banner",javaType = String.class),
@Result(property = "tinyBanner",column = "tiny_banner",javaType = String.class),
@Result(property = "urlToken",column = "url_token",javaType = String.class),
@Result(property = "visitsCount",column = "visits_count",javaType = Long.class),
@Result(property = "includeCount",column = "include_count",javaType = Long.class)
})
List<RoundTable> getFourTables();
}
注意:
- property写实体类中属性的名字,column写sql查询的字段名,javaType/jdbcType写sql查询出的结果是什么类型的,或者Java是什么类型的。
- limit 0,4,这就表示取前4条数据。
3.service接口:
public interface RoundTableService {
List<RoundTable> getAllTables();
List<RoundTable> getFourTables();
}
4.service实现类:
@Service
public class RoundTableServiceImpl implements RoundTableService {
@Resource
private RoundTableMapper roundTableMapper;
@Override
public List<RoundTable> getAllTables() {
return roundTableMapper.getAllTables();
}
@Override
public List<RoundTable> getFourTables() {
return roundTableMapper.getFourTables();
}
}
5.controller类:
@RestController
public class RoundTableActivity {
@Resource
private RoundTableService roundTableService;
@GetMapping("/api/zhihu/round-tables")
public ResponseEntity getRoundTable() {
List<RoundTable> result = roundTableService.getAllTables();
return ResponseEntity.ok(result);
}
@GetMapping("/api/zhihu/round-tables-four")
public ResponseEntity getFourTable(){
List<RoundTable> results = roundTableService.getFourTables();
return ResponseEntity.ok(results);
}
}
注意:Controller套路
0、自己起一个方法名:getRoundTable()
1、这个方法需要哪些参数:无
2、我希望客户端通过什么url请求到这个方法:/api/zhihu/round-table
3、我希望客户端用怎样的方式请求:GET
4、我希望返回什么样的结构:List
5、我需要调用的服务:RoundTableService
四,测试
通过postman来测试接口:
成功啦!好开心!再见。。。