SpringBoot从小白到大牛——第三节 MVC三层模式开发流程

MVC三层模式

转自https://www.cnblogs.com/zdxster/p/5305187.html

在这里插入图片描述

在Web MVC模式下,模型无法主动推数据给视图,如果用户想要视图更新,需要再发送一次请求(即请求-响应模型)。

M:(Model) 模型 : 应用程序的核心功能,管理这个模块中用的数据和值;

V(View )视图: 视图提供模型的展示,管理模型如何显示给用户,它是应用程序的外观;

C(Controller)控制器: 对用户的输入做出反应,管理用户和视图的交互,是连接模型和视图的枢纽。

MVC用于将web(UI)层进行职责解耦

Controller-Service-DAO-Mapper.xml

逐级调用关系。dao数据包命名方式不同,也可写为mapper数据包。

Controller类前面加@RestController

Service类前面加@Service

Could not find result map com.snow.helloworld.model.entity.OrderRecord

问题原因:mapper.xml文件里错误写成

<select id="selectAll" resultMap="com.snow.helloworld.model.entity.OrderRecord">
     select <include refid="Base_Column_List"></include>
     from order_record
</select>

正确写法

<select id="selectAll" resultMap="BaseResultMap">
        select <include refid="Base_Column_List"></include>
        from order_record
    </select>

Spring+MyBatis向数据库插中文字符,乱码

解决方法:
步骤一:application.properties中数据库配置如下:

datasource.url=jdbc:mysql://localhost:3306/db_springboot_teach_02?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

步骤二:在类前面加上consumes代码

@RequestMapping(value = "/save",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE)

Spring整合Mybatis的步骤

步骤一:加载依赖jar包,Druid、Mysql、Springboot-Mybatis起步依赖、PageHelper分页插件。
步骤二:配置数据库源和数据库连接池,添加在application.properties或application.yml。
步骤三:加入entity,mapper,mappers资源文件,放置model模块中,参见MVC三层的代码,并在启动类中配置MapperScan,明确启动类扫描mapper所在包。

启动类无法扫描到mapper所在包

解决方法:
在application.properties添加如下配置

mybatis.mapper-locations = classpath:mappers/*.xml
mybatis.type-aliases-package=com.snow.helloworld.model.entity

增加前端显示页面View

步骤一:在application.properties添加如下配置

#视图解析器
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp

步骤二:
在main目录下创建webapp/WEB-INF/views文件夹,使用File-New-Project-Java-Java EE-Web Application创建。
在该文件夹下创建一个jsp文件,填写内容,参照模板

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<c:set var="ctx" value="${pageContext.request.contextPath}" ></c:set>
<script type="text/javascript">

</script>
<title>Insert title here</title>
</head>
<body>
    这是个jsp页面<br/>

    id: ${record.id}  <br/>
    orderNo: ${record.orderNo} <br/>
    orderType: ${record.orderType}
</body>
</html>

步骤三:在controller中编写代码,向前端填内容

@RequestMapping(value = prefix+"/index/v2",method = RequestMethod.GET)
    public String indexV2(Integer id, ModelMap modelMap){
        OrderRecord record=orderRecordMapper.selectByPrimaryKey(id);
        modelMap.addAttribute("record",record);
        return "orderRecord";
    }

modelMap.addAttribute(“record”,record);
这句是关键,将sql查的结果,赋给record上,前端可以调用。其中,modelMap在函数参数里声明的。

整合前端页面

步骤一:在src/main下创建webapp文件夹,并在File->Project Structure中设置Web Resource Directory
在这里插入图片描述
步骤二:在webapp文件夹下创建WEB-INF/views文件夹,并新建一个index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <c:set var="ctx" value="${pageContext.request.contextPath}" ></c:set>
    <script type="text/javascript">

    </script>
    <title>Insert title here</title>
</head>
<body>
这是个jsp页面<br/>

Time: ${time}
<br>
Message: ${message}

id: ${record.id}  <br/>
orderNo: ${record.orderNo} <br/>
orderType: ${record.orderType}
</body>
</html>

步骤三:pom.xml中添加依赖

<!-- jsp 支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <!--<scope>provided</scope>-->
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
          <!--  <scope>provided</scope>-->
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

步骤四:application.properties中配置

#视图解析器
spring.mvc.view.prefix=/WEB-INF/views
spring.mvc.view.suffix=.jsp

步骤五:Controller控制器中代码

@RestController
public class OrderRecordController {

    private static final Logger log = LoggerFactory.getLogger(HelloWorldController.class);

    @Autowired
    private OrderRecordMapper orderRecordMapper;

    @RequestMapping(value = "/index")
    public String index(){

        return "index1";
    }


    @RequestMapping(value = "/index/{id}")
    public String indexV2(@PathVariable Integer id, ModelMap modelMap){
        try {
            OrderRecord orderRecord = orderRecordMapper.selectByPrimaryKey(id);

            modelMap.addAttribute("record",orderRecord);
            log.info("查询结果:{}",orderRecord);
        }catch (Exception e){
            log.error("显示错误:",e.fillInStackTrace());
        }
        return "indexV2";
    }

    @RequestMapping(value = {"/","/index3"})
    public String indexV3(Map<String, Object> model){
        // 直接返回字符串,框架默认会去 spring.view.prefix 目录下的 (index拼接spring.view.suffix)页面
        // 本例为 /WEB-INF/jsp/index.jsp
        model.put("time", new Date());
        model.put("message", "Hello Jsp");
        return "index";
    }
}

注意:
一是Controller中如果写@Controller,那么@RequestMapping不要写method=RequestMethod.GET;如果写@RestController,那么就无所谓。
二是pom.xml中的jsp依赖,

<dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
          <!--  <scope>provided</scope>-->
        </dependency>

provided要注释掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值