简介
上一节介绍了 spring boot 项目的搭建,以及集成 mybatis,freemarker 的配置细节,这一节将在之前流程下,继续SSM项目的进一步开发。
主要包括domain,mapper,service,controller,xml文件的编写。
SSM项目结构
SSM目录结构主要包括以下几个部分:
- 数据库建表
- domain:实体类层
- mapper:mybatis接口层
- xml:mybatis映射层
- service及impl:服务层接口及其实现层
- controller:控制层
- 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层常用的注解如下:
- @Controller: 表明该类属于控制层
- @Autowired:表明需要引用下面这个类
- @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
访问该页面即可,结果如下:
转载:https://blog.csdn.net/qq_38292723/article/details/104950923