前后端交互整合

框架

1.SpringBoot(框架的框架/工具)

2.Spring(整合第三方框架)

3.springMVC(实现前后端的交互)

4.mybatis/MP(实现持久化操作)

 在这里插入图片描述

spring框架流程:

1.主要流程依然不变,数据从网页端发送请求,

2,3.服务器收到请求,并参考pojo的对象类整理请求参数

4.从Controller模块中找到对应的方法.

5.加载对应服务类

6.加载对应接口的实现方法

7.加载映射文件(MyBatis)

8.实现DB

创建代码层

模型层(pojo),                @Component:将该类交给spring管理

持久层(mapper/dao),   @MapperScan:将该类交给spring管理

业务层(service),           @Service:将该类交给spring管理

控制层(controller),        @RestController=@Controller+@ResponseBody

        @ResponseBody:将服务器数据转化为JSON返回

        @Controller:         将该类交给spring管理

        public class UserController

        {

                @Autowired

                //编码规则:面向接口开发:解耦

                private UserService userService;使用接口

        }

项目层次

 在这里插入图片描述

 控制层(controller)

@RequestMapping可以接受get,post,put,delete请求

@GetMapping            只能接受get请求

@PostMapping           只能接受post的请求

@PutMapping             只能接受Put的请求

@DeleteMapping        只能接受Delete的请求

SpringMVC可以利用对象的方式接收

        底层实现:将参数“name=XXX”  拼接为setname,之后检查是否存在对应的Setname(),如果存在就为对象赋值。

1.参数名称必须与url中的名称一致

2.SpringMVC可以根据用户的需求,自动实现类型的转换 

        底层实现,SpringMVC可以根据用户的参数类型,自动实现类的转化,

//控制类UserController代码

//SpringMVC直接根据网页传输的数据整理成user对象,传输进方法中

@GetMapping("findByUser")
    public User findUserById(User user){
        return userService.findByUser(user);
    }

//服务层UserServiceImpl的代码

 //MP可以直接将对象中不为null的值作为where的条件

public User findByUser(User user) {

        //直接将user作为对象填入QueryWrapper中,MP会自动将对象中不为null的值作为where的条件

        QueryWrapper<User> queryWrapper = new QueryWrapper(user);

                //仅限关系为=时可以使用user封装

        return userMapper.selectOne(queryWrapper);

}

RestFul说明

Get请求:localhost:/8090/findUserByNS?王昭君/女

信息

  1. 用户不能了解请求的意图,
  2. 参数保密,只有后端服务器了解参数的意义
  3. 请求字节传输量少,简介

规定:

        请求的方法不能出现动词!只能写名词。

注意事项:

  1. url地址中的参数与参数之间使用/分隔
  2. 参数的位置但固定,不能轻易修改
  3. 用户发起请求时,应该按照restFull的结构执行
  4. restFul请求一般以get请求为主.put/delete/post

案列

前端数据

查询name=“sayhi” age<18岁的用户

URL:http://localhost:8090/user/sayhi/18     对应控制层:@GetMapping("/user/{name}/{age}")

URL:http://localhost:8090/user/sayhi,18     对应控制层:@GetMapping("/user/{name},{age}")

数值与数值之间的隔断关系如何,那么控制层获取数据的方式也要一一对应

后端接收

接受规则:

  1. 参数与参数之后使用/分隔
  2. 参数的位置一旦确定,一般不变
  3. 接受的参数使用{变量名}        
  4. 使用@PathVariable 接受
  5. 如果参数有多个,建议使用对象接受 参数必须与属性名一致

注意:如果名称不统一,@PathVariable(原名) String 别名,

public List<User> findUserById2(@PathVariable(name)String userName){}

URL:http://localhost:8090/user/sayhi/18

参数:name/age

返回值:list<User>

 编辑UserController

@GetMapping("/user/{name},{age}")

public List<User> findUserByNA(User user){

        return userService.findByUser(user);

}

 编辑UserServiceImpl

//参数有多个,参数必须与属性名一致,可以使用对象接收数据

public List<User> findByUser(User user) { 

        判定关系不都是"="的关系,包含比较关系"<",无法直接将user作为对象传入

        QueryWrapper queryWrapper = new QueryWrapper();

        //使用判断方法,如果为空,就不执行,增加了代码的耦合性,减少编程压力

        queryWrapper.eq(user.getId()!=null,"id",user.getId())

                        .eq(user.getName()!=null,     "name",      user.getName())

                        .gt(user.getAge()!=null,         "age"  ,       user.getAge() )

                        .eq(user.getSex()!=null,        "sex" ,         user.getSex() );

        直接将查询结果作为数据输出返回

        return userMapper.selectList(queryWrapper);

}

查询多个用户

URL:http://localhost:8090/findUserByIds?id=1,2,3,4,5,6

规则:如果参数使用“,”分割,则SpringMVC可以自动转化为数组

将数组转化为列表,就可以使用列表进行查找了

 编辑UserController
 

@GetMapping("/getUserByIds")

        //SpringMVC可以自动将多个数据转化为数组

        public List<User> getUserByIds(Integer[] ids){

        return userService.getUserByIds(ids);
    }

 编辑UserServiceImpl

@Override

public List<User> getUserByIds(Integer[] ids) {

        //将数组转化为列表,就可以使用列表进行查找了

         List<Integer> idList = Arrays.asList(ids);

         return userMapper.selectBatchIds(idList);

}

@RestController
@RequestMapping
public class UserController {
    @Autowired
    private UserService userService;
    @RequestMapping("findAll")
    public List<User> findAll(){
        return userService.findAll();
    }

    //1.参数名称必须与url中的名称一致
    //2.SpringMVC可以根据用户的需求,自动实现类型的转换
        //底层实现,SpringMVC可以根据用户的参数类型,自动实现类的转化,
    @GetMapping("findUserById")
    public User findUserById(Integer id){
        return userService.findUserById(id);
    }

    @GetMapping("findByUser")
    public User findUserById(User user){
        return userService.findByUser(user);
    }
}

jar包的继承/导入

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.3</version>
        <relativePath/>
    </parent>

    <properties>
        <!--指定JDK版本-->
        <java.version>1.8</java.version>
        <!--跳过测试类打包-->
        <skipTests>true</skipTests>
    </properties>

    <!--按需导入
        历史说明: 2010 原来SSM 需要手动的编辑大量的的配置文件
        思想: SpringBoot使用体现了"开箱即用"的思想
    -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <!--Springboot的启动器 在内部已经将整合的配置写好,实现拿来就用-->
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!--支持热部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

        <!--引入插件lombok 自动的set/get/构造方法插件  -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!--引入数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!--springBoot数据库连接  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!--spring整合mybatis-plus 删除mybatis的包 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.3</version>
        </dependency>

    </dependencies>

 配置文件application.yml

#是一个特殊的文件,特殊在这个文件将被springboot框架自动加载-开箱即用
#格式非常严格,k: v
#端口配置
server:
  port: 8090
#配置数据源

#SpringBoot配置mysql信息
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/jt?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
#SpringBoot整合Mybatis配置
mybatis-plus:
  #定义别名包
  type-aliases-package: com.jt.pojo
  #指定UserMapper.xml文件的位置
  #地址位置要填入相对对应地址
  mapper-locations: classpath:/mappers/*.xml
  #mapper-locations: classpath*:/*.xml 强制扫描外面的包的配置文件

  #开启驼峰映射
  #mybatis 功能1:可以实现结果集和实体对象的映射
    #对象与表一一对应
    #对象中的属性对象与表中的字段 一一对应
    #User(userId,userName)
    #User表(user_id,user_name)
    #resulttype:不能映射
    #resultMap金可以映射
    #简化上述操作引入驼峰规则

    #思考,开启驼峰规则如下是否可以映射?
    #User(user_id,user_name)
    #ser表(user_id,user_name)

  configuration:
    map-underscore-to-camel-case: true
#打印sql语句
logging:  #日志
  level:  #等级
     com.jt.mapper: debug #为com.jt.mapper的执行打印日志

启动层RunApp

@SpringBootApplication
@MapperScan(value = "com.jt.mapper")
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class, args);
    }
}

模型层(pojo)

//序列化作用,保证对象网络传输的有效性!!!!

//1.将对象与表进行关联
//规则,1.如果表名与类中的名一致,则可省略不写
//     2.对项名与属性名如果一直,则注解可以省略不写
@TableName("demo_user")
public class User implements Serializable{//固定写法

    //2.主键自增/非空/UUID
    //UUID生成唯一编号
    @TableId(type = IdType.AUTO,value = "id")
    private Integer id;

    //3.标识属性与字段的映射
    //@TableField("name")
    private String name;
    private Integer age;
    private String sex;
}

 持久层(mapper/dao)

//规则1:继承basemap时,不许添加面向目标的泛型对象
//规则2:自己的方法不要与接口方法重名
public interface UserMapper extends BaseMapper<User> {
    //@Mapper //将该接口交给Spring管理,spring创建对象
    User find(User user);
    List<User> find();
}

服务层(service)接口文件

@Service
public interface UserService {
    List<User> findAll();
}

 服务层(service)实现文件

@Service
public class UserServiceImpl implements UserService{
    @Autowired
    private UserMapper userMapper;


    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }
}

完成前后端的测试

查询案列

浏览器输入地址:http://localhost:8090/findAll                                查询全部数据

                             http://localhost:8090/findUserById?id=10            查询id=10的数据

要求利用mp查询数据库返回集合的JSON数据

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
# 基于springboot家政服务管理系统 > 这是一款基于springboot 2.1.8.RELEASE,Vue.js的前后端分离的家政服务管理系统。 - 采用前后端分离架构,前端Vue.js,后端SpringBoot,各司其职。 - 前后端通过swagger API进行交互。 - 无需手写SQL,使用Mybatis-generator作为持久层orm框架。 - 使用travis完成自动构建、测试、推送镜像实现高度自动化。 - 开箱即用,没有复杂的业务,是学习拓展的不二之选。 ## 目的 > 随着互联网行业的发展,开发技术也在不断更新,格式各样的技术体系层出不穷。作为一个开发人员,我们会不断的进行新技术的学习与实践。但如果每次只是单纯的学习,没有实际应用的话,则没有太大的意义。我们需要一个项目将日常中所用和所学整合起来,以便后续有需要可以直接上手。 如果忘记,也可以温故而知新,所以诞生了Lustre这个项目,这个项目没有复杂的业务为的是学习拓展更加方便。但“麻雀虽小,五脏俱全”,以真正的企业级项目作为标准,最终开发而成。 希望大家可以利用此项目更好的学习springboot、Vue.js等相关技术栈。丰富前后端分离架构经验,更好的了解前后端分离项目的交互运作。 ## #### 后端: - spring-boot - spring-boot-actuator - undertow - swagger - MySQL - spring-Mybatis - travis CI - 流式、链式编程 - ... #### 前端:(待总结) ##快速上手 #### 使用前须知: 1. 本项目由于使用Mybatis作为持久层orm框架,所以并没有建表sql,项目目录中自然也就没有Sql脚本文件。 2. 默认配置使用的数据库为MySQL。MySQL是一款内存数据库,轻盈便利,适合轻量级项目使用,且方便测试。 #### 使用操作 ​ 即拿即用,操作简便。 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sayhitoloverOvO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值