此系列是学习 Spring Boot 2.x整合微信支付在线教育网站高级项目实战(https://www.bilibili.com/video/av58679382/?p=1)的视频笔记及个人理解+代码。
GitHub地址:https://github.com/wannengdek/WeChatVideo
如果你觉得我的代码或者博客对你有所帮忙,麻烦帮忙点一棵小星星。
1、建立工程
导入 web、mysql、thymeleaf、mybatis等jar包
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</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>1.3.2</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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<!-- 引入starter-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!-- MySQL的JDBC驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 引入第三方数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 分页插件依赖 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.0</version>
</dependency>
<!-- JWT相关 -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
中加入以下配置:
#=================================微信相关================== #公众号 wxpay.appid=wx5beac15ca207cdd40c wxpay.appsecret=554801238f17fdsdsdd6f96b382fe548215e9 #spring.datasource.driver-class-name =com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/weixin?useUnicode=true&characterEncoding=utf-8 spring.datasource.username =root spring.datasource.password =root #如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource) spring.datasource.type =com.alibaba.druid.pool.DruidDataSource #增加打印sql语句,一般用于本地开发测试 mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl # mybatis 下划线转驼峰配置,两者都可以 #mybatis.configuration.mapUnderscoreToCamelCase=true mybatis.configuration.map-underscore-to-camel-case=true
可能会有依赖报错,暂时不管,一会导入。
2、建立包结构如下图、连接数据库
导入相关sql ,地址:https://github.com/wannengdek/WeChatVideo/tree/master/src/main/resources
直接打开复制里面的sql语句,运行即可。
idea支持连接数据库后自动生成实体类以及相应的get、set方法。
点击test Connection 如果显示绿色对号就是连接成功,点击ok
连接成功之后可以看到刚才生成的表,全部选中右键
箭头指向的地方改成自己的项目中实体类存放的包。
选中刚才的所有表,右键
点击之后就可以在对应得包生成实体类。
使每个实体类都实现 Serializable接口,进行序列化 以便实现缓存。
3、添加增删改查方法、使用postman进行测试
在mapper中添加相应的mapper类
@Mapper
public interface VideoMapper {
@Select("select * from video")
List<Video> findAll();
@Select("SELECT * FROM video WHERE id = #{id}")
Video findById(int id);
@Update("UPDATE video SET title=#{title} WHERE id =#{id}")
int update(Video Video);
@Delete("DELETE FROM video WHERE id =#{id}")
int delete(int id);
@Insert("INSERT INTO `video` ( `title`, `summary`, " +
"`cover_img`, `view_num`, `price`, `create_time`," +
" `online`, `point`)" +
"VALUES" +
"(#{title}, #{summary}, #{coverImg}, #{viewNum}, #{price},#{createTime}" +
",#{online},#{point});")
@Options(useGeneratedKeys=true, keyProperty="id", keyColumn="id")
// 技巧:保存对象,获取数据库自增id
int save(Video video);
在service包中添加接口类,在serviceImpl中添加相应实现类
@Service
public class VideoServiceImpl implements VideoService {
@Autowired
private VideoMapper videoMapper;
@Override
public List<Video> findAll() {
return videoMapper.findAll();
}
@Override
public Video findById(int id) {
return videoMapper.findById(id);
}
@Override
public int update(Video video) {
return videoMapper.update(video);
}
@Override
public int delete(int id) {
return videoMapper.delete(id);
}
@Override
public int save(Video video) {
int row=videoMapper.save(video);
System.out.println(row);
return videoMapper.save(video);
}
}
controller包中添加相应的地址映射
对于视频的管理,普通用户只能查看和查找,管理员则可以增加、删除、更新、查看。所以新建2个controller
@RequestMapping("/avi/v1/video")
public class VideoController {
@Autowired
private VideoService videoService;
/**provider
* 分页接口
* @param page 当前第几页,默认是第一页
* @param size 每页显示几条
* @return
*/
@GetMapping("page")
public Object pageVideo(@RequestParam(value = "page",defaultValue = "1")int page,
@RequestParam(value = "size",defaultValue = "5")int size){
PageHelper.startPage(page,size);
List<Video> list = videoService.findAll();
PageInfo<Video> pageInfo = new PageInfo<>(list);
Map<String,Object> data = new HashMap<>();
data.put("total_size",pageInfo.getTotal());//总条数
data.put("total_page",pageInfo.getPages());//总页数
data.put("current_page",page);//当前页
data.put("data",pageInfo.getList());//数据
return data;
}
/**
* 根据Id找视频
* @param videoId
* @return
*/
@GetMapping("find_by_id")
public Object findById(@RequestParam(value = "video_id",required = true)int videoId){
return videoService.findById(videoId);
}
}
第一个方法为使用pageHelper的分页查找方法,关于pageHepler自荐我的博客SpringBoo集成PageHelper+thymeleaf 显示到页面
管理员controller
@RestController
@RequestMapping("/admin/api/v1/video")
public class VideoAdminController {
@Autowired
private VideoService videoService;
/**
* 根据id删除视频
* @param videoId
* @return
*/
@DeleteMapping("del_by_id")
public Object delById(@RequestParam(value = "video_id",required = true)int videoId){
return videoService.delete(videoId);
}
/**
* 根据id更新视频
* @param videoId
* @param title
* @return
*/
@PutMapping("update_by_id")
public Object update(@RequestBody Video video){
return videoService.update(video);
}
/**
* 保存视频对象
* @param video
* @return
*/
@PostMapping("save")
public Object save(@RequestBody Video video){
return videoService.save(video);
}
}
使用postman测试
查询分页数据
查询id=1的视频
删除id=10的视频
如有不正之处,还请指出,谢谢Thanks♪(・ω・)ノ