springboot代码分析

首先把springboot解压,放在了ideaprojects文件下。
创建一个大包com.jdragon.springboot,来表示该项目
该项目下基本的三个部分,分别是controller(控制层:接收所有前台传过来的请求,再把它分配到它需要调的zhiservice里,相当于前后台的入口)、mapper(数据层:写在xml文件里,里面写对应的SQL语句,实现在数据库中怎么查找。)、service(业务层:所有的逻辑在Services里,逻辑,算法,都是由Services构成的)。

下图的pojo.entity包存放用户模板,我觉得是model层(Model:保存着与数据库表所对应的结构体,作用是方便用表的结构体,增加Mapper的易用性,把所有SQL字段变成变量放在里面,根据表结构自动生成)

service中有一个接口:UserService,其中只包含了一个返回user类的方法声明: User queryUser(String name);

service中有一个impl包,包中有一个UserServiceImpl的类,用于实现UserService接口。
UserService代码如下:

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

    @Autowired
    UserMapper2 userMapper2;

    @Override
    public User queryUser(String name) {
        return userMapper.queryUser(name);
    }
}


这段代码声明了一个usermapper实例对象,还声明了一个usermapper2接口。其中usermapper2接口只声明一个方法:List< User> queryAll();,一个返回list集合的方法(usermapper2是mapper的接口)

什么是注解
它提供了一种安全的类似注释的机制,用来将任何 的信息或元数据与程序元素进行关联。为程序的元素加上更直关、更明了的说明,这些说明信息与业务逻辑无关,并且供制定的工具或框架使用。

@Service – service标注业务层组件
这个注解是写在类上面的,标注将这个类交给Spring容器管理,spring容器要为他创建对象.

@autowired – DI注入
这个注解是用来修饰变量的,写在变量上面,并且由系统底层代理创建这个变量的实例,并注入到这个类中,就不用自己手动去创建对象了

只用autowired是会报错的,一般我们要调用哪个service接口时需要加上autowired没错,但前提是得再这个service的实现类上加上service注解,也就是告诉spring,我这个service接口的实现类是这个,你帮我在spring容器里创建它。

在这里插入图片描述

mapper
mapperdingyile一个usermapper类,其中含有一个user的集合数据,还有一个queryUser方法,用于返回user

controller

看一下usercontroller的代码:

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    UserService userService;

    @Autowired
    UserMapper2 userMapper2;

    @GetMapping("/test")
    public String test() {
        return "test";
    }

    @GetMapping("/info")
    public User info(@RequestParam("name") String name){
        return userService.queryUser(name);
    }


    @GetMapping("/queryAll")
    public List<User> queryAll(){
        return userMapper2.queryAll();
    }
}

requestmapping里面的括号,是外部访问路径
你访问的时候,是 ip+端口/拼接上requestMapping和getMapping/postMapping里面的内容

@requestparam(“name”),name是定义请求的参数。 就是 url后面跟着的问号,如:127.0.0.1:8080/user/info/?name=张三&age=18,这个就是等于 传了 name是张三,age是18

然后你在方法上面就要有这个 注解,@RequestParam(“name”) String name,@RequestParam(“age”) Integer age。如果 括号里面的值和你的变量名字一样的话,是可以省略括号的。

@restcontroller这个是什么?
是requestBody加controller。本身这个springmvc是有视图的,就是,他能返回一个html页面。但是我们写接口的时候,不 需要返回页面。因为我们现在做前后分离。然后只需要返回数据 。然后requestBody就是告诉springmvc,这个方法是返回数据的。不是返回视图的。

然后requestBody如果注解在方法上,就是针对某个方法返回数据 。如果注在类上,就是这个类所有方法都是返回数据的。

usermapper.xml

<mapper namespace="com.jdragon.springboot.mapper.UserMapper2">
    <select id="queryAll" resultType="com.jdragon.springboot.pojo.entity.User">
        select username as name from test_user;//mysql语句
    </select>
</mapper>

resulttype:告诉返回值的类型是User
命名空间:是指具体的作用于
id是绑定了queryall()方法与mysql代码,让mysql代码来实现queryall()方法
springboot.yml
配置了服务器的端口号为8080

application.java

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

流程
启动application.java,在浏览器输入127.0.0.1:8080/user/info?name=张三。看到浏览器页面显示{“name”:“张三”},表示部署成功。
分析:
“127.0.0.1:8080/user/info?name=张三”是发送了一个get请求(前台用get,后台用post,post可以发送body参数和param参数,除了这两种参数,还有path参数)
请求首先经过controller层,调用了info方法。
再来到service层,调用queryuser方法。再进到mapper层,真正的调用queryuser方法

再一层一层向上返回,得到数据,也就是@RestController作用的地方。
那个queryall()方法实际上是没有具体实现的,因为是由xml来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值