好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

关于SSM框架下各层的解释说明(Controller等)

SSM框架

SSM框架是spring MVC ,Spring和Mybatis框架的整合,是标准的MVC模式,将整个系统划分为表现层(web),controller层,service层,dao层四层,使用spring MVC负责请求的转发和视图管理。

Spring实现业务对象管理,Mybatis作为数据对象的持久化引擎。

表现层(web): 通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 业务逻辑层(service): 针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 数据访问层(dao): 该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。

DataBase ===> Entity ===> Mapper.xml ===> Dao.Java ===> Service.java ===> Controller.java ===> html css js(thymeleaf)

各层解释说明

用IDEA创建一个maven项目结构如左图所示,在该项目中,有五个包,分别是controller、dao、entity、service和serviceimpl:

层 描述
实体层 数据库在项目中的类,主要用于定义与数据库对象应的属性,提供get/set方法,tostring方法,有参无参构造函数。
持久层 与数据库交互,dao层首先会创建dao接口,接着就可以在配置文件中定义该接口的实现类;接着就可以在模块中调用dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一个类,dao层的数据源和数据库连接的参数都是在配置文件中进行配置的。
业务层 控制业务,业务模块的逻辑应用设计,和dao层一样都是先设计接口,再创建要实现的类,然后在配置文件中进行配置其实现的关联。接下来就可以在service层调用接口进行业务逻辑应用的处理。
实现层 实现service接口的所有方法,整合service和dao
控制层 controller层主要调用Service层里面的接口控制具体的业务流程,控制的配置也要在配置文件中进行。Controller和Service的区别是:Controller负责具体的业务模块流程的控制;Service层负责业务模块的逻辑应用设计

entity层(model层)

实体层用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法。

1.导入lombok小辣椒驱动依赖,用来生成get/set方法依赖:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package com.dvms.entity;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import lombok.ToString;

import lombok.experimental.Accessors;

import java.util.Date;

@Data

@ToString

@AllArgsConstructor

@NoArgsConstructor

@Accessors (chain = true ) //链式调用

public class Emp {

     private String id;

     private String name;

     private Double salary;

     private Integer age;

     private Date bir;

}

2.传统方式

?

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

package com.umf.entity;

import java.io.Serializable;

public class UpdataSettingEntity implements Serializable {

     private static final long serialVersionUID = 1L;

     //

     private Integer id = 1 ;

     //

     private int updataflag;

     /**

      * 设置:

      */

     public void setId(Integer id) {

         this .id = id;

     }

     /**

      * 获取:

      */

     public Integer getId() {

         return id;

     }

     /**

      * 设置:

      */

     public void setUpdataflag( int updataflag) {

         this .updataflag = updataflag;

     }

     /**

      * 获取:

      */

     public int getUpdataflag() {

         return updataflag;

     }

}

dao层(mapper层)

dao层(接口类)对数据库进行数据持久化操作,他的方法语句是直接针对数据库操作的,主要实现一些增删改查操作,在Mybatis中方法主要与与xxxDao(Mapper).xml内相互一一映射。

Mybatis可以用.xml进行数据操作,也可以在dao层用注解的方式,也可以采取xml和dao层接口组合使用的方法(常用)。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

package com.dvms.dao;

import com.dvms.entity.User;

import org.apache.ibatis.annotations.Param;

import org.springframework.stereotype.Repository;

import java.util.List;

@Repository

public interface UserDao {

     //登录

     User login( @Param ( "username" ) String username, @Param ( "password" ) String password); // 在mybatis中传递多个参数要做参数的绑定

     //新增用户(注册)

     void save(User user);

     //查询所有用户

     List<User> findAlluser();

     //删除用户

     void delete(String id);

     //修改用户信息(先查再改)

     User update(String id);

     void add(User user);

}

xxxDao(Mapper).xml:

关键: < mapper namespace=[com.dvms.dao.UserDao]>

前提:基本数据库语法

?

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

<? 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.dvms.dao.UserDao" >

<!--注册/新增用户-->

     < insert id = "save" parameterType = "User" >

         insert into user (id,username,password,sex,phone,email,role) values (#{id},#{username},#{password},#{sex},#{phone},#{email},#{role})

     </ insert >

<!--登录验证-->

     < select id = "login" resultType = "User" >

         select id,username,password,sex,phone,email,role from user

         where username =#{username} and password =#{password}

     </ select >

<!--查询所有用户-->

     < select id = "findAlluser" resultType = "User" >

         select id,username,password,sex,phone,email,role from user

     </ select >

<!--删除用户-->

     < delete id = "delete" parameterType = "String" >

         delete from user where id=#{id}

     </ delete >

<!--修改用户信息-->

     <!--查到要修改的用户信息-->

     < select id = "update" parameterType = "String" resultType = "User" >

         select id,username,password,sex,phone,email,role from user where id=#{id}

     </ select >

     <!--修改用户信息-->

     < update id = "add" parameterType = "User" >

         update user set username=#{username},password=#{password},sex=#{sex},phone=#{phone},email=#{email},role=#{role} where id=#{id}

     </ update >

</ mapper >

在dao层用注解的方式:

?

1

2

3

4

5

public interface StudentDao {

    

     @Select ( "select * from student where stu_id=#{stuId}" )

     public Student queryById( int stuId);

}

service层

service层(接口类)为controller层的类提供接口进行调用,一般就是自己写的方法封装起来,具体实现在serviceImpl中。

service层是建立在dao层之上的,建立了dao层后才可以建立service层,而service层又是在controller层之下的,因而service层应该既调用dao层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个service接口,每个接口分别封装各自的业务处理方法。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package com.dvms.service;

import com.dvms.entity.User;

import java.util.List;

public interface UserService {

     //新增用户

     void save(User user);

     //登录

     User login(String username, String password);

     //查询所有用户

     List<User> findAlluser();

     //删除用户

     void delete(String id);

     //修改用户信息

     User update(String id);

     void add(User user);

}

servicedmpl(实现service层,整合service和dao)(导入dao层)(接口实现类)

?

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

package com.dvms.service.Impl;

import com.dvms.dao.UserDao;

import com.dvms.entity.User;

import com.dvms.service.UserService;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

import java.util.UUID;

@Service

public class UserServiceImpl implements UserService {

     @Autowired

     private UserDao userDao;

     @Override

     public void save(User user) {

         user.setId(UUID.randomUUID().toString());

         userDao.save(user);

     }

     @Override

     public User login(String username, String password) {

         return userDao.login(username,password);

     }

     @Override

     public List<User> findAlluser() {

         return userDao.findAlluser();

     }

     @Override

     public void delete(String id) {

         userDao.delete(id);

     }

     @Override

     public User update(String id) {

         return userDao.update(id);

     }

     @Override

     public void add(User user) {

         userDao.add(user);

     }

}

Controller层(web 层)

负责具体模块的业务流程控制(获取参数(前端传过来)返回响应(前端或数据库或一个指定路径)),需要调用service逻辑设计层的接口来控制业务流程(导入service层)。

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

package com.dvms.controller;

import com.dvms.entity.Emp;

.....

@Controller

public class EmpController {

     @Autowired

     private EmpService empService;

     @GetMapping ( "emp/findAll" )

     public String findAll( @RequestParam (defaultValue = "1" ) int pageNum,

                           @RequestParam (defaultValue = "5" ) int pageSize,

                           Model model){

         PageHelper.startPage(pageNum,pageSize); //

         PageInfo<Emp> pageInfo = new PageInfo<>(empService.findAll());

         model.addAttribute( "pageInfo" ,pageInfo);

//        List<Emp> emps = empService.findAll();

//        model.addAttribute("emps",emps);

         return "ems/tables" ;

     }

     @RequestMapping ( "/emp/save" )

     public String save(Emp emp){

         empService.save(emp);

         return "redirect:/emp/findAll" ;

     }

}

Controller层调用了Service层的接口方法,Service层调用Dao层的方法,其中调用的参数是使用Entity层进行传递的。View层与Controller层协同工作,主要负责界面展示。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/cjw12581/article/details/107430183

查看更多关于关于SSM框架下各层的解释说明(Controller等)的详细内容...

  阅读:20次