SSM架构代码编写流程及实列

简介

上一节介绍了 spring boot 项目的搭建,以及集成 mybatis,freemarker 的配置细节,这一节将在之前流程下,继续SSM项目的进一步开发。
主要包括domain,mapper,service,controller,xml文件的编写。

SSM项目结构

SSM目录结构主要包括以下几个部分:

  1. 数据库建表
  2. domain:实体类层
  3. mapper:mybatis接口层
  4. xml:mybatis映射层
  5. service及impl:服务层接口及其实现层
  6. controller:控制层
  7. freemarker:静态页面层

本文将按照上述结构编码,结构图如下:在这里插入图片描述

数据库建表

这一步,是所有工作的开始。一般我们会在理清需求之后建表,mysql 数据表管理用 Navicat for Mysql.
我们建立一张用户表,用户记录用户的信息,目前需要的字段如下:id int, name varchar, address varchar; 建表(DDL)语句和表结构如下:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

说明:规范建表语句一般会为表和字段都添加注释和默认值。

domain:实体类层

实体层一般是根据数据库中的表及其字段来建立的,如下:

package com.example.test2.domain;

public class User {
    private Integer id;
    private String name;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

mapper:mybatis接口层

该层是访问数据库的接口,mybatis映射文件的前一层,彼此对应,如下:

package com.example.test2.mapper;

import com.example.test2.domain.User;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
@Mapper
public interface UserMapper {
    public List<User> getUsers();
}

注意:需要加注释表明该接口是一个资源和一个mapper
@Repository @Mapper

xml:mybatis映射层

改成是直接进行数据操作的配置文件,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.example.test2.mapper.UserMapper" >
    <select id="getUsers" resultType="com.example.test2.domain.User">
        select * from user
    </select>
</mapper>

注意: namespace是对应的mapper接口的包名及类名,resultType是对应的返回的实体类的报名及类名。

service及impl:服务层接口及其实现层

service层一般是业务层,用于实现各种业务,由接口层及对应的实现层组成。

package com.example.test2.service;

import com.example.test2.domain.User;

import java.util.List;

public interface UserService {
    public List<User> getUsers();
}
package com.example.test2.service.impl;

import com.example.test2.domain.User;
import com.example.test2.mapper.UserMapper;
import com.example.test2.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public List<User> getUsers() {
        return userMapper.getUsers();
    }
}

注意:在service的实现类必须加注释
@Service,并后用括号表示对应的接口,以供其他类注解引用

controller:控制层

控制层一般用于页面的跳转及访问控制,一般不实现具体业务。

package com.example.test2.controller;

import com.example.test2.domain.User;
import com.example.test2.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;
import java.util.Map;

@Controller
public class UserController   {
    @Autowired
    private UserService userService;

    @RequestMapping("/showAllUsers")
    public String showAllUser(Map<String,Object> map){
        List<User> users = userService.getUsers();
        map.put("datas",users);
        return "showAllUsers";
    }
}

注意:controller层常用的注解如下:

  1. @Controller: 表明该类属于控制层
  2. @Autowired:表明需要引用下面这个类
  3. @RequestMapping:表面该方法需要返回静态资源

freemarker:静态页面层

该层主要放置一些静态模板文件,如下:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div>
    <span>hello world! this is spring boot and  mybatis and freemarker</span>
    <table border="1px">
        <#list datas as user>
            <tr><td>${user.id}</td><td> ${(user.name)!}</td><td>${(user.address)!}</td></tr>
            <!-- 这里由于name、address字段可以为空 所以需要进行非空处理 ,不然会报错 The following has evaluated to null or missing-->
        </#list>
    </table>
</div>
</body>
</html>

调试与结尾

编码完成后即可运行,并输入
http://localhost:8080/showAllUsers
访问该页面即可,结果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值