代码编织梦想

目录

一.导入依赖

二.添加实体类 entity

2.1 登录实体

2.2 内容实体

2.3 前后端交互传输数据

三.添加mapper类 写出业务接口

四.创建mapper文件 添加xml文件夹管理 创建mapper的sql语句

 五 添加service层 将业务逻辑全部放到service中管理

CRUD

登录的业务

六.登录的拦截器

七.在controller层中接受前端发来的请求,同时向后端发送请求

登录


一.导入依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId> <optional>true</optional>
        </dependency>
        <!-- mysql-connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- mybatis-plus代码生成器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>

        <!-- jedis依赖,访问redis数据库-->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
</dependency>

二.添加实体类 entity

2.1 登录实体

public class User implements Serializable {

    /**
     * 用户账号
     */
    private String userCode;

    /**
     * 用户名
     */
    private String userName;

2.2 内容实体

public class Paper implements Serializable {

    private Long id;

    private String title;

    private Long typeId;

    private String paperSummary;

    private String paperPath;

    private String createdBy;

    private LocalDateTime creationData;

    private String modifyBy;

    private LocalDateTime modifyData;

    private String fileName;

    private String typeName;

}

2.3 前后端交互传输数据

@AllArgsConstructor
@NoArgsConstructor
public class HttpResult {
    private Object data;
    private int pageTotle;
    private int code;//200=成功 500失败
    private String msg;//提示
}

三.添加mapper类 写出业务接口

public interface UserMapper extends BaseMapper<User> {
//登录

}

public interface PaperMapper  extends BaseMapper<Paper> {
   List<Paper> selectPaperListByCondition(String title, String typeName, int start, int size);
   int count(String title,String typeName);//查询总数,用于列表分页

   //根据id获取论文信息的接口
   Paper getPaperById(long id);
   //根据id删除论文的接口
   int DeletePaperId(long id);
   //添加论文
   int insertPaper(Paper paper);
   //根据id修改论文
   int updatePaperById(Paper paper);
}

四.创建mapper文件 添加xml文件夹管理 创建mapper的sql语句

<?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.woniu.paper.mapper.PaperMapper">
    <!--建立数据库t_paper表和实体Paper的映射关系-->
    <resultMap id="paperResult" type="Paper">
        <result column="id" property="id"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="title" property="title"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="type_id" property="typeId"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="paper_summary" property="paperSummary"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="paper_path" property="paperPath"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="created_by" property="createdBy"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="creation_data" property="creationData"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="modify_by" property="modifyBy"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="modify_data" property="modifyData"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="file_name" property="fileName"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
        <result column="type_name" property="typeName"/> <!-- column:数据库字段名 property:实体的属(变量)名 -->
    </resultMap>

    <select id="selectPaperListByCondition" resultMap="paperResult">
        select p.*, t.type_name from t_paper as p LEFT JOIN t_type as t on
        p.type_id=t.id
        <where>
            <if test="title != null and title != 'null'">
                and title like '%${title}%'
            </if>
            <if test="typeName !=null and typeName != 'null'">
                and type_name=#{typeName}
            </if>
        </where>
        limit #{start},#{size}
    </select>

    <select id="count" resultType="int">
        select count(t.type_name) from t_paper as p LEFT JOIN t_type as t on
        p.type_id=t.id
        <where>
            <if test="title != null and title != ''">
                and title like '%${title}%'
            </if>
            <if test="typeName !=null and typeName != ''">
                and type_name=#{typeName}
            </if>
        </where>
    </select>

    <select id="getPaperById" resultMap="paperResult" >
        select p.*, t.type_name from t_paper as p left join t_type as t on p.type_id=t.id where p.id=#{id}
    </select>

    <delete id="DeletePaperId">
        delete from t_paper where id=#{id};
    </delete>

    <insert id="insertPaper">
 insert into t_paper (title, type_id,  created_by)
        values ( #{title}, #{typeId}, #{createdBy})
    </insert>


    <update id="updatePaperById">
        update t_paper set title=#{title},type_id=#{typeId},created_by=#{createdBy} where id=#{id}
    </update>
</mapper>

 五 添加service层 将业务逻辑全部放到service中管理

CRUD

public interface IPaperService {
    public HttpResult selectPaperListByCondition(String title, String typeName, int pageIndex, int pageSize);
    HttpResult  getPaperById(long id);

    HttpResult DeletePaperId(long id);

    HttpResult insertPaper(Paper paper);

    HttpResult updatePaperById(Paper paper);


}

@Service
public class PaperServiceImpl  implements IPaperService {
    @Autowired(required = false)
    private PaperMapper paperMapper;

    @Override
    public HttpResult selectPaperListByCondition(String title, String typeName, int pageIndex, int pageSize) {
        List<Paper> papers = paperMapper.selectPaperListByCondition(title, typeName, (pageIndex - 1) * pageSize, pageSize);
       int count=paperMapper.count(title,typeName);
       HttpResult result=null;
       if(papers!=null && papers.size()>0){
           result=new HttpResult(papers,count,200,null);
       }else{
           result=new HttpResult(null,0,500,"没有更多数据");
       }
       return result;
    }

    @Override
    public HttpResult getPaperById(long id) {
        Paper paper = paperMapper.getPaperById(id);
        HttpResult result=null;
        if (paper!=null){
            result=new HttpResult(paper,0,200,null);
            return result;
        }else {
            result=new HttpResult(null,0,500,"没有更多数据");
            return result ;
        }

    }

    @Override
     public HttpResult DeletePaperId(long id) {
        int count=paperMapper.DeletePaperId(id);
        HttpResult result=null;
        if (count>0){
            result=new HttpResult(null,0,200,"删除充功");
            return result;
        }else{
            result=new HttpResult(null,0,500,"删除失败");
            return result ;
        }
    }

    @Override
    public HttpResult insertPaper(Paper paper) {
        int count=paperMapper.insertPaper(paper);
        HttpResult result=null;
        if (count>0){
            result=new HttpResult(null,0,200,"添加论文充功");
            return result;
        }else{
            result=new HttpResult(null,0,500,"添加论文失败");
            return result ;
        }
    }

    @Override
   public HttpResult updatePaperById(Paper paper) {
        int count=paperMapper.updatePaperById(paper);
        HttpResult result=null;
        if (count>0){
            result=new HttpResult(null,0,200,"修改论文充功");
            return result;
        }else{
            result=new HttpResult(null,0,500,"修改论文失败");
            return result ;
        }
    }
}

登录的业务

public class UserServiceImpl  implements IUserService {
    @Autowired(required = false)
    private UserMapper userMapper;

    @Override
    public HttpResult login(String userCode, String pwd) {
        //创建条件构造器,构造一系列的条件
        //条件构造器
        QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
        //构造查询条件
        queryWrapper.eq("user_code",userCode);
        queryWrapper.eq("user_password",pwd);

        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
        HttpResult result=null;
        if(user !=null){
            //登录成功,将用户的id保存在redis中
            Jedis jedis=new Jedis("42.192.37.216",6379);
            jedis.auth("zxcv2018");
            jedis.set(user.getId()+"",user.getId()+"");//将用户保存到redis中
            jedis.close();
            result=new HttpResult(user,0,200,"登录成功");
        }else{
            result=new HttpResult(null,0,500,"登录失败");
        }
        return result;
    }
}

六.登录的拦截器

@Configuration
public class Authinterceptor extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
             boolean isGo=false;
              String url=request.getRequestURI();//获取当前请求的数据接口路径
                System.out.println("当前请求的路径"+url);
                //获取用户请求时传递的id
                String uid=request.getParameter("uid");//接受用户登录的参数

                //获取根据uid查询redis中是否哦呦对应的数据
                Jedis jedis=new Jedis("42.192.37.216",6379);

                if(url.contains("/paper/user/login")){
                    isGo=true;
                }else if (jedis.get(uid)!=null){//如果用户登录传递的值与redis中一致,则方形
                 isGo=true;
                }
                jedis.close();
                return isGo;
            }

        registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");

    }
}

七.在controller层中接受前端发来的请求,同时向后端发送请求

登录

@RestController
@RequestMapping("/paper/user")
public class UserController {
    @Autowired(required = false)
    private IUserService userService;
    @CrossOrigin(origins = "*")
    @RequestMapping("/login")
    public HttpResult login(String userCode,String pwd){

        return userService.login(userCode,pwd);
    }

    @RequestMapping("/fun")
    public String  fun(){
        return "ahhah";
    }
}

CRUD

@RestController
@RequestMapping("/paper/paper")
public class PaperController {
    @Autowired
    private IPaperService paperService;
    /**
     * 根据条件分页查询
          */
    @RequestMapping("/list")
    @CrossOrigin(origins = "*")
        public HttpResult selectPaperListByCondition(String title,String typeName,int pageIndex,int pageSize){
           return paperService.selectPaperListByCondition(title,typeName,pageIndex,pageSize);
        }

    /**
     * 根据id查询论文细心
     * @param id
     * @return
     */
    @RequestMapping("/info")
    @CrossOrigin(origins = "*")
    public HttpResult getPaperById(long id){
        return paperService.getPaperById(id);
    }

    /**
     * 根据id删除
     */
    @RequestMapping("/delete")      //通过axios发送请求
    @CrossOrigin(origins = "*")
    public HttpResult delete(long id){
        return paperService.DeletePaperId(id);
    }

    @RequestMapping("/add")
    @CrossOrigin(origins = "*")
    public HttpResult insertPaper(String title,String createdBy,long typeId){
        Paper paper = new Paper();
        paper.setTitle(title);
        paper.setCreatedBy(createdBy);
        paper.setTypeId(typeId);
        return paperService.insertPaper(paper);
    }


    @RequestMapping("/update")
    @CrossOrigin(origins = "*")
    public HttpResult updatePaper(long id,String title,String createdBy,long typeId){
        Paper paper = new Paper();
        paper.setId(id);
        paper.setTitle(title);
        paper.setCreatedBy(createdBy);
        paper.setTypeId(typeId);
        return paperService.updatePaperById(paper);
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_52837547/article/details/127992902

基于Springboot+vue前后端分离商城项目基本开发手册【一】-爱代码爱编程

开发环境准备 项目目录结构 权限管理 通用分页表格 Swagger文档 undertow容器 对xss攻击的防御 分布式锁 统一的系统日志 统一验证 统一异常处理 文件上传下载 一对多、多对多分页 开发环境准备   mall的商业版,最基本的开发环境与开源版本一致,方便用户迁移,我们认为,购买商业版,并且需要进行代码编写的人员,

Springboot+Shiro+Mybatis+Thymeleaf-爱代码爱编程

首先是pom.xml注入依赖包 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <

Spring boot +Vue3.x +Element Plus 前后分离管理项目-爱代码爱编程

​  项目介绍 mooding-boot 是一个轻量级的,前后端分离的J2EE快速开发平台,致力于做更简洁的快速开发平台。 每次做项目都要去找很久适合自己的项目,有时候找到的项目技术相对比较滞后,有时候前端后和后端项目不是同时让自己满意,因此利用休息日自己撸了一个比较简洁的项目,供自己和想自己的小伙伴参考使用。 该项目前端采用时比较新颖的vue3.

开发SpringBoot+Jwt+Vue的前后端分离后台管理系统VueAdmin - 后端笔记-爱代码爱编程

为了让更多同学学习到前后端分离管理系统的搭建过程,这里我写了详细的开发过程的文档,使用的是springsecurity + jwt + vue的技术栈组合,如果有帮助,别忘了点个赞和关注我的公众号哈! 线上预览:vueadmin-vue 效果图: 首发公众号:MarkerHub 作者:吕一明 项目源码:关注公众号 MarkerHub 

SpringBoot+vue前后端分离博客项目-爱代码爱编程

SpringBoot+vue前后端分离博客项目 Java后端接口开发1、前言2、新建Springboot项目3、整合mybatis plus第一步:导入jar包第二步:然后去写配置文件:第三步:开启mapper接口扫描,添加分页插件第四步:代码生成3*、统一结果封装4、整合shiro+jwt,并会话共享第一步:导入shiro-redis的start

SpringBoot + Mybatis-plus + redis 项目练习-爱代码爱编程

目录 一、SpringBoot集成Mybatis-Plues 二、Mybatis-Plues 使用 redis 作为二级缓存 项目结构: 所需要的所有依赖坐标: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.o

【Gorho】springboot整合Shiro+jwt 前后端分离 超级详细的shiro+jwt鉴权过程-爱代码爱编程

shiro+jwt+springboot 说在前面 简介项目环境(pom.xml)项目结构(各种包和类)鉴权流程具体代码 配置Shiro配置JWTUtils定义JwtFilter定义JwtToken定义两个Realm两个"工具人" **JwtCredentialsMatcher.java****MultiRealmA

喂饭式教程,4小时开发一个springboot+vue前后端分离博客项目_暴走啊呆的博客-爱代码爱编程

Java后端接口开发 1、前言 从零开始搭建一个项目骨架,最好选择合适,熟悉的技术,并且在未来易拓展,适合微服务化体系等。所以一般以Springboot作为我们的框架基础,这是离不开的了。 然后数据层,我们常用的是Mybatis,易上手,方便维护。但是单表操作比较困难,特别是添加字段或减少字段的时候,比较繁琐,所以这里我推荐使用Mybatis Plu

前后端分离项目知识汇总(阿里云oss,easyexcel,视频点播,springcloud,redis,nuxt)_m0_67402235的博客-爱代码爱编程

整合篇一 整合CRUD 前后端对接流程 添加路由点击路由显示页面在api文件夹创建js文件,定义接口地址和参数创建vue页面引入js文件,调用方法实现功能多条件查询删除功能增加功能修改功能 修改是用put请求还是post请求?整合阿里云OSS 环境部署Java操作OSSnginx反向代理EasyEx

springboot+mybatisplus前后端分离——纯后端(万字)开发流程_lemon_jk的博客-爱代码爱编程

java前后端分离项目经验总结 软件开发的流程 需求分析——设计——编码——测试——上线运维 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZXlciP7A-1659410345395)