首页 > 其他分享 >【SpringBoot】SpringBoot 项目编写顺序

【SpringBoot】SpringBoot 项目编写顺序

时间:2022-10-09 15:25:56浏览次数:101  
标签:顺序 String name pwd result User 编写 public SpringBoot

创建项目

1、创建maven / SpringBoot 项目

2、添加依赖

3、创建SpringBoot引导类 Application

 

项目基本结构

引导类Application 同级目录下创建模块包

      

在resources目录存放xml、配置文件及页面等

    

 

 

controller  控制层

  定义前端请求与后端接口间的映射关系

  Tips:这里只是映射,具体的业务逻辑方法在services包中说明

  工作原理:

    1.  前端向指定的URL发送请求;
    2.  后端接收到请求,根据URL的格式,查找controller层中的不同方法,将该请求传给符合条件的方法进行处理;
    3.  处理完毕后返回response(这个response可以是一个html页面,也可以是json对象和json字符串)

 

@Slf4j
@Controller
@RequestMapping(value = "/api/demo")
public class DemoController {
    @Autowired
    private DemoService demoService;

    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public String register(String name, Integer age, String pwd, Model model, HttpServletRequest request, HttpServletResponse response)throws Exception{
        try{
            //打印日志
            log.info(name+","+age+","+pwd);
            //获取注册的结果
            User result = DempService.register(name, age, pwd);

            if(result.isSuccess()){
                //将结果存到model里面,用于前端view层展示
                model.addAttribute("result",result);
                //跳转至注册结果页面
                return "registerResult";
            }else{
                response.setContentType("application/json; charset=utf-8");
                response.getWriter().print("{\"code\":\"0002\",\"msg\":\"用户名已存在,注册失败!\"}");
            }
        }catch (Exception e){
            e.printStackTrace();
        }

        return null;
    }

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String login(String name, String pwd,  Model model, HttpServletRequest request, HttpServletResponse response) throws Exception{
        try{
            //打印日志
            log.info(name+","+pwd);
            //获取登录查询的结果
            User result = demoServices.login(name, pwd);

            if(result.isSuccess()){

                //将结果存到model里面,用于前端view层展示
                model.addAttribute("result",result);

                HttpSession session = request.getSession();

                session.setAttribute("name", result.getName());
                session.setAttribute("password",result.getPwd());

                System.out.println("登录后的sessionID:"+session.getId());

                //跳转至登录结果页面
                return "loginResult";
            }else{
                response.setContentType("application/json; charset=utf-8");
                response.getWriter().print("{\"code\":\"0001\",\"msg\":\"用户名或密码错误!\"}");
            }
        }catch (Exception e){
           e.printStackTrace();
        }
        return null;
    }
示例

  

model  数据库实体层 DTO

  数据库表对应的Entity类,每个字段都是表中的一列

  Tips:注意属性名与数据库列名的对照

public class User {
    private Long id;
    private String username;
    private String password;
    private String identity;
    //getter与setter方法
    //...
}

 

 

service  业务层

  定义后端接口的具体业务逻辑方法的实现

  存放services接口与具体的实现类

    - 借助dao包(即mapper)中提供的数据库相关功能,完成前端要求功能所需的数据的查询与插入,并返回相关的entity类对象。

    Tips:services包的相关方法只是调用dao包的相关方法

  命名规则 

    - 接口为XxxServices XxxInterfaceService:只是简单地声明相关业务逻辑方法,没有别的代码和注解;

    - 接口实现类为XxxServicesImpl XxxServices,继承自XxxServices XxxInterfaceService,需要实现这些业务逻辑方法

格式:

public Demo sercice_func(...){
    Demo result = new Demo();
    xxx = DemoMapper.mapper_func(...);
    try{
        if(xxx != null){
            //sql成功,成功接收返回值
            result.setXxx(...);
            result.setMsg("成功!");
        }else{
            //sql失败
            result.setXxx(...);
            result.setMsg("失败,...");
    }catch (Exception e){
            e.printStackTrace();
            result.setMsg(e.getMessage());
    }
    return result;
}

 

public interface DemoInterfaceService {
    User register(String name, Integer age, String pwd);
    User login(String name, String pwd);
}
接口 DemoInterfaceService.java

 

@Service
public class DemoServices ements DemoInterfaceService {
    @Autowired
    private DemoMapper demoMapper;

    @Override
    public User register(String name, Integer age, String pwd){
        User existUser = demoMapper.findUserByName(name);
        User result = new User();
        try {
            if (existUser != null) {
                result.setXxx(...);
            } else {
                demoMapper.register(name, age, pwd);//注册后再使用该名字查询用户信息
                User currentRegUser = demoMapper.findUserByName(name);
           result.setXxx(...);
            }
        } catch (Exception e) {
            e.printStackTrace();
            result.setMsg(e.getMessage());
        }
        return result;
    }

    @Override
    public User login(String name, String pwd){
        User result = new User();
        result.setSuccess(false);

        Long userId = demoMapper.login(name,pwd);
        try{
            if(userId != null){
                result.setMsg("登录成功!");
                result.setSuccess(true);
                //根据userId查询出当前登录用户
                User currentLoginUser = demoMapper.findUserById(userId);
            result.setXxx(...);
            }else{
                result.setMsg("用户名或密码不正确!");
                result.setSuccess(false);
            }
        } catch (Exception e){
            e.printStackTrace();
            result.setMsg(e.getMessage());
        }
        return result;
    }
}
接口实现类 DemoService.java

 

 

mapper 数据持久层 DAO

  定义接口dao,声明了数据库操作的相关方法,业务逻辑层的各项功能通过dao方法实现与数据库的交互

  Tips:具体的方法实现在mapper.xml中完善 方法对应id

DemoMapper.java

@Repository
@Mapper
public interface DemoMapper {
    //查询用户是否存在,若是存在则提示已存在
    User findUserByName(String name);

    //新增用户
    void register(String name, Integer age, String pwd);

    //用户登录--根据用户名和密码查询ID是否存在
    Long login(String name, String pwd);

    User findUserById(Long id);

}

 

DemoMapper.xml

<?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.xxx.demo.mapper.DemoMapper" >
    <resultMap id="DemoResultMap" type="com.xxx.Demo.Model.DemoModel" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="name" property="name" jdbcType="VARCHAR" />
        <result column="pwd" property="pwd" jdbcType="VARCHAR" />
        <result column="age" property="age" jdbcType="INTEGER" />
    </resultMap>
    <sql id="Base_Column_List" >
        id, name, age, pwd
    </sql>
    <select id="findUserByName" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List" />
        from user
        where name=#{name}
    </select>
    <select id="login" resultType="java.lang.Long">
        select u.id from user u where u.name=#{param1} and u.pwd=#{param2}
    </select>
    <select id="findUserById" resultMap="BaseResultMap">
        select * from user u where u.id=#{id}
    </select>
    <insert id="register">
        insert into user (name,age,pwd) values(#{param1},#{param2},#{param3})
    </insert>
</mapper>

 

  Tips:

    •  mapper的namespace属性,必须是mapper名且名称从com开始:com.xxx.xxx.XxxMapper;
    •  如果要返回多个查询项,就要用resultMap,它对应一个entity类,借助类对象返回
    •  mapper 中方法传入的参数,通过#{参数名}传进xml文件。

    

 

 

 

参考:[SpringBoot 完整项目编写流程](https://www.cnblogs.com/ShineLeBlog/p/16476702.html)

[常用注解](https://www.cnblogs.com/phoenixy/p/16771053.html)

标签:顺序,String,name,pwd,result,User,编写,public,SpringBoot
From: https://www.cnblogs.com/phoenixy/p/16771332.html

相关文章

  • 【SpringBoot】常用注解
    @Controller标记在类上面,类就是一个Controller对象;只是定义了一个控制器类。@RestController写在Controller类之前,添加该注解即可返回JSON格式的数据;@RestController......
  • Springboot整合es
    参考文章链接​​SpringBoot操作ES,实现各种骚操作查询-知乎​​二、整合方式boot整合es三种方式SpringBoot整合ES的三种方式(API、RESTClient、Data-ES)_jacksonary的博客......
  • 一文搞懂springboot启动原理
    https://cloud.tencent.com/developer/article/1449134温馨提示如果你喜欢本文,请分享到朋友圈,想要获得更多信息,请关注我。关注公众号回复关键字领取免费学习资源-电......
  • SQL Server更改表字段顺序和表结构
    https://www.cnblogs.com/jack-yan/p/14069390.html   左侧导航栏-表名-右键-表设计  ......
  • SpringBoot 后台服务端 杂记
    由于公司人手不足,导致桌面应用、微信小程序以及两端对应的服务端都由我自己开发。为了加快开发进度,采用SpringBoot+SpringSecurity+JWT的方式(桌面应用的服务端,微信小......
  • SpringBoot 下载文件
    下载文件  SpringBoot接口输出文件流&Vue下载文件流,获取Header中的文件名@SpringBootTestclassDownloadTests{Loggerlogger=LoggerFactory.getLogger......
  • springboot中对各个层的理解
    springboot中对各个层的理解1、entity层:实体层,数据库在项目中的类。也被称为model层,pojo层。用于定义与数据库对象的属性,提供get/set方法,带参和无参的构造方法。一般数......
  • springboot整合ssm详细讲解
    SSM是企业中广泛应用的框架。大家再熟练地使用SSM进行业务逻辑开发的时候,也被它大量的xml配置困扰。今天快速优雅的使用SpringBoot实现简易的SSM工程。废话不多说,comeon开......
  • Springboot整合缓存
    一、缓存的引入一个应用主要瓶颈在于数据库的IO,大家都知道内存的速度是远远快于硬盘的速度(即使固态硬盘与内容也无法比拟)。应用之中经常会遇到返回相同的数据(数据字典,行政......
  • Springboot创建项目(idea版本)
    一:概述由于springboot项目,不管是java工程还是web工程都可以直接以jar方式运行,所以推荐创建jar工程,这里创建jar工程项目为例。二:两种方式创建springboot项目1.第一种方式手动......