Erlo

SSM整合

2023-12-07 00:29:14 发布   73 浏览  
页面报错/反馈
收藏 点赞

1、环境搭建

1.1、在project创建新module

image

1.2、选择maven

image

1.3、设置module名称和路径

image

image

1.4、module初始状态

image

1.5、配置打包方式和引入依赖

image

注意:默认的打包方式为 jar,为了能配置web资源,需要将打包方式设置为 war



    4.0.0

    online.liaojy
    spring_springmvc_mybatis
    1.0-SNAPSHOT
    war

    
    
        5.3.1
    

    
        
        
            org.springframework
            spring-context
            ${spring.version}
        
        
        
            org.springframework
            spring-beans
            ${spring.version}
        
        
        
            org.springframework
            spring-web
            ${spring.version}
        
        
        
            org.springframework
            spring-webmvc
            ${spring.version}
        
        
        
            org.springframework
            spring-jdbc
            ${spring.version}
        
        
        
            org.springframework
            spring-aspects
            ${spring.version}
        
        
        
            org.springframework
            spring-test
            ${spring.version}
        
        
        
            org.mybatis
            mybatis
            3.5.7
        
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        
        
        
            com.alibaba
            druid
            1.0.9
        
        
        
            junit
            junit
            4.12
            test
        
        
        
            mysql
            mysql-connector-java
            5.1.49
        
        
        
            log4j
            log4j
            1.2.17
        
        
        
            com.github.pagehelper
            pagehelper
            5.2.0
        
        
        
            ch.qos.logback
            logback-classic
            1.2.3
        
        
        
            javax.servlet
            javax.servlet-api
            3.1.0
            provided
        
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.12.1
        
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        
        
        
            org.thymeleaf
            thymeleaf-spring5
            3.0.12.RELEASE
        
    


1.6、配置web资源目录

image

打开Project Structure,选择对应的module,并为该module创建一个web.xml文件

image

注意:web.xml文件需要放到web资源路径(工程路径srcmainwebapp)下

image

1.7、配置web.xml

image




    

    
    
        org.springframework.web.context.ContextLoaderListener
    

    
    
    
        contextConfigLocation
        classpath:spring.xml
    


    
    
        CharacterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            
            encoding
            UTF-8
        
        
            
            forceEncoding
            true
        
    
    
        CharacterEncodingFilter
        /*
    

    
    
        HiddenHttpMethodFilter
        org.springframework.web.filter.HiddenHttpMethodFilter
    
    
        HiddenHttpMethodFilter
        /*
    


    

    
    
        SpringMVC
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            classpath:springmvc.xml
        
        
        1
    
    
        SpringMVC
        /
    


1.8、创建SpringMVC的配置文件

image




    
    

    
    
        
        
        
            
                
                    
                        
                        
                        
                        
                        
                        
                    
                
            
        
    

    
    

    
    

    
    


1.9、创建请求控制器

image

package online.liaojy.ssm.controller;

import org.springframework.stereotype.Controller;

/**
 * @author liaojy
 * @date 2023/12/3 - 18:32
 */
@Controller
public class EmployeeController {
}

1.10、创建模板目录及页面模板

image

注意:html要引入thymeleaf的约束:xmlns:th="http://www.thymeleaf.org"




    
    首页



index.html

1.11、创建jdbc.properties属性文件

image

注意:本例使用的数据库版本为 MySQL-5 ,因此驱动配置为 com.mysql.jdbc.Driver
如果使用的数据库版本为 MySQL-8 ,驱动配置应该为 com.mysql.cj.jdbc.Driver

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root

1.12、创建MyBatis的核心配置文件

image






    
    

    
    
        
        
        
        
        
        
    

    
    
        
    

    
        
        
    

    
    
        
            
            
                
                
                
                
            
        
    

    
    
        
    


1.13、创建mapper接口

image

package online.liaojy.ssm.mapper;

/**
 * @author liaojy
 * @date 2023/12/4 - 7:00
 */
public interface EmployeeMapper {
}

1.14、创建mapper映射文件

image

注意:mapper映射文件的目录结构和名称要和mapper接口的一致
mapper映射文件的命名空间,也要和mapper接口的全类名一致






1.15、创建Spring的配置文件

image




    
    
        
    

    
    

    
    
        
        
        
        
    

    
    
        
        
    

    
    

    
    

        
        

        
        

        
        

        
        
            
                
            
        

        
        
            
                
                
            
        

        
        

    


    
    
        
        
    


1.16、创建业务层接口及实现类

image

package online.liaojy.ssm.service;

/**
 * @author liaojy
 * @date 2023/12/4 - 20:32
 */
public interface EmployeeService {
}

image

package online.liaojy.ssm.service.impl;

import online.liaojy.ssm.service.EmployeeService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * @author liaojy
 * @date 2023/12/4 - 20:34
 */
@Service
@Transactional
public class EmployeeServiceImpl implements EmployeeService {
}

1.17、创建日志文件log4j.xml

image




    
        
        
            
        
    
    
        
    
    
        
    
    
        
        
    

1.18、配置tomcat

image

image

image

1.19、测试效果

image

image

2、实战案例

2.1、创建表

image

CREATE TABLE `t_emp` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(20) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`sex` char(1) DEFAULT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.2、插入数据

image

insert into t_emp (emp_name,age,sex,email) values ('a',18,'男','11@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('b',19,'男','22@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('c',20,'男','33@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('d',21,'男','44@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('e',22,'男','55@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('f',23,'男','66@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('g',24,'男','77@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('h',25,'男','88@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('i',26,'男','99@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('j',27,'男','00@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('k',28,'男','111@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('l',29,'男','222@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('m',30,'男','333@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('n',31,'男','444@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('o',32,'男','555@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('p',33,'男','666@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('q',34,'男','777@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('r',35,'男','888@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('s',36,'男','999@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('t',37,'男','000@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('u',38,'男','1111@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('v',39,'男','2222@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('w',40,'男','3333@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('x',41,'男','4444@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('y',42,'男','5555@qq.com');
insert into t_emp (emp_name,age,sex,email) values ('z',43,'男','6666@qq.com');

image

2.3、创建实体类

image

package online.liaojy.ssm.pojo;

import java.io.Serializable;

/**
 * @author liaojy
 * @date 2023/12/4 - 23:06
 */
public class Employee implements Serializable {

    private Integer empId;
    private String empName;
    private Integer age;
    private String sex;
    private String email;

    public Employee() {
    }

    public Employee(Integer empId, String empName, Integer age, String sex, String email) {
        this.empId = empId;
        this.empName = empName;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public Integer getEmpId() {
        return empId;
    }

    public void setEmpId(Integer empId) {
        this.empId = empId;
    }

    public String getEmpName() {
        return empName;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empId=" + empId +
                ", empName='" + empName + ''' +
                ", age=" + age +
                ", sex='" + sex + ''' +
                ", email='" + email + ''' +
                '}';
    }

}

2.4、持久层

image

    /**
     * 查询所有员工信息
     * @return
     */
    List getAllEmployee();

image

    
    

2.5、业务层

image

    /**
     * 查询所有员工信息
     * @return
     */
    List getAllEmployee();

image

    @Autowired
    EmployeeMapper employeeMapper;

    public List getAllEmployee() {
        return employeeMapper.getAllEmployee();
    }

2.6、控制层

image

    @Autowired
    EmployeeService employeeService;

    @GetMapping("/employee")
    public String getAllEmployee(Model model){
        // 查询所有员工信息
        List employees = employeeService.getAllEmployee();
        //将员工信息共享到请求域
        model.addAttribute("employees",employees);
        //跳转到员工列表页面employee_list.html
        return "employee_list";
    }

2.7、页面视图

image




    
    员工列表



员工列表
序号 员工id 员工姓名 员工年龄 员工性别 员工邮箱 操作(添加员工)
修改员工 删除员工

2.8、添加访问入口

image

查询所有员工信息

2.9、测试效果

image

image

3、分页优化

3.1、业务层

image

    /**
     * 分页查询所有员工信息
     * @param pageNum
     * @return
     */
    PageInfo getAllEmployeeWithPage(Integer pageNum,Integer pageSize);

image

    public PageInfo getAllEmployeeWithPage(Integer pageNum,Integer pageSize) {

        // 在查询之前,开启分页功能,并设置当前页的页码和每页的数据条数
        PageHelper.startPage(pageNum,pageSize);

        // 查询所有的员工信息()
        // 分页插件会在查询前先进行拦截,添加相关的sql分页代码后(因此在mapper映射文件编写的sql不能使用分号结束),再放行
        List employees = employeeMapper.getAllEmployee();

        // 根据分页数据(employees)和分页导航的页码数(navigatePages),创建分页数据对象
        PageInfo employeePageInfo = new PageInfo(employees, 5);

        return employeePageInfo;
    }

3.2、控制层

image

    @GetMapping(value = {"/employee/page/{pageNum}","/employee/page/{pageNum}/{pageSize}"})
    public String getAllEmployeeWithPage(Model model,
                                         @PathVariable("pageNum") Integer pageNum,
                                         @PathVariable(value = "pageSize",required = false) Integer pageSize){
        // 判断请求中是否有设置每页的数据条数,没有的话就给一个默认值
        if (pageSize == null){
            pageSize = 4;
        }
        // 根据当前页的页码,分页查询所有员工信息
        PageInfo employeePageInfo = employeeService.getAllEmployeeWithPage(pageNum,pageSize);
        //将分页数据共享到请求域
        model.addAttribute("employeePageInfo",employeePageInfo);
        //跳转到员工列表分页的页面employee_page.html
        return "employee_page";
    }

3.3、页面视图

image

关于分页数据对象的属性细节,请参考12.3.3.1节




    
    员工列表



员工列表
序号 员工id 员工姓名 员工年龄 员工性别 员工邮箱 操作(添加员工)
修改员工 删除员工

3.4、添加访问入口

image

分页查询所有员工信息

3.5、测试效果

image

image

如上图所示,当前页为第一页,所以在分页导航中没有“首页”和“上一页”,对应的页码带有中括号且标红

image

如上图所示,当前页为第二页,所以在分页导航中有“首页”和“上一页”,对应的页码带有中括号且标红

image

如上图所示,当前页为最后一页,所以在分页导航中没有“下一页”和“末页”,对应的页码带有中括号且标红

本文来自博客园,作者:Javaer1995,转载请注明原文链接:https://www.cnblogs.com/Javaer1995/p/17858710.html

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认