• SSM整合(细节拉满)|将Mybatis、Spring、SpringMVC三个框架整合起来,通过一个demo来练习


    环境要求

    环境:
    IDEA
    MySQL 5.7.19
    Tomcat 9
    Maven 3.6
    要求:
    需要熟练掌握MySQL数据库,Spring,JavaWeb及MyBatis知识,简单的前端知识;

    数据库环境

    创建一个存放书籍数据的数据库表,并插入一些示例数据

    SSM整合

    新建一个空的Maven项目

    导入相关依赖

    将数据库与IDEA连接起来

    把项目结构建立起来

    applicationContext.xml、mybatis-config.xml

    创建spring的配置文件applicationContext.xml和mybatis的核心配置文件mybatis-config.xml

    database.properties文件用于数据库连接

    创建database.properties配置文件,用于数据库的连接

    mybatis-config.xml中加入类的位置,后面可简化一些操作。

    在pom.xml中加入lombok依赖

    创建一个与数据库表中字段对应的Books类

    编写BookeMapper接口,定义一些相应的增删改查接口

    创建BookeMapper.xml编写对应方法的sql语句

    注册这个Mapper.xml

    在mybatis-config.xml配置文件中注册这个Mapper.xml

    编写Service层接口

    编写Service层接口,增删改查方法与DAO层一致

    编写Service层的具体实现类

    编写Service层的具体实现类,实现刚才的接口,重写方法,用set方法能够方便注入Dao层的对应接口,然后每个方法中,实际上调用的还是Dao层接口的对应方法

    spring跟dao层的配置文件spring-dao.xml

    创建一个spring跟dao层的配置文件spring-dao.xml,右上角关联至我们原先创建的那个关联

    然后将我们之前用来连接数据库的properties文件导入进来,连接池用c3p0,配置数据库账号密码之类的信息

    配置dao接口扫包,动态的实现了Dao接口可以注入到Spring容器中! 

    spring跟Service层的配置文件spring-service.xml

    配置和扫描service下的包,将我们的所有业务类,注入到Spring,可以通过配置,或者注解实现

    这里将刚才的Service层的实现类注册其中,然后通过set方法,将我们dao层的那个接口注入其中。

    spring的核心配置文件applicationContext.xml中引入dao、service层的配置文件

    在spring的核心配置文件applicationContext.xml中引入spring跟dao层的配置文件spring-dao.xml和spring跟Service层的配置文件spring-service.xml


    整合SpringMVC

    添加web支持

    创建SpringMVC的配置文件spring-mvc.xml

    spring的核心配置文件applicationContext.xml中也引入这个配置文件

    在web.xml中配置DispatcherServlet、乱码过滤器以及session

    注意这里绑定的spring-mvc.xml,应该改为applicationContext.xml,如果不改,有的bean找不到

    在配置文件spring-mvc.xml配置映射器、适配器、视图解析器这些,以及扫描controller层的配置

    环境配差不多了正式开启demo

    查询全部书籍

    编写Controller,查询全部书籍,返回到WEB-INF包下(此包下的页面只能通过controller或servlet来访问)的allBook.jsp页面-

    在WEB-INF包下创建这个Controller返回的allBook.jsp页面

    编写首页,写一个调用刚才的查询所有书籍的Controller路由的按钮

    美化Controller返回的allBook.jsp页面

    将Controller存在model中的所有书籍信息list列表用取出来

    进首页点那个按钮再调用刚才的controller返回出allBook.jsp页面

    增加书籍接口

    在allBooke界面加入一个能跳转增加书籍的Controller路由的按钮“新增书籍”

    编写跳转的这个Controller层,以及处理后的跳转页面

    编写新增书籍页面

    在这个页面里写一个能添加新书籍的表单,并准备编写这个表单提交后发给的Controller

    编写表单提交后发给的路由

    把表单输入的每个数据名与Books类的属性名对照,使得提交后,增加书籍的Controller可以直接接收到这些参数。

    编写新增表单提交后发给的Controller,将信息增加到数据库中后,直接重定向到查所有书籍的Controller。

    完成后试一试,添加一个书籍

    提交后,发现重定向回查询所有书籍的页面,并且看到增加成功

    修改书籍接口

    在显示查询出所有书籍的页面,每本书的后面增加修改和删除按钮

    在修改按钮上绑定一个执行修改操作的Controller的路由,并将该书籍的id当成参数传进去

    编写这个跳转的Controller,将这个书籍的改之前的信息查到,存到model里,并跳转到真正要提交更改信息的updateBook.jsp的页面

    创建这个updateBook.jsp页面

    将这个页面里写一个表单,用来提交更改后的书籍信息,这里每个书籍的信息都默认赋值为原本的该id的这个书籍信息,是从我们刚才存的model里取出来的。

    配置这个表单提交后所要执行修改书籍信息的Controller的路由

    最重要的一点是,在提交这一系列修改书籍的信息前,还要将书籍的id,用一个隐藏域给加上,一起传过去,才能使得后面修改操作完成,不然没id,肯定修改不了这本书的信息。

    编写这个Controller,修改信息过后,重定向到查询所有书籍的那个Controller,再通过这个Controller跳转至显示所有书籍的页面。

    演示,点击编号为1书籍的修改操作

    跳到提交修改信息的页面,在中间跳这个页面之前,还穿插了一个查询该id原本信息的Controller,然后才跳转至了这个页面,原本信息被赋值到了这里的每个属性里。

    把书名改了,然后提交修改操作。

    点修改后,这修改的信息以参数的形式,跳转到了修改信息的Controller,然后执行修改操作,重定向至查询所有书籍的Controller,再通过这个Controller跳转到了显示所有书籍的jsp页面。发现信息修改成功。

    删除书籍接口

    在显示所有书籍的jsp页面中的删除按钮前,绑定它所要跳转的执行删除书籍操作的Controller,并携带本书的id为参数。

    编写这个Controller,然后再重定向至查询所有书籍的Controller,进而再跳转到显示所有书籍的jsp页面。

    也可用restful风格

    根据书名查书籍接口

    在显示所有书籍的jsp页面中加一个根据书名查书籍的表单

    绑定提交书籍名称后需要跳转执行根据书名查书籍信息的Controller路由。

    Dao层在接口中新加这个根据书名查书信息的方法

    在Mapper.xml编写该方法的对应sql

    service层的接口中加入该方法

    service层实现类中重写该方法

    编写这个执行根据书名查书籍的Controller

    如果没查到,需要返回,所以再显示所有书籍的jsp页面再加一个显示全部书籍按钮,绑定的还是查询所有书籍的那个Controller路由,方便回去。

    书籍如果查不到,点这个按钮还能回去。

    完善查询书籍的Controller,如果没查到书籍,在model里加一个error信息

    返回后,如果model里有error信息会显示出来

    至此,整合SSM框架以及写一个小的demo顺利完成!!!不容易!!!

  • 相关阅读:
    前端 CSS(一)
    如何提⾼webpack的打包速度?
    小红书和抖音的流量机制是什么?
    对象 和 json 互转 四种方式 json-lib、Gson、FastJson、Jackson
    Python入门(二十四)-文件操作2
    解决Linux磁盘已满
    《算法通关村第一关——链表青铜挑战笔记》
    解决mybatis-plus不能俩表联查分页之手动写分页
    Jetpack:016-Jetpack中的SanckBar
    Oracle GRID管理环境下 不建议禁用OS认证
  • 原文地址:https://blog.csdn.net/weixin_73149966/article/details/133035103