浅谈ssm框架分层逻辑

第一次接触ssm的时候感觉自己就是个无情的码字机器,完全跟着老师敲,每一行代码在干嘛都不是很理解,也经常看到这样的哀嚎
20200704122914927
研究了一天后我也算是对这个框架有了一些浅薄的认识,这里我就完全用自己的理解来讲一下,如果说错欢迎指出。
ssm(Spring+SpringMVC+MyBatis)是什么就不多说了,相信很多人都是用了它之后才知道它的好处

ssm项目分层

目前所有企业基本都采用的这种分层标准,这种分层标准的好处就是让项目看起来整齐划一,每层都负责做自己的事情,方便开发者对代码进行管理与调试,让代码的可读性更强。一般无论是在学校还是在培训班都会首先跟你讲分哪些层和每个层的作用,作为刚入门的初学在编写几个完整项目之前者确实很难理解,去网上搜的解释又都太官方难懂,同样作为初学者的我在编写了一个项目研究了一天之后对这个分层终于有了比较浅薄的理解。

bean层

bean层:存放数据表转化的类。
比如你数据库的表叫tb_user,那就在bean层下面创建一个User的类,把数据库中需要用到的字段全部写进去。
比如你数据库中字段是这样的:
20200704115755708
那么你创建的User类就这样写(属性+get+set方法,构造方法和ToString也推荐写进去):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class User {
private int id;
private String username;
private String password;

public int getId() {
return id;
}

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

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

dao层

持久层(Dao层):主要负责与数据库进行交互,一般为接口,简单说就是对数据库进行增删改查。写好之后去Mapper.xml里配置和写sql语句。这个层最好理解,你需要数据库中的哪些功能就写哪些方法,而且先不需要去考虑去怎么实现,因为实现属于业务层的范畴了,这里只需无脑写方法就好了,这也体现出ssm框架分层的好处,东西先有,之后再实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public interface UserDao {
List<User> findAll(@Param("start") int start, @Param("username") String username);

User findUserByUserName(String username);

void deleteById(int id);

void add(User user);

void UserById(int id);

User selectById(int id);

void update(User user);

int getTotalCount();

List<User> fuzzyFindByUsername(@Param("start") int start, @Param("username") String username);

}

service层

业务层(service层):这一层是最抽象的也是最难理解的,我对业务层的理解是它负责项目的核心业务,比如登录、注册、这些都是业务,通俗的说就是在业务层中把项目的核心方法都写出来,首先定义一个业务层的接口,然后用实现类去实现它,在这个实现类中调用DAO层的方法以对数据库进行增删改查,这样就直接把Spring模块和Mybatis模块串起来了,这样说是不是很明白了,举个简单的例子,现在要实现登录功能,那要在service的实现类里面首先写一个dao层的对象(以调用MYbatis模块,对数据库增删改查)。
然后在下面的登录方法中调用dao层,实际上就是调用到了数据库,判断用户是否存在,然后再对这个方法完善,判断密码是否正确,就用ssm实现了这样一个简单的登录逻辑。

1
2
3
4
5
6
7
8
9
10
11
@Autowired
private UserDao userDao;

@Override
public boolean login(String username, String password) {
User user = userDao.findUserByUserName(username);//调用MYbatis模块
if (user != null && user.getPassword().equals(password)) {
return true;
}
return false;
}

Controller层

前面两个模块都已经写好了,那现在差的就是再网页中如何把我们的刚才的登录信息显示出来,这里就用到了控制层(controller层):属于springMVC模块,控制web访问,这一层也不难理解,它要与视图层联系起来,即前端页面发送请求,控制层接收请求并处理,最后返回数据到前端。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Autowired
private IUserService userService;

@RequestMapping("/login.do")
public ModelAndView login(User user, HttpSession session) {
boolean flag = userService.login(user.getUsername(), user.getPassword());
ModelAndView modelAndView = new ModelAndView();
if (flag) {
session.setAttribute("user", user);
modelAndView.setViewName("main");//登陆成功进入main.jsp
} else {
modelAndView.setViewName("../failer");//失败进入拦截器
}
return modelAndView;
}

视图层(view层):view层不需要单独建一个叫view的package来单独存放,直接放在webapp下面,这个层最简单,其实就是存放前端的网页,一般为jsp,html格式。。

结构图

图片转自https://blog.csdn.net/qq_38685503/article/details/88022904![20200704143030291](https://gist.github.com/assets/67999981/1361dc9f-387d-432a-9d9a-2896a58183a6)

目录

20200704142029799
当然,这只是最基础的分层,实际项目中往往还需要拦截器(filter层)等等按需求增加分层就好,总之记住一点,初学者可以先按照这个分层去写,哪怕不理解也要把每一层是干什么的,有哪些东西都要记住,写多了就对这些了如指掌了。