Java学习笔记 7-29 springMVC

springmvc

1. Spring MVC 概述

数据模型(Model),视图(View),控制器(Controller)

HTTP请求发送到控制器,控制层与业务层数据模型进行交互、获取数据,使用视图响应请求。

2. 使用 @RequestMapping映射请求

Controller层通过@RequestMapping映射请求:

package com.example.demo.controller;

import com.example.demo.pojo.User;
import com.example.demo.service.JdbcService;
import com.example.demo.service.JdbcTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.sql.SQLException;
import java.util.List;

@Controller
@RequestMapping("/jdbc")
public class JdbcController {

    @Autowired
    private JdbcTemplateService jdbcService;

    @RequestMapping("/insert")
    @ResponseBody
    public String insert(String id, String name, int age) throws SQLException, ClassNotFoundException {
        User user = new User(name, id, age);
        int i = jdbcService.insert(user);
        String msg = "新增了" + i + "条数据";
        return msg;
    }

    @RequestMapping("/update")
    @ResponseBody
    public String update(String id, String name, int age) throws SQLException, ClassNotFoundException {
        User user = new User(name, id, age);
        int i = jdbcService.update(user);
        String msg = "更新了" + i + "条数据";
        return msg;
    }

    @RequestMapping("/delete")
    @ResponseBody
    public String delete(String id) throws SQLException, ClassNotFoundException {
        int i = jdbcService.delete(id);
        String msg = "删除了" + i + "条数据";
        return msg;
    }

    @RequestMapping("/search")
    @ResponseBody
    public User search(String id) throws SQLException, ClassNotFoundException {
        User user = jdbcService.search(id);
        return user;
    }
}

服务层编写服务接口:

package com.example.demo.service;

import com.example.demo.pojo.User;

import java.util.List;

public interface JdbcTemplateService {
    public User search(String id);
    public int insert(User user);
    public int update(User user) ;
    public int delete(String id);
}

服务层接口实现类:

package com.example.demo.service.impl;

import com.example.demo.pojo.User;
import com.example.demo.service.JdbcTemplateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;

import java.sql.ResultSet;

@Service
@Slf4j
public class JdbcTemplateServiceImpl implements JdbcTemplateService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    // 获取映射关系
    private RowMapper<User> getUserMapper() {
        RowMapper<User> userRowMapper = (ResultSet rs, int rownum) -> {
            User user = new User();
            user.setId(rs.getString("id"));
            user.setName(rs.getString("name"));
            user.setAge(rs.getInt("age"));
            return user;
        };
        return userRowMapper;
    }

    @Override
    public User search(String id) {
        String sql = " select * from user where id = ?";
        User user = jdbcTemplate.queryForObject(sql, getUserMapper(), id);
        log.info("查询到数据" + user.toString());
        return user;
    }

    @Override
    public int insert(User user) {
        String sql = " insert into user values( ?, ?, ?)";
        int i = jdbcTemplate.update(sql, user.getName(), user.getId(), user.getAge());

        return i;
    }

    @Override
    public int update(User user) {
        String sql = " update user set name = ?, age = ? where id = ?";
        return jdbcTemplate.update(sql, user.getName(), user.getAge(), user.getId());
    }

    @Override
    public int delete(String id) {
        String sql = " delete from user where id = ?";
        return jdbcTemplate.update(sql, id);
    }
}

启动服务器,浏览器访问http://localhost:8080/jdbc/insert?id=111&name=R&age=1,得到:

 新增了1条数据

3. 视图和视图解析器、处理方法的数据绑定

视图解析器通过路径定位到视图,视图将数据模型进行渲染亿响应用户的请求。

数据绑定

方法声明的参数可以与请求参数中名称相同的属性进行绑定

@RequestMapping("/insert")
@ResponseBody
// 方法参数中的id,name,age可以与请求参数中的id,name,age绑定
// http://localhost:8080/jdbc/insert?id=111&name=R&age=1
public String insert(String id, String name, int age) {
   User user = new User(name, id, age);
   int i = jdbcService.insert(user);
   String msg = "新增了" + i + "条数据";
   return msg;
}

绑定数组:

    @RequestMapping("/list")
    public String printUser(Long[] ids) {
        return "ok";
    }
    // http://localhost:8080/user/list?ids=111,222,333

4. JSON处理

对于较复杂的数据,可以通过将数据封装成数据类进行json传递

使用@RequestBody注解可以接受从前端接收的json数据,json会根据字符串中的key来匹配对应实体类的属性。

    @RequestMapping("/print")
    public String (@RequestBody User user) {
        System.out.println(user);
        return "ok";
    }

5. 拦截器学习

自定义拦截器:

package com.example.demo.interceptor;


import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器前方法......");
        // 返回true,不会拦截后续处理
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器后方法......");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器完成方法......");
    }
}

拦截器控制方法:

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/interceptor")
public class InterceptorController {

    @RequestMapping("/start")
    @ResponseBody
    public String start() {
        System.out.println("执行拦截器");
        return "Over";
    }
}

注册拦截器:

package com.example.demo;

import com.example.demo.interceptor.MyInterceptor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.format.FormatterRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@SpringBootApplication
public class DemoApplication implements WebMvcConfigurer {

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

	// 注册拦截器

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		InterceptorRegistration interceptor = registry.addInterceptor(new MyInterceptor());
		interceptor.addPathPatterns("/interceptor/*");
	}
}

启动服务器,访问http://localhost:8080/interceptor/start,控制台得到

拦截器前方法......
执行拦截器
拦截器后方法......
拦截器完成方法......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值