(四)完成友链管理与代码生成器
实体及数据库表介绍
友情链接
- 类名:Friendly
- 表名:blog_friendly
名称 | 类型 | 备注 |
---|---|---|
id | 整数 | 主键 |
title | 字符串 | 友情链接的标题 |
link | 字符串 | 友情链接的地址 |
package cn.kevinlu98.pojo;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.ToString;
import org.hibernate.Hibernate;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Objects;
/**
* Author: Mr丶冷文
* Date: 2022/10/7 15:45
* Email: kevinlu98@qq.com
* Description:
*/
@Getter
@Setter
@ToString
@RequiredArgsConstructor
@Entity
@Table(name = "blog_friendly")
public class Friendly {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String link;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Friendly friendly = (Friendly) o;
return id != null && Objects.equals(id, friendly.id);
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
代码生成器
介绍
我们可以看到不管是分类管理还是这节课的友链管理这些,都是对数据库的基本增删查改操作,所以为了避免我们重复造轮子,我就开发了一个简单的代码生成器,其实原理很简单,就是用正则替换掉提前预设的一些字符
##{name-zh}##
:中文名##{name-en}##
:英文名##{name-en-up}##
:首字母大写的英文名##{id}##
:主键遍历属性:
##{each}## ##{zname}##:属性中文名 ##{ename}##:属性英文名 ##{endeach}##
构建Mapper模版
package cn.kevinlu98.mapper;
import cn.kevinlu98.pojo.##{name-en-up}##;
import org.springframework.data.jpa.repository.JpaRepository;
/**
* Author: Mr丶冷文
* Date: 2022/10/6 22:04
* Email: kevinlu98@qq.com
* Description:
*/
public interface ##{name-en-up}##Mapper extends JpaRepository<##{name-en-up}##, Integer> {
}
构建Service模版
package cn.kevinlu98.service;
import cn.kevinlu98.mapper.##{name-en-up}##Mapper;
import cn.kevinlu98.pojo.##{name-en-up}##;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* Author: Mr丶冷文
* Date: 2022/10/6 22:20
* Email: kevinlu98@qq.com
* Description:
*/
@Service
public class ##{name-en-up}##Service {
private final ##{name-en-up}##Mapper mapper;
public ##{name-en-up}##Service(##{name-en-up}##Mapper mapper) {
this.mapper = mapper;
}
/**
* 查询所有的##{name-zh}##
*
* @return ##{name-zh}##列表
*/
public List<##{name-en-up}##> list() {
return mapper.findAll();
}
/**
* 查询##{name-zh}##总数
*
* @return ##{name-zh}##总数
*/
public long count() {
return mapper.count();
}
/**
* id查询资源详情
*
* @param id 主键
* @return ##{name-zh}##详情
*/
public ##{name-en-up}## detail(Integer id) {
return mapper.findById(id).orElse(null);
}
/**
* 保存操作
*
* @param ##{name-en}## 要保存的对象
*/
public void save(##{name-en-up}## ##{name-en}##) {
mapper.save(##{name-en}##);
}
/**
* 根据id从数据库表中删除数据
*
* @param id 主键
*/
public void delete(Integer id) {
mapper.deleteById(id);
}
}
构建Controller模版
package cn.kevinlu98.controller;
import cn.kevinlu98.common.Result;
import cn.kevinlu98.enums.ResultEnum;
import cn.kevinlu98.pojo.##{name-en-up}##;
import cn.kevinlu98.service.##{name-en-up}##Service;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.sql.SQLIntegrityConstraintViolationException;
import java.util.List;
import java.util.Objects;
/**
* Author: Mr丶冷文
* Date: 2022/10/6 22:32
* Email: kevinlu98@qq.com
* Description:
*/
@Slf4j
@RestController
@RequestMapping("/admin/##{name-en}##")
public class ##{name-en-up}##Controller {
private final ##{name-en-up}##Service service;
public ##{name-en-up}##Controller(##{name-en-up}##Service service) {
this.service = service;
}
@GetMapping("/")
public Result<List<##{name-en-up}##>> list() {
return Result.success(service.list());
}
@GetMapping("/{id}")
public Result<##{name-en-up}##> detail(@PathVariable Integer id) {
##{name-en-up}## ##{name-en}## = service.detail(id);
if (Objects.isNull(##{name-en}##)) {
return Result.error(ResultEnum.RESULT_DATA_NOT_FIND);
} else {
return Result.success(##{name-en}##);
}
}
@PostMapping("/")
public Result<String> save(##{name-en-up}## ##{name-en}##) {
service.save(##{name-en}##);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<String> delete(@PathVariable Integer id) {
service.delete(id);
return Result.success();
}
}
构建页面模版
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="en">
<head th:replace="admin/common::header(~{::title},~{},~{})">
<title>##{name-zh}##管理</title>
</head>
<body>
<th:block th:include="admin/common::nav('##{name-en}##')"></th:block>
<div class="container lw-main lw-banner">
<div class="btn-group" role="group" style="margin-bottom: 20px;" aria-label="...">
<button type="button" id="lw-add-btn" class="btn btn-default"><i class="fa fa-plus"></i> 新增</button>
</div>
<table id="data-table"></table>
</div>
<div class="modal fade" id="save-window" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form id="data-form">
<input type="hidden" name="##{id}##">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
aria-hidden="true">×</span></button>
<h4 class="modal-title" id="window-title">Modal title</h4>
</div>
<div class="modal-body">
##{each}##
<div class="form-group">
<label>##{zname}##</label>
<input type="text" name="##{ename}##" required class="form-control" placeholder="请输入##{zname}##...">
</div>
##{endeach}##
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
<button type="submit" class="btn btn-primary">保存</button>
</div>
</form>
</div>
</div>
</div>
<th:block th:include="admin/common::footer"></th:block>
<script>
$(function () {
// $('#save-window').modal('show')
$('#data-table').bootstrapTable({
url: '/admin/##{name-en}##/',
responseHandler: function (res) {
return res.data
},
columns: [
{
title: '序号',
width: 50,
align: 'center',
formatter: function (value, row, index) {
return index + 1
}
},
##{each}##
{
title: '##{zname}##',
field: '##{ename}##'
},
##{endeach}##
{
field: '##{id}##',
title: '操作',
width: 200,
formatter: function (value) {
return `<button type="button" data-id="${value}" class="btn btn-info btn-sm lw-update-btn"><i class="fa fa-edit"></i> 编辑</button> <button type="button" data-id="${value}" class="btn btn-danger btn-sm lw-del-btn"><i class="fa fa-trash"></i> 删除</button>`
}
},
]
})
$("#data-form").on('submit', function () {
let data = $(this).serialize();
$.ajax({
url: '/admin/##{name-en}##/',
method: 'post',
data: data,
dataType: 'json',
success: res => {
if (res.code === 200) {
layer.msg("保存成功", {icon: 1, time: 500}, function () {
$('#save-window').modal('hide')
$('#data-table').bootstrapTable('refresh', {silent: true})
})
} else {
layer.msg(res.message, {icon: 2})
}
}
})
return false;
})
$("#lw-add-btn").on('click', function () {
$("#window-title").text('新增##{name-zh}##')
$("#data-form").initForm({##{id}##: "", ##{each}## ##{ename}##: "", ##{endeach}##})
$('#save-window').modal('show')
})
$("#data-table").on('click', '.lw-update-btn', function () {
// 获取目标资源id
let id = $(this).data('id')
$.ajax({
url: '/admin/##{name-en}##/' + id,
method: 'get',
dataType: 'json',
success: res => {
if (res.code === 200) {
$("#window-title").text('编辑##{name-zh}##')
$("#data-form").initForm(res.data)
$('#save-window').modal('show')
} else {
layer.msg(res.message, {icon: 2})
}
}
})
}).on('click', '.lw-del-btn', function () {
let id = $(this).data('id')
let idx = layer.confirm('是否要删除该数据?', {
btn: ['确认', '取消'] //按钮
}, function () {
$.ajax({
url: '/admin/##{name-en}##/' + id,
method: 'delete',
dataType: 'json',
success: res => {
if (res.code === 200) {
layer.msg("删除成功", {icon: 1})
$('#data-table').bootstrapTable('refresh', {silent: true})
} else {
layer.msg(res.message, {icon: 2})
}
}
})
layer.close(idx);
})
})
})
</script>
</body>
</html>
完成友链管理的开发
- 用代码生成器及刚刚构建的模版生成友链管理及轮播图管理
- 将生成的代码考到项目中
jzl 游客 2022-10-13 09:29 回复
好