☰
springboot创建web项目
2026/9/25 15:58:14 网站建设 项目流程

一、创建项目

二、导入依赖(pom.xml)

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.12.RELEASE</version> </parent> <groupId>com.cy</groupId> <artifactId>Springboot-day01-re</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!--②、引入依赖(起步依赖)--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--mybatis提供依赖--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.49</version> </dependency> <!--连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.16</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> </project>

三、配置文件

application.yml文件

server: port: 8080 servlet: context-path: /suv #Spring配置 spring: #资源配置 datasource: #数据源类型 type: com.alibaba.druid.pool.DruidDataSource #地址 url: jdbc:mysql://localhost:3306/rbac #用户名 username: root #密码 password: chenying #驱动名称 driver-class-name: com.mysql.jdbc.Driver #持久层框架配置 mybatis: #别名配置 type-aliases-package: com.cy.pojo.entity #映射文件 mapper-locations: classpath*:mappers/**/*mapper.xml # 配置日志 logging: level: root: info com.cy: debug

四、XxxApplication内容

@SpringBootApplication public class XxxApplication { public static void main(String[] args) { SpringApplication.run(XxxApplication.class,args); } }

五、使用注解或config配置文件解决注解问题

package com.cy.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); config.addAllowedOrigin("*"); config.addAllowedMethod("*"); config.addAllowedHeader("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } }

六、完成后端的增删查改操作

controller(控制器层)

package com.cy.controller; import com.cy.pojo.dto.EmployeeDto; import com.cy.pojo.entity.Employee; import com.cy.pojo.vo.Result; import com.cy.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; @RestController @RequestMapping("list") //解决跨域问题 public class EmployeeController { @Autowired private EmployeeService employeeService; @GetMapping("/{pageNo}/{pageSize}") public Result queryPage(@PathVariable("pageNo") Integer pageNo, @PathVariable("pageSize") Integer pagesize, @RequestParam(required = false) String username ){ EmployeeDto employees= employeeService.PageByData(pageNo,pagesize,username); Result result = Result.builder() .code(20000) .message("查询成功") .data(employees) .build(); return result; } @PostMapping("/save") public Result save(@RequestBody Employee employee){ Integer add= employeeService.addByData(employee); if (add==null){ return Result.builder().code(50000).message("新增失败").build(); } return Result.builder().code(20000).message("新增成功").build(); } @RequestMapping("/listById") public Result getById(@RequestParam("id") Integer id){ Employee employee=employeeService.selectById(id); if (employee==null){ return Result.builder().code(50000).message("查询失败").build(); } return Result.builder() .code(20000) .message("查询成功") .data(employee) .build(); } @PutMapping("/update") public Result update(@RequestBody Employee employee){ Integer update=employeeService.updateByData(employee); if (update==null){ return Result.builder().code(50000).message("修改失败").build(); } return Result.builder().code(20000).message("修改成功").build(); } @DeleteMapping("/delete") public Result del(@RequestParam Integer id){ Integer del=employeeService.delById(id); if (del==null){ return Result.builder().code(50000).message("删除失败").build(); } return Result.builder().code(20000).message("删除成功").build(); } @RequestMapping("/batchDel") public Result batchDel(@RequestBody List<Integer> ids){ Integer dels= employeeService.batchDel(ids); if (dels==null){ return Result.builder().code(50000).message("批量删除失败").build(); } return Result.builder().code(20000).message("批量删除成功").build(); } }

service(业务逻辑层)

package com.cy.service; import com.cy.pojo.dto.EmployeeDto; import com.cy.pojo.entity.Employee; import java.util.List; public interface EmployeeService { EmployeeDto PageByData(Integer pageNo, Integer pagesize, String username); Integer addByData(Employee employee); Integer updateByData(Employee employee); Employee selectById(Integer id); Integer delById(Integer id); Integer batchDel(List<Integer> ids); }
package com.cy.service.impl; import com.cy.mapper.EmployeeMapper; import com.cy.pojo.dto.EmployeeDto; import com.cy.pojo.entity.Employee; import com.cy.service.EmployeeService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; @Service public class EmployeeServiceImpl implements EmployeeService { @Resource private EmployeeMapper employeeMapper; @Override public EmployeeDto PageByData(Integer pageNo, Integer pagesize,String username) { Integer total=employeeMapper.sum(); int ceil =(int) Math.ceil((total / (double) pagesize)); Integer c=ceil; Integer start; if (pageNo<c){ start=(pageNo-1)*pagesize; }else { start=(ceil-1)*pagesize; } List<Employee> employeeList=employeeMapper.getPage(start,pagesize,username); EmployeeDto dto = EmployeeDto.builder() .pageNo(pageNo) .pageSize(pagesize) .total(ceil) .dataList(employeeList) .build(); return dto; } @Override public Integer addByData(Employee employee) { Integer add=employeeMapper.add(employee); return add; } @Override public Integer updateByData(Employee employee) { Integer update=employeeMapper.updateByData(employee); return update; } @Override public Employee selectById(Integer id) { Employee employee=employeeMapper.getById(id); return employee; } @Override public Integer delById(Integer id) { Integer del=employeeMapper.del(id); return del; } @Override public Integer batchDel(List<Integer> ids) { return employeeMapper.batchDel(ids); } }

mapper(数据访问层)

package com.cy.mapper; import com.cy.pojo.entity.Employee; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface EmployeeMapper { List<Employee> getPage(@Param("start") Integer start, @Param("pageSize") Integer pagesize, @Param("username") String username); Integer sum(); Integer add(Employee employee); Integer updateByData(Employee employee); Employee getById(Integer id); Integer del(Integer id); Integer batchDel(List<Integer> ids); }

mappers

<?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"> <mapper namespace="com.cy.mapper.EmployeeMapper"> <insert id="add"> insert into employee(username,name,password,email,age,admin,dept_id) values(#{username},#{name},#{password},#{email},#{age},#{admin},#{deptId}) </insert> <update id="updateByData"> update employee <set> <if test="username!=null"> username=#{username}, </if> <if test="name!=null"> name=#{name}, </if> <if test="password!=null"> password=#{password}, </if> <if test="email!=null"> email=#{email}, </if> <if test="age!=null"> age=#{age}, </if> <if test="admin!=null"> admin=#{admin}, </if> <if test="deptId!=null"> dept_id=#{deptId}, </if> </set> where id=#{id} </update> <delete id="del"> delete from employee where id=#{id} </delete> <delete id="batchDel"> delete from employee where id <trim prefix="in (" suffix=")" suffixOverrides=","> <foreach collection="ids" item="item" separator=","> #{item} </foreach> </trim> </delete> <!--<mapper namespace="">--> <select id="getPage" resultType="com.cy.pojo.entity.Employee"> select * from employee <where> <if test="username!=null"> and username like concat("%",#{username},"%") </if> </where> <if test="start!=null and pageSize!=null"> limit #{start},#{pageSize} </if> </select> <select id="sum" resultType="java.lang.Integer"> select count(*) from employee </select> <select id="getById" resultType="com.cy.pojo.entity.Employee"> select * from employee where id=#{id} </select> </mapper>

还有一些简单的工具类

EmployeeDto

package com.cy.pojo.dto; import com.cy.pojo.entity.Employee; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; /** * @Author chen * @Version 1.0 * @Date 2024/12/24 * @Description 返回前端的数据 */ @Data @Builder @AllArgsConstructor @NoArgsConstructor public class EmployeeDto { /** *数据总数 */ private Integer total; /** *页面数 */ private Integer pageNo; /** *每页数据大小 */ private Integer pageSize; /** *数据集合 */ private List<Employee> dataList=new ArrayList<>(); }

实体类

package com.cy.pojo.entity; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.ArrayList; import java.util.List; @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Employee { /** *主键 */ private Integer id; /** *用户名 */ private String username; /** *名称 */ private String name; /** *密码 */ private String password; /** *邮箱 */ private String email; /** *年龄 */ private Integer age; /** *管理员 */ private Integer admin; /** *所属部门 */ private Integer deptId; //角色id集 //private List<Integer> roleIds = new ArrayList<>(); }

统一后端返回前端的格式

package com.cy.pojo.vo; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; /** * @Author chen * @Version 1.0 * @Date 2024/12/24 * @Description 统一返回类型 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class Result { /** *状态码 */ private Integer code; /** *提示信息 */ private String message; /** *返回数据 */ private Object data; }

前端HTML页面效果显示

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- Bootstrap --> <link rel="stylesheet" href="./css/bootstrap.css" > <script src="./js/vue.js"></script> <script src="./js/axios.min.js"></script> </head> <body> <div id="app"> <table class="table"> <form class="form-inline"> <label >产品名/概述</label> <input type="text" v-model="username" placeholder="请输入产品名/概述"> <button type="submit" @click="search">搜索</button> <button class="fat-btn" type="button" style="background-color: #269abc" @click="resBtn">重置 </button> </form> <div> <button class="fat-btn" type="button" style="background-color: #269abc" @click="asveBtn"> 新增 </button> <button class="fat-btn" type="button" style="background-color: tomato" @click="batchDel"> 批量删除 </button> </div> <thead> <tr> <th>选择</th> <th>用户名</th> <th>用户</th> <th>密码</th> <th>邮件</th> <th>年龄</th> <th>管理员</th> <th>操作</th> </tr> </thead> <tbody> <tr v-for="(value,key) in dataList" :key="key"> <td> <input type="checkbox" :value="value.id" v-model="ids"> </td> <td>{{value.username}}</td> <td>{{value.name}}</td> <td>{{value.password}}</td> <td>{{value.email}}</td> <td>{{value.age}}</td> <td>{{value.admin}}</td> <td> <button type="button" style="background-color: tomato" @click="delData(value.id)"> 删除 </button> <button class="fat-btn" type="button" style="background-color: darkcyan" @click="findData(value.id)"> 编辑 </button> </td> </tr> </tbody> </table> <!--分页--> <div style="padding-right: 20px"> <ul class="pagination" > <li><a href="#">&laquo;</a></li> <li v-for="page in totalPage" :key="page" > <a href="#" :class="{active:page==pageNo}" @click="change(page)">{{page}}</a></li> <li><a href="#">&raquo;</a></li> </ul> </div> <!--新增窗口--> <div style="width: 50%;align-content: center" v-if="newBtn"> <form> <div class="form-group"> <label >用户名</label> <input type="text" class="form-control" v-model="addem.username" placeholder="用户名"> </div> <div class="form-group"> <label >用户</label> <input type="text" class="form-control" v-model="addem.name" placeholder="用户"> </div> <div class="form-group"> <label >密码</label> <input type="text" class="form-control" v-model="addem.password" placeholder="密码"> </div> <div class="form-group"> <label >邮件</label> <input type="text" class="form-control" placeholder="邮件" v-model="addem.email"> </div> <div class="form-group"> <label >年龄</label> <input type="text" class="form-control" placeholder="年龄" v-model="addem.age"> </div> <div class="form-group"> <label >管理员</label> <input type="text" class="form-control" placeholder="管理员" v-model="addem.admin"> </div> <div class="form-group"> <label >所属部门</label> <input type="text" class="form-control" placeholder="所属部门" v-model="addem.deptId"> </div> <button type="submit" class="btn btn-default" @click="saveData">确定</button> <button type="submit" class="btn btn-default" @click="closeBtn">取消</button> </form> </div> <!--编辑窗口--> <div style="width: 50%;align-content: center" v-if="updateBtn"> <form> <div class="form-group"> <label >用户名</label> <input type="text" class="form-control" v-model="empol.username" placeholder="用户名"> </div> <div class="form-group"> <label >用户</label> <input type="text" class="form-control" v-model="empol.name" placeholder="用户"> </div> <div class="form-group"> <label >密码</label> <input type="text" class="form-control" v-model="empol.password" placeholder="密码"> </div> <div class="form-group"> <label >邮件</label> <input type="text" class="form-control" placeholder="邮件" v-model="empol.email"> </div> <div class="form-group"> <label >年龄</label> <input type="text" class="form-control" placeholder="年龄" v-model="empol.age"> </div> <div class="form-group"> <label >管理员</label> <input type="text" class="form-control" placeholder="管理员" v-model="empol.admin"> </div> <div class="form-group"> <label >所属部门</label> <input type="text" class="form-control" placeholder="所属部门" v-model="empol.deptId"> </div> <button type="submit" class="btn btn-default" @click="updateData">确定</button> <button type="submit" class="btn btn-default" @click="closeBtn">取消</button> </form> </div> </div> <script src="./js/bootstrap.js"></script> <script> new Vue({ el:'#app', data:{ pageNo:1, pageSize:3, totalPage:1, dataList:[], ids:[], username:null, form:{ username:null, name:null }, addem:{ }, empol:{}, newBtn:false, updateBtn:false }, methods:{ getAll(){ console.log("username:",this.username) axios({ method:'get', url:`http://localhost:8080/suv/list/${this.pageNo}/${this.pageSize}`, params:{ username:this.username } }).then(resp=>{ console.log("分页查询的数据:",resp.data) if (resp.data.code===20000){ this.dataList=resp.data.data.dataList this.totalPage=resp.data.data.total } }) }, change(page){ this.pageNo=page this.getAll() } , /*新增*/ saveData(){ axios({ method: 'post', url: 'http://localhost:8080/suv/list/save', data: this.addem }).then(resp=>{ if (resp.data.code===20000){ alert(resp.data.message) }else { alert(resp.data.message) } }) }, findData(id){ this.updateBtn = true axios({ method:'get', url:'http://localhost:8080/suv/list/listById', params: { id:id } }).then(resp=>{ console.log(resp.data) if (resp.data.code===20000){ this.empol=resp.data.data } }) } , updateData() { axios({ method:'put', url:'http://localhost:8080/suv/list/update', data:this.empol }).then(resp=>{ if (resp.data.code===20000){ alert(resp.data.message) this.updateBtn=false this.getAll() } }) } , asveBtn(){ this.newBtn=true }, search(){ this.pageNo = 1, this.getAll() } , resBtn(){ this.closeBtn() this.username=null this.getAll() }, closeBtn(){ this.newBtn = false, this.updateBtn = false }, /*删除*/ delData(id){ if (confirm("确定删除吗")){ axios({ method:'delete', url:'http://localhost:8080/suv/list/delete', params:{ id:id } }).then(resp=>{ if (resp.data.code===20000){ alert(resp.data.message) }else { alert(resp.data.message) } this.pageNo=1 this.getAll() }) } }, /*批量删除*/ batchDel(){ axios({ method:'post', url:'http://localhost:8080/suv/list/batchDel', data:this.ids }).then(resp=>{ alert(resp.data.message) this.pageNo=1 this.getAll() }) } }, created(){ this.getAll() } }) </script> </body> </html>

数据库数据设置:

效果展示

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询