springBoot:template engine&自定义一个mvc&后端给前端传数据&增删改查 (三)

简介: 本文介绍了如何自定义一个 MVC 框架,包括后端向前端传递数据、前后端代理配置、实现增删改查功能以及分页查询。详细展示了代码示例,从配置文件到控制器、服务层和数据访问层的实现,帮助开发者快速理解和应用。

自定义一个mvc

package com.example.springboot01.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Locale;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    public  static class MyViewResolver implements ViewResolver {
//         自定义一个 自己的视图解析器
        @Bean
        public ViewResolver myViewResolver(){
return new MyViewResolver();
        }
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
}

后端给前端传数据

后端

@RestController
public class IndexController {
@RequestMapping("/index")
    public String Hello(){
    return "hello";
}
}

前端

代理

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false, /*关闭语法检查*/
  devServer: {
    proxy: {
      // 代理 见到 api开头 拦截,然后替换 为 target里面的内容,所以需要将
      // ^/api 变为 空字符串
      '/api': { //表示  拦截  /api  开头的路径
        // 跨域 的域名(不需要写路径) 写 了的话需要替换 
        // 如果更改了地址就需要在后面加上
        target: "http://localhost:8080/",
        changeOrigin: true,     //  是否 开启跨域 
        pathRewrite: {
          '^/api': '',        //  把/api  变为 空字符串     
        }
      },
    }
  },
})

使用

methods: {
    test() {
      const a = axios.get("/api/index").then(res => res.data)
      console.log(a)
    }
  }

增删改查

先创建一个数据库

在 配置好 环境 变量下 完成 增删改查

查所有

查所有

先 写一个controller

@RequestMapping
    public List<User> index(){
        return userMapper.findAll();
    }

然后创建一个userMapper  接口

@Mapper
public interface UserMapper {
    @Select("select * from sys_user")
    List<User> findAll();
}

引用 mapper    注意注解

@Autowired
    private   UserMapper userMapper;


通过id删除

语句

调用mapper  一样

@Autowired
    private   UserMapper userMapper;
    //  删除
    @DeleteMapping("/{id}")
    public Integer delete(@PathVariable Integer id){
        return userMapper.deleteById(id);
    }

创建mapper 文件

@Delete("delete from sys_user where id = #{id}")
    Integer deleteById(@Param("id") Integer id);

即可

增加

//  增和 改 都在 这个里面
    @PostMapping
    public Integer save(@RequestBody User user){
//         新增或则 更新 都在里面
        return userService.save(user);
    }

此时 使用的 是 userService  文件

@Autowired
    private UserService userService;

使用一个 判断   整合  

@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    public int save(User user){
        if(user.getId() == null){
           return userMapper.insert(user);
        }else {
//             否则为更新
         return userMapper.update(user);
        }
    }
}

主要的 增删 改查 还在   mapper 文件中

inser  为 增加

@Insert("INSERT into sys_user (username,password,nickname,email,phone,address) values(#{username},#{password},#{nickname},#{email},#{phone},#{address})")
int insert(User user);


更新

先定义一个语句

int update(User user);

在 resources 文件夹下面  创建一个mapper

并在application.yaml  里面配置好

mybatis:
  mapper-locations: classpath:mapper/*.xml
#   classpath  resources 文件夹 下面的 东西
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#     打印日志

再创建User.xml    

 为 el语法

updata id= update      为mapper 中 配置的 名字

<?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.example.springboot.mapper.UserMapper">
<!--    id  和 方法名一样-->
    <update id="update">
    update sys_user
    <set>
    <if test="username != null">
        username=#{username},
    </if>
<!--        <if test="password != null">-->
<!--            password=#{password}-->
<!--        </if>-->
        <if test="nickname != null">
            nickname=#{nickname},
        </if>
        <if test="email != null">
            email=#{email},
        </if>
        <if test="phone != null">
            phone=#{phone},
        </if>
        <if test="address != null">
            address=#{address}
        </if>
    </set>
<where>
   id=#{id}
</where>
    </update>
</mapper>


分页and 查询


(pageNum-1)*pageSize

pageNum    显示第几页

pageSize    每页显示的 个数

//    limit 2,5
    // 2 下标0 开始  后面加一 开始,   5   表示 每页显示的 数量 
@Select("select * from sys_user Limit #{pageNum},#{page Size}")
    List <User>selectPage(Integer pageNum, Integer pageSize);
@Select("select count(*) from sys_user ")
    Integer selectTotal();
}
// count  表示 数量
//   分页查询接口
    //@RequestParam  接收 ?pageNum = 1 pageSize=10
    @RequestMapping("/page")
    public Map<String,Object> findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize) {
        pageNum=(pageNum-1)*pageSize;// 每页数量  开始的  下标
/ 你/         分页 的 方法  得到 data
        List<User>data=userMapper.selectPage(pageNum,pageSize);
//         全部的 数据
          Integer total=userMapper.selectTotal();
//           定义一个map  存入  数据
        Map<String,Object>res=new HashMap<>();
        res.put("data",data);
        res.put("total",total);
       return res;
    }
}

在 分页基础 上加一个username   参数  完成 查询

//   分页查询接口
    //@RequestParam  接收 ?pageNum = 1 pageSize=10
    @RequestMapping("/page")
    public Map<String,Object> findPage(@RequestParam Integer pageNum,
                                       @RequestParam Integer pageSize,
                                       @RequestParam String username) {
        pageNum=(pageNum-1)*pageSize;// 每页数量  开始的  下标
        username = "%"+username+"%";
//         分页 的 方法  得到 data
        List<User>data=userMapper.selectPage(pageNum,pageSize,username);
//         全部的 数据
          Integer total=userMapper.selectTotal(username);
//           定义一个map  存入  数据
        Map<String,Object>res=new HashMap<>();
        res.put("data",data);
        res.put("total",total);
       return res;
    }
}
//    limit 2,5
    // 2 下标0 开始  后面加一 开始,   5   表示 每页显示的 数量
@Select("select * from sys_user where username like #{username} Limit #{pageNum},#{pageSize}")
    List <User>selectPage(Integer pageNum, Integer pageSize,String username);
@Select("select count(*) from sys_user where username like #{username}")
    Integer selectTotal(String username);
}

前端 绑定

现在 el-input 里面绑定 username

在load 方法里面 加参数

点击按钮加载 方法

load() {
            //  请求分页
            fetch(`http://localhost:8081/user/page?pageNum=${this.pageNum}&pageSize=${this.pageSize}&username=${this.username}`).then(res => res.json()).then(
                res => {
                    this.tableData = res.data,
                        this.total = res.total
                }
            )
        },




相关文章
|
1月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
188 1
|
3月前
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
136 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
172 0
|
3月前
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
108 0
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
136 0
|
3月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
123 0
|
2月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
281 70
|
7月前
|
存储 监控 安全
前端框架的数据驱动方式如何保证数据的安全性?
总之,前端框架的数据驱动方式需要综合运用多种手段来保证数据的安全性。从传输、存储、访问控制到防范攻击等各个方面进行全面考虑和实施,以确保用户数据的安全可靠。同时,不断加强安全管理和技术创新,以应对不断变化的安全挑战。
240 60
|
7月前
|
前端开发 Java 数据库
SpringBoot入门 - 对Hello world进行MVC分层
SpringBoot入门 - 对Hello world进行MVC分层
150 3
SpringBoot入门 - 对Hello world进行MVC分层
|
5月前
|
Dart 前端开发
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
182 75
【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈