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
                }
            )
        },




相关文章
|
2月前
|
存储 开发工具 数据库
认证源码分析与自定义后端认证逻辑
认证源码分析与自定义后端认证逻辑
40 0
认证源码分析与自定义后端认证逻辑
|
2月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
1月前
|
安全 Java API
实现跨域请求:Spring Boot后端的解决方案
本文介绍了在Spring Boot中处理跨域请求的三种方法:使用`@CrossOrigin`注解、全局配置以及自定义过滤器。每种方法都适用于不同的场景和需求,帮助开发者灵活地解决跨域问题,确保前后端交互顺畅与安全。
|
3月前
|
NoSQL Java Redis
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
这篇文章介绍了如何使用Spring Boot整合Apache Shiro框架进行后端开发,包括认证和授权流程,并使用Redis存储Token以及MD5加密用户密码。
48 0
shiro学习四:使用springboot整合shiro,正常的企业级后端开发shiro认证鉴权流程。使用redis做token的过滤。md5做密码的加密。
|
3月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
205 1
|
3月前
|
机器学习/深度学习 移动开发 自然语言处理
基于人工智能技术的智能导诊系统源码,SpringBoot作为后端服务的框架,提供快速开发,自动配置和生产级特性
当身体不适却不知该挂哪个科室时,智能导诊系统应运而生。患者只需选择不适部位和症状,系统即可迅速推荐正确科室,避免排错队浪费时间。该系统基于SpringBoot、Redis、MyBatis Plus等技术架构,支持多渠道接入,具备自然语言理解和多输入方式,确保高效精准的导诊体验。无论是线上医疗平台还是大型医院,智能导诊系统均能有效优化就诊流程。
|
3月前
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
220 14
|
3月前
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
59 0
|
3月前
|
人工智能 自然语言处理 运维
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
|
3月前
|
存储 弹性计算 算法
前端大模型应用笔记(四):如何在资源受限例如1核和1G内存的端侧或ECS上运行一个合适的向量存储库及如何优化
本文探讨了在资源受限的嵌入式设备(如1核处理器和1GB内存)上实现高效向量存储和检索的方法,旨在支持端侧大模型应用。文章分析了Annoy、HNSWLib、NMSLib、FLANN、VP-Trees和Lshbox等向量存储库的特点与适用场景,推荐Annoy作为多数情况下的首选方案,并提出了数据预处理、索引优化、查询优化等策略以提升性能。通过这些方法,即使在资源受限的环境中也能实现高效的向量检索。

热门文章

最新文章