springBoot启动程序
package cn.ps;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
//集成了Controller和ResponseBody
@RestController
@SpringBootApplication
public class SpringBootStart {
//SpringBoot集成mybatisPlus无分页,需加此函数
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
return paginationInterceptor;
}
//运行测试
@GetMapping("/")
public String test(){
return "好人一生平安";
}
//注:运行项目只需启动springBoot,只扫描该类所在包及子类,无xml文件,配置文件只有一个application.properties
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootStart.class, args);
}
}
Controller层
package cn.ps.contro;
import java.sql.SQLException;
import javax.validation.Valid;
import cn.ps.bean.Result;
import cn.ps.bean.UserBean;
import cn.ps.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;
@RestController
@SpringBootApplication
public class UserContoller {
@Autowired
UserService us;
//返回自定义Result类,返回json字符串,初始化及条件查询函数
@GetMapping(value="userServlet")
public Result userList(UserBean userBean, String page, String limit) throws SQLException {
return us.queryUser(userBean,page,limit);
}
//springboot继承了get|post|put|delete+Mapping四个方法注解
@PostMapping(value="addUser")
public Result addUser(UserBean userBean) {
Result r=new Result();
try {
us.addUser(userBean);
}catch (Exception e){
r.setCode(1);
r.setMsg("新增出错"+e.getMessage());
}
return r;
}
//Rest风格路径参数获取用@PathVariable,若名字不同,则需定义名字@PathVariable("key")
@DeleteMapping(value="delUser/{userId}")
public Result delUser(@PathVariable String userId){
Result r=new Result();
try {
us.delUser(userId);
}catch (Exception e){
r.setCode(1);
r.setMsg("删除出错"+e.getMessage());
}
return r;
}
@PutMapping(value="updateUser/{userId}")
public Result updateUser(@PathVariable String userId,@Valid UserBean userBean, Errors er, Model mod){
Result r=new Result();
try {
us.updateUser(userBean,userId);
}catch (Exception e){
r.setCode(1);
r.setMsg("修改出错"+e.getMessage());
}
return r;
}
}
Service层
package cn.ps.service.ServImpl;
import cn.ps.bean.Result;
import cn.ps.bean.UserBean;
import cn.ps.mapper.UserMapper;
import cn.ps.service.UserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.SQLException;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapp;
@Override
public Result queryUser(UserBean userBean, String curPage, String pageOfNum) throws SQLException {
int curPageIn=StringUtils.isNotEmpty(curPage)&& !"0".equals(curPage) ? Integer.parseInt(curPage) : 1;
int pageOfNumIn= StringUtils.isNotEmpty(pageOfNum) ? Integer.parseInt(pageOfNum) : 10;
//查询方法使用该对象
QueryWrapper<UserBean> qw=new QueryWrapper<>();
//QueryWrapper类中封装的方法like,eq,and,gt... ,
// isNotEmpty方法返回false则该sql忽略本条件查询
qw.like(StringUtils.isNotEmpty(userBean.getUserName()),"userName", userBean.getUserName());
qw.eq(StringUtils.isNotEmpty(userBean.getUserAge()),"userAge",userBean.getUserAge());
//从IPage中获取结果集参数
IPage<UserBean> ipage=userMapp.selectPage(new Page<>(curPageIn,pageOfNumIn),qw);
Result r=new Result();
r.setCode(0);
r.setCount((int)ipage.getTotal());
r.setData(ipage.getRecords());
return r;
}
//增删改都是Mapper继承的父类BaseMapper中的方法,可带条件
@Override
public void addUser(UserBean userBean) {
userMapp.insert(userBean);
}
@Override
public void delUser(String userId) {
userMapp.deleteById(userId);
}
//属性类已定义主键userId,自动设为修改条件
@Override
public void updateUser(UserBean userBean,String userId) {
userMapp.updateById(userBean);
}
}
mapper 接口
package cn.ps.mapper;
import cn.ps.bean.UserBean;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
//mybatisPlus 单表sql全部省略
@Mapper
public interface UserMapper extends BaseMapper<UserBean> {
}
Result查询结果容器
package cn.ps.bean;
import java.util.List;
public class Result {
//标记是否有错误,异常信息
private int code;
//返回错误信息内容
private String msg;
//数据总条数
private int count;
//查询的数据容器
private List data;
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public List getData() {
return data;
}
public void setData(List data) {
this.data = data;
}
}
属性类
package cn.ps.bean;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import org.hibernate.validator.constraints.Range;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
//标记要查询到表名,类名与表面同名可省略
@TableName("users")
public class UserBean {
//标记userId为主键
@TableId(type=IdType.AUTO,value="userId")
private String userId;
//有驼峰名字都需要加 TableField 注解,否则找不到字段
@TableField("userAge")
@Range(min=0,max=150,message = "年龄不合法")
private String userAge;
@Pattern(regexp="男|女",message = "性别类型错误")
private String sex;
@NotBlank(message = "用户名不能为空")
@TableField("userName")
private String userName;
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserAge() {
return userAge;
}
public void setUserAge(String userAge) {
this.userAge = userAge;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "UserBean [userId=" + userId + ", userAge=" + userAge + ", sex=" + sex + ", userName=" + userName + "]";
}
}
页面信息
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>userList</title>
<link rel="stylesheet" href="layui/css/layui.css" />
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript" src="layui/layui.js"></script>
<script type="text/javascript">
layui.use('form', function() {
var form=layui.form;
form.on('submit(myForm)', function (data) {
data.field.page=1;
layui.table.reload("userTable",{
url:"userServlet",
where:data.field
})
return false;
});
form.on('submit(addForm)', function (data) {
$.ajax({
url:"addUser",
dataType:"json",
data:data.field,
type:'post',
success:function (da) {
if (da.code==0){
alert("新增成功");
layer.close(addWindow);
layui.table.reload("userTable",{
url:"userServlet"
})
} else{
alert(da.msg);
}
}
})
return false;
});
form.on('submit(updaForm)', function (data) {
data.field["_method"]="put";
$.ajax({
url:"updateUser/"+data.field.userId,
dataType:"json",
data:data.field,
type:'post',
success:function (da) {
if (da.code==0){
alert("修改成功");
layer.close(addWindow);
layui.table.reload("userTable",{
url:"userServlet"
})
} else{
alert(da.msg);
}
}
})
return false;
});
});
layui.use('table', function() {
var table = layui.table;
table.render({
elem: '#userTable'
, height: 465
, width:'100%'
, url: 'userServlet' //数据接口
, page: true //开启分页
, cols: [[ //表头
{field: 'userId', title: '编号', width: 200, sort: true, fixed: 'left'}
, {field: 'userName', title: '姓名', width: 200}
, {field: 'sex', title: '性别', width: 200, sort: true}
, {field: 'userAge', title: '年龄', width: 200}
, {field: 'aa', title: '操作', width: 200 ,sort:true, templet:function (d) {
return "<input type='button' onclick='toDelete("+d.userId+")' class='inline-block layui-btn' value='删除'>" +
"<input type='button' onclick='toUpdate()' datas='"+JSON.stringify(d)+"' class='inline-block layui-btn' value='修改'>";
}}
]]
});
});
var addWindow=null;
function toAdd(){
layui.use('layer', function(){
addWindow=layer.open({
type: 1,
area:['400px','350px'],
content:$("#addForm")
});
});
}
function toUpdate(){
var obj=JSON.parse(event.srcElement.getAttribute("datas"));
layui.use('layer', function(){
addWindow=layer.open({
type: 1,
area:['400px','350px'],
content:$("#updaForm")
});
});
layui.form.val('updaForm', obj);
}
function toDelete(userId) {
$.ajax({
url:"delUser/"+userId,
dataType:"json",
data:{"_method":"delete"},
type:'post',
success:function (da) {
if (da.code==0){
alert("删除成功");
layui.table.reload("userTable",{
url:"userServlet"
})
} else{
alert(da.msg);
}
}
})
}
</script>
<style type="text/css" >
.widthe{
width:300px;
}
.margin-top{
margin:20px 0 0 0;
}
.inline-block{
display: inline-block;
line-height: 30px;
}
.alert-input-style{
margin: 15px 5px;
width: 220px;
}
</style>
</head>
<body>
<form class="layui-form" action="userServlet" id="myForm">
<div class="layui-form-item margin-top">
<label class="layui-form-label">查询姓名</label>
<div class="layui-input-block">
<input type="text" name="userName" placeholder="请输入" autocomplete="off" class="inline-block layui-input widthe ">
<button class="layui-btn inline-block" lay-submit lay-filter="myForm">查询</button>
<a href="javascript:toAdd()" class="layui-btn">新增</a>
</div>
</div>
</form>
<table id="userTable" lay-filter="test"></table>
</body>
</html>
<form id="addForm" class="layui-form" style="display: none" >
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" name="userName" autocomplete="off" class="layui-input alert-input-style">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">年龄</label>
<div class="layui-input-block">
<input type="text" name="userAge" lay-verify="number" autocomplete="off" class="layui-input alert-input-style">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">性别</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="0" title="男" checked>
<input type="radio" name="sex" value="1" title="女" checked>
</div>
</div>
<div class="layui-btn-group" >
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="addForm">保存</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
<form id="updaForm" lay-filter="updaForm" class="layui-form" style="display: none">
<div class="layui-form-item">
<label class="layui-form-label">编号</label>
<div class="layui-input-block">
<input type="text" name="userId" autocomplete="off" class="layui-input alert-input-style" id="userId" readonly>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">姓名</label>
<div class="layui-input-block">
<input type="text" name="userName" autocomplete="off" id="userName" class="layui-input alert-input-style">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">年龄</label>
<div class="layui-input-block">
<input type="text" name="userAge" lay-verify="number" id="userAge" autocomplete="off" class="layui-input alert-input-style">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">性别</label>
<div class="layui-input-block">
<input type="radio" name="sex" value="男" title="男" >
<input type="radio" name="sex" value="女" title="女" >
</div>
</div>
<div class="layui-btn-group" >
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="updaForm">保存</button>
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
</div>
</div>
</form>
spring.io spring官网
github.com 开源代码文库
runoob.com w3c教程
localhost:8080/druid/index.html springboot监控页面
http://druid.com druid官网
http://mp.baomidou.com mybatisplus官网