SSM框架整合

SSM框架整合

一、idea创建项目

1.创建普通的maven项目然后next

SSM框架整合

SSM框架整合

建完之后的第一件大事就是项目改成UTF-8编码:

SSM框架整合

2.maven导入相关的pom依赖

pom.xml:


            junit
            junit
            4.13.2

            mysql
            mysql-connector-java
            8.0.24

            com.mchange
            c3p0
            0.9.5.2

            javax.servlet
            servlet-api
            2.5

            javax.servlet.jsp
            jsp-api
            2.2

            javax.servlet
            jstl
            1.2

            org.mybatis
            mybatis
            3.5.7

            org.mybatis
            mybatis-spring
            2.0.6

            org.springframework
            spring-webmvc
            5.3.6

            org.springframework
            spring-jdbc
            5.3.6

            org.projectlombok
            lombok
            1.18.20

            com.fasterxml.jackson.core
            jackson-databind
            2.12.3

            org.aspectj
            aspectjweaver
            1.9.6

            log4j
            log4j
            1.2.17

如果是连Oracle数据库的话,直接把数据库驱动的依赖换掉就行了:


            com.oracle
            ojdbc6
            11.2.0.3

3.maven资源过滤设置

pom.xml:


                src/main/resources

                    **/*.properties
                    **/*.xml

                true

                src/main/java

                    **/*.properties
                    **/*.xml

                true

二、连接数据库、创建配置文件

连接数据库:

SSM框架整合

创建文件:

SSM框架整合

创建mybatis-config.xml:


创建applicationContext.xml:


applicationContext.xml是spring的配置文件,可以通过以下进行查看引入的配置文件:

SSM框架整合

SSM框架整合

创建database.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssmbuild?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=填你自个的密码

其中 ssmbuild是数据库名,切记要改!!!

如果是oracle数据库:

jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:XE
jdbc.username=system
jdbc.password=填你自个的

三、Mybatis层

mybatis-config.xml中增加配置:


1. 创建实体类

pojo下按照数据库的表创建实体类 Books:

package com.huang.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Books {
    private int bookID;
    private String bookName;
    private int bookCounts;
    private String detail;
}

其中引入了偷懒神器lombok:

@Data //相当于下图 Getter and Setter
@AllArgsConstructor //相当于下图 Constructor 有参构造
@NoArgsConstructor //相当于无参构造

‘Alt’+’Insert’键呼出如下图:

SSM框架整合

查看引入的效果:

SSM框架整合

2.创建dao接口

在dao下创建BookMapper接口类,并增加需要的增删改查操作:

package com.huang.dao;

import com.huang.pojo.Books;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface BookMapper {
    //增加一本书
    int addBook(Books books);

    //按ID删除
    int deleteBookById(@Param("bookID") int id);

    //按ID修改
    int updateBook(Books books);

    //按ID查询
    Books selectBookById(@Param("bookID") int id);

    //查询所有
    List selectAllBook();

    //按Name查询
    Books selectBookByName(@Param("bookName") String bookName);
}

然后在dao下创建BookMapper.xml写入相关的操作sql语句:


        insert into ssmbuild.books(bookName,bookCounts,detail)
        values(#{bookName},#{bookCounts},#{detail});

        delete from ssmbuild.books where bookID = #{bookID};

        update ssmbuild.books
        set bookName=#{bookName},bookCounts=#{bookCounts},detail=#{detail}
        where bookID=#{bookID};

        select * from ssmbuild.books
        where bookID=#{bookID};

        select * from ssmbuild.books;

        select * from ssmbuild.books where bookName=#{bookName};

如果是oracle数据库,相关的操作sql语句则和mysql稍微有点不同:


        insert into "books"("bookName","bookCounts","detail")
        values(#{bookName},#{bookCounts},#{detail})

        delete from "books" where "bookID" = #{bookID}

        update "books"
        set "bookName"=#{bookName},"bookCounts"=#{bookCounts},"detail"=#{detail}
        where "bookID"=#{bookID}

        select * from "books"
        where "bookID"=#{bookID}

        select * from "books"

        select * from "books" where "bookName"=#{bookName}

然后需要把xml文件绑定到mybatis-config.xml配置文件中:


如果mapper文件和接口的名字不一样,可以用resource引入


3.创建业务层service

service下创建BookService接口:

package com.huang.service;

import com.huang.pojo.Books;

import java.util.List;

public interface BookService {

    //增加一本书
    int addBook(Books books);

    //按ID删除
    int deleteBookById(int id);

    //按ID修改
    int updateBook(Books books);

    //按ID查询
    Books selectBookById(int id);

    //查询所有
    List selectAllBook();

    //按Name查询
    Books selectBookByName(String bookName);
}

service下创建接口的实现类BookServiceImpl类:

SSM框架整合

然后调用接口类,加上 implements BookService'Alt'+'Enter'呼出上图所示选择框,选择 Implement methods继承接口类的所有方法:

package com.huang.service;

import com.huang.pojo.Books;

import java.util.List;

public class BookServiceImpl implements BookService{
    @Override
    public int addBook(Books books) {
        return 0;
    }

    @Override
    public int deleteBookById(int id) {
        return 0;
    }

    @Override
    public int updateBook(Books books) {
        return 0;
    }

    @Override
    public Books selectBookById(int id) {
        return null;
    }

    @Override
    public List selectAllBook() {
        return null;
    }

    @Override
    public Books selectBookByName(String bookName) {
        return null;
    }
}

service要调dao层,所以要组合dao,在类里面加上:

private BookMapper bookMapper;

然后增加它的set方法:

public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
}

然后就可以调用dao层,以addBook业务为例:

@Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

全部改完之后,BookServiceImpl类长这个样子:

package com.huang.service;

import com.huang.dao.BookMapper;
import com.huang.pojo.Books;

import java.util.List;

public class BookServiceImpl implements BookService{

    private BookMapper bookMapper;

    public void setBookMapper(BookMapper bookMapper) {
        this.bookMapper = bookMapper;
    }

    @Override
    public int addBook(Books books) {
        return bookMapper.addBook(books);
    }

    @Override
    public int deleteBookById(int id) {
        return  bookMapper.deleteBookById(id);
    }

    @Override
    public int updateBook(Books books) {
        return  bookMapper.updateBook(books);
    }

    @Override
    public Books selectBookById(int id) {
        return  bookMapper.selectBookById(id);
    }

    @Override
    public List selectAllBook() {
        return  bookMapper.selectAllBook();
    }

    @Override
    public Books selectBookByName(String bookName) {
        return bookMapper.selectBookByName(bookName);
    }
}

四、Spring层

1. 创建spring-dao.xml文件


前面已经创建了ApplicationContext,直接点添加:

SSM框架整合

1.关联数据库配置文件:


2.数据库连接池:


3.sqlSessionFactory配置:


4.配置dao接口扫描包:


2. 创建spring-service.xml文件

1.扫描service下的包:


2.将所有业务类注入到Spring:


如果爆红了,则applicationContext.xml中文件引入:


其实这个配置可以用注解代替:

SSM框架整合

3.声明式事务配置


最后spring-service.xml:


五、SpringMVC层

1. 将项目变成web项目

SSM框架整合

SSM框架整合

SSM框架整合

web.xml中增加:


    springmvc
    org.springframework.web.servlet.DispatcherServlet

        contextConfigLocation
        classpath:applicationContext.xml

    1

    springmvc
    /


    encodingFilter

        org.springframework.web.filter.CharacterEncodingFilter

        encoding
        utf-8

    encodingFilter
    /*

    15

另外在web.xml中加上:


    login.jsp

可以指定默认打开的页面。

2. 创建spring-mvc.xml文件

spring-mvc.xml:


引入到总的applicationContext.xml文件中:

applicationContext.xml:


至此,基本的SSM框架已经全部搭建完成!!!

SSM框架整合

六、实现业务

在框架的基础上,让controller跟jsp交互起来就行了。

1. 创建BookController文件

在controller下创建BookController文件:

package com.huang.controller;

import com.huang.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/book")
public class BookController {
    //controller 调 service 层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

}

以上的 @Qualifier("BookServiceImpl")只有在 四、2.2中加了配置而不是注解才能用。

BookController.java:

@Controller
@RequestMapping("/book")
public class BookController {
    //controller 调 service 层
    @Autowired
    @Qualifier("BookServiceImpl")
    private BookService bookService;

    //查询全部书籍,并且返回到一个书籍展示页面
    @RequestMapping("/allBook")
    public String list(Model model) {
        List books = bookService.selectAllBook();
        model.addAttribute("books", books);
        return "allBook";
    }
}

2. 创建并配置jsp页面

当调用controller层 /book/allBook时根据spring-mvc.xml中配置视图解析器:


我们可以知道return “allBook”;会跳转到 /WEB-INF/jsp/allBook.jsp

我们新建文件:

SSM框架整合

    书籍展示

    书籍展示

于是,我们在index.jsp中:


    $Title$

      进入书籍页面

点击a连接即可发出 /book/allBook请求,启动tomcat9测试一下:

SSM框架整合

SSM框架整合

3. 遇到常见错误

然后一跑就报错: Artifact ssmbuild2:war exploded: Error during artifact deployment. See server log for details.

SSM框架整合

解决办法:

SSM框架整合

SSM框架整合

然后就发现多了一个lib里面有很多jar包:

SSM框架整合

SSM框架整合

SSM框架整合

然后再重新配tomcat就行:

SSM框架整合

最后,保证这些选项,文件结构更好看:

SSM框架整合

Original: https://www.cnblogs.com/BingweiHuang/p/15269467.html
Author: bwh
Title: SSM框架整合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/685018/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 寒冬下的跑路与裁员…

    原创不易,求分享、求一键三连 Hi,各位亲爱的小伙伴,小钗公号遵循日复盘->周复盘->月复盘->季度复盘->年总结策略,所以某类型文章到后期才会成体系。 今…

    技术杂谈 2023年6月1日
    068
  • 猪齿鱼2.0版本重磅发布,解锁更多新特性,提升研发管理效率!

    2022年5月21日,数智化开发管理平台猪齿鱼 Choerodon 发布2.0版本。新增项目计划导入导出、知识库在线协同、需求交付周期统计、钉钉集成等多项功能,全面提升团队工作效能…

    技术杂谈 2023年7月23日
    083
  • Django admin实现TextField字段changelist页面换行、空格正常显示

    问题背景 在Django后台的使用admin view绑定model后,可以很方便的通过网页对底层的数据表进行增删查改操作。在实际工作中有一些数据字段会存储了json或者其他包含换…

    技术杂谈 2023年6月21日
    0106
  • 【SSM框架】Mybatis笔记 – MyBatis 中应用动态代理;#{}占位符与${}占位符;执行DML后返回主键值;UUID

    讲义: 一、动态代理: 1、动态代理存在的意义: 在三层架构中,业务逻辑层要通过接口访问数据访问层的功能,动态代理可以实现。 2、动态代理的实现规范: 1)UsersMapper….

    技术杂谈 2023年7月10日
    066
  • bash可改动的环境变量

    环境变量名 变量的用途 CDPATH 包括cd命令要逐个查找的路径,cd命令在这些路径下查找作为參数传递给它的文件夹名。假设CDPATH没有设置,cd命令则查找当前文件夹 EDIT…

    技术杂谈 2023年5月30日
    072
  • B树-插入

    B树系列文章 1. B树-介绍 2. B树-查找 3. B树-插入 4. B树-删除 插入 根据B树的以下两个特性 每一个结点最多有m个子结点 有k个子结点的非叶子结点拥有 k −…

    技术杂谈 2023年6月21日
    091
  • ubuntu下vscode安装go插件失败解决办法

    mac环境下设置GOSUMDB,可能会导致不会库到校验不通过 go env -w GOSUMDB=gosum.io+ce6e7565+AY5qEHUk/qmHc5btzW45JVo…

    技术杂谈 2023年6月21日
    098
  • 一文详解Softmax函数zz

    前言 提到二分类首先想到的可能就是逻辑回归算法。逻辑回归算法是在各个领域中应用比较广泛的机器学习算法。逻辑回归算法本身并不难,最关键的步骤就是将线性模型输出的实数域映射到[0, 1…

    技术杂谈 2023年5月31日
    094
  • 【Python手写笔记】 文件与异常,纯肝货

    前言 今天给大家分享一下我自己写的笔记,纯纯的都是干货,关于字好像也能看。这是我学python整理出来的一些资料,希望对大家 有用。想要更多的资料那就的给一个关注了… …

    技术杂谈 2023年6月21日
    085
  • PYTORCH: 60分钟

    什么是PyTorch? PyTorch 是一个基于Python的科学计算包,有两大用途: NumPy的替代品,可使用GPUs和其它加速器的强大功能 一个用于实现神经网络的自动微分库…

    技术杂谈 2023年7月25日
    079
  • Git SSH访问+多帐号

    Git SSH访问+多帐号 本篇说一下 Git 通过 ssh 访问 以及配置 多个公钥,因为一些墙化软件原因,导致用Http访问Github总是会卡死,最后发现ssh 访问可以 1…

    技术杂谈 2023年7月11日
    070
  • 燕小千智能机器人让你告别传统人工客服运作模式

    ZKNOW 前台警报,某用户的提问因为不能及时得到响应,投诉企业的服务太差这种场景是不是经常出现? 人工客服是一对一,还是一对N?企业因此付出了巨大的人力成本,依然无法提高用户的满…

    技术杂谈 2023年7月23日
    090
  • 网络中冗余备份

    冗余备份的重要性 如今社会,网络是各个产业的新的血脉,网络的稳定性至关重要,一旦网络出现故障,导致断网、延迟丢包等很可能会导致生产作业停滞,造成较经济损失,为此冗余备份至关重要,从…

    技术杂谈 2023年6月21日
    0107
  • quartz获取当前执行了几次

    public void execute(JobExecutionContext context) throws JobExecutionException { System.out…

    技术杂谈 2023年5月31日
    082
  • Bug驱动开发探讨

    Bug驱动开发( Bug-driven development)。尽管名字相同高大上,但实际上各位程序猿对它都不陌生。简单地说就是发现bug——消除bug——发现新的bug,这样一…

    技术杂谈 2023年6月1日
    080
  • 三行代码实现十进制转二进制

    转载请注明出处。谢谢 同学c++补考。找我帮忙写十进制转二进制的代码,为了让这同学能记住,所以就想写的简单些,然后没想到竟然能这么简单,感觉还不错。 直接上代码: void Dto…

    技术杂谈 2023年5月31日
    086
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球