栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记 7-29 springMVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 getUserMapper() {
        RowMapper 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,控制台得到

拦截器前方法......
执行拦截器
拦截器后方法......
拦截器完成方法......
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032339.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号