SSM久别遇新坑

久别个锤子,也就几天没看,改bug改到怀疑人生

maven的父子模块问题

众所周知,用maven建立一个空的模块,在它之下,将原本的各层次结构分别新建为一个子模块,就能够将各业务进行分离了,注意需要一个web项目

每一个模块就像一个jar包那样,当某个模块需要另一模块的功能时,直接导入对应的坐标就行了

注意,虽然模块是分开的,但实际上,在调用文件的时候,你会发现,其实,他们的目录结构是有联系的。

事实上,domaindomain模块的java/top/changtong1819/domain下,daodao模块的java/top/changtong1819/dao下,但是我们使用时,就直接认为他们都是处于top/changtong1819下的。当然前提是导入了该模块对应的坐标。

总所周知(才怪)maven发布资源文件的时候,是默认只有resource文件夹下面的资源文件。

于是,在之前的项目中,由于我们习惯将mapper映射文件放在与dao接口同一目录,所以我们使用了resource插件来让maven发布我们自定义文件夹下面的文件。

<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

然鹅,在这次的分模块项目中,我他喵的围绕它的一系列问题来了

在主项目的pom.xml文件中,我美滋滋的放上了该插件,然后,运行。

找不到applicationContext.xml

找不到dispatcher.xml

emmm,连springspringmvc的配置文件都找不到了

莫非,是我的resource文件夹不够显眼?再划分几个文件夹?

运行,哈哈,****

删掉插件,事情开始围绕着如何让mybatis扫描到mapper文件开展

尝试将mapper文件放到web模块的resource文件夹下,依旧是不行

幸得梁大佬点播,尝试将插件放到了dao模块下

感动中国,它总算是不报连接错误了

于是,综上所述,resource插件是让maven来发布所需非resource文件夹下的文件,而在父子模块项目中,mapper文件在dao模块上,因此理应让这个模块来发布它,毕竟其他模块需要的是他能够完成自己任务的jar包来帮自己做事,而不是来帮他完成。

那么这里就有人要问了:不是前面说的文件夹之间有联系吗?怎么还要单独放在dao来发布?

这,模块的整合是由maven来做的,整合后的文件是在一块的,resource插件是maven的一项功能,咋地?你还想它把自己整合进去?(个人观点,方便理解)

关于调试

很少使用断点,不熟悉,就自己在Controller层加了几条控制台输出语句。

emmm,加到了方法的最后面。

能看到效果就有鬼了。

幸得梁大佬指点,至少需要在调用每一个模块的功能之前加点测试语句,方便更好地确定问题。

数据库连接

一定一定要保证配置文件的准确无误,这次就栽在这上面了,一直处于连接中,也不报错,下次直接复制下面的再改了,省得出错。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/user?serverTimezone=PRC
jdbc.user=root
jdbc.pwd=root

mybatis主配置文件与mapper文件的问题

为了方便,我们将mapper文件放在了与dao接口同一路径中。这样在主配置文件中,我们就可以直接扫描该包下的配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 导入外部属性文件 -->
<!--<properties resource="config/conf.properties"></properties>-->
<!-- 给实体类包里的实体类自动创建别名,别名与类名相同 -->
<typeAliases>
<package name="top.changtong1819.domain"/>
</typeAliases>
<!-- 配置映射文件,配置文件名与接口名一致 -->
<mappers>
<!-- 扫描包下的映射配置文件 -->
<!--使用package要求是sql映射文件名与接口名一样,且在同一目录-->
<package name="top.changtong1819.dao"/>
</mappers>
</configuration>

别名是为了方便写返回值的时候不用写完整类名。

使用来获取整个包下的映射文件。其他的还有直接加载对应的mapper文件等。

组件扫描器

spring主配置文件的组件扫描器只需要扫描service对应的包就行了,因为dao是由mybatis来交给spring的,Controller又是由springmvc在自己的主配置文件中去扫描的。

applicationContext.xml中的组件扫描器

<!--注册组件扫描器-->
<context:component-scan base-package="top.changtong1819.service"/>

dispatcher.xml中的组件扫描器

 <context:component-scan base-package="top.changtong1819.controller">
<!-- 开启对SpringMVC注解的支持 -->
<mvc:annotation-driven />

注意,组件扫描的意思是 Spring能够从指定的classpath下自动扫描,侦测和实例化具有特定注解的bean 是生成bean对象放入容器中,而springmvc的注解扫描是针对特别servlet功能的扫描实现。

SSM久别遇新坑的更多相关文章

  1. C++模板元编程 - 挖新坑的时候探索到了模板元编程的新玩法

    C++真是一门自由的语言,虽然糖没有C#那么多,但是你想要怎么写,想要实现什么,想要用某种编程范式或者语言特性,它都会提供. 开大数运算类的新坑的时候(又是坑),无意中需要解决一个需求:大数类需要分别 ...

  2. 开启貌似已经过时很久的新坑:SharePoint服务器端对象模型

    5年前(嗯,是5年前),SharePoint 2010刚发布的时候,曾经和kaneboy试图一起写一本关于SharePoint 2010开发的书,名字叫<SharePoint 2010 应用开发 ...

  3. webpack4.x配置详解,多页面,多入口,多出口,新特性新坑!!

    花了差不多一天多的时间,重新撸了一遍webpack4.x的常用配置. 基本上常用的配置都熟悉了一遍,总体上来讲,为了对parcel进行反击,webpack从4.x开始,正在朝着尽可能的简化配置文件的方 ...

  4. 新坑:c#弄微信公众号

    微信公众号作为一个平台级别的产品,对商业应用来说,有很大的吸引力.如何让公众号更好的吸粉?靠内容不是一般小商户可以做到的,那是网红自媒体的强项.一般商户要怎么突围?那就是提供实用,有意义的功能给粉丝. ...

  5. Codeforces Round #536 (Div. 2) F 矩阵快速幂 + bsgs(新坑) + exgcd(新坑) + 欧拉降幂

    https://codeforces.com/contest/1106/problem/F 题意 数列公式为\(f_i=(f^{b_1}_{i-1}*f^{b_2}_{i-2}*...*f^{b_k} ...

  6. Codeforces Round #548 (Div. 2) E 二分图匹配(新坑) or 网络流 + 反向处理

    https://codeforces.com/contest/1139/problem/E 题意 有n个学生,m个社团,每个学生有一个\(p_i\)值,然后每个学生属于\(c_i\)社团, 有d天,每 ...

  7. $.getJSON JSONP的新坑

    神坑1:返回的内容必须是正规的json数据.如 { "firstName": "Bill", "lastName": "Gates ...

  8. [另开新坑] 算导v3 #26 最大流 翻译

    26 最大流 就像我们可以对一个路网构建一个有向图求最短路一样,我们也可以将一个有向图看成是一个"流量网络(flow network)",用它来回答关于流的问题. Just as ...

  9. SSM搭建遇到的坑

    1,Error:(6, 24) java: package org.junit.runner does not exist 错误原因: 当时傻傻的把zl 包(单元测试包)放在了src/main/jav ...

随机推荐

  1. 09、集合set

    集合(set) 集合是一个无序.可变.不允许数据重复的容器 s = {11,22,33,'ccc'} 无序,无法通过索引取值 可变,可以添加和删除元素 s = {11,22,33,44} s.add( ...

  2. 你真的懂 i++ 和 ++i 吗?

    对于 ++i 和 i++,许多人可能都知道,不就是先加1再取值,和先取值再加1嘛.然而,真的是这样吗?请先看以下4道题,能全部答对可以忽略这篇文章. 题目 // 示例1 int i = 1; i = ...

  3. P1328_生活大爆炸版石头剪刀布(JAVA语言)

    题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一 样,则不分胜负.在<生活大爆炸>第二季第8集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...

  4. 《逆向工程核心原理》——API HOOK

    编写dll处理hook逻辑,注入到目标进程,实现api hook. Windows10 notepad,通过hook kernel32.dll.WriteFile,实现小写字母转大写保存到文件. ho ...

  5. Hadoop集群--linux虚拟机Hadoop安装与配置、克隆虚拟机

    Hadoop集群 第四章 Hadoop安装与配置.克隆虚拟机 一.Hadoop安装与配置 1.将hadoop安装包通过Xftp传输到虚拟机的/software目录下 2.进入/software目录下, ...

  6. DAOS 分布式异步对象存储|故障模型

    DAOS 依靠大规模分布式单端口存储.因此,每个 Target 实际上都是一个单独的失败点. DAOS 通过在不同的容错域中提供 Target 间的冗余来实现数据和元数据的可用性和持久性.DAOS 内 ...

  7. Python常用时间转换

    1 import time 2 import math 3 4 # 定义一些时间段的常量(秒) 5 TimeSec_Hour = 3600 6 TimeSec_Day = 86400 7 TimeSe ...

  8. 第3 章 : Kubernetes 核心概念

    Kubernetes 核心概念 本文整理自 CNCF 和阿里巴巴联合举办的云原生技术公开课的课时 3:Kubernetes 核心概念.本次课程中,阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李 ...

  9. 解决删除Azure Active Directory的Enterprise Applications异常

    当我们不需要使用某个Azure Active Directory(以下简称AAD)的时候,我们可以删除它,这个时候Azure会对当前的AAD包含的内容进行检查, 在所有的检查项目中有一个名叫" ...

  10. redis的持久化有哪几种方式?不同的持久化机制都有什么优缺点?(偏难)

    1.RDB和AOF两种持久化机制的介绍 RDB持久化机制,对redis中的数据执行周期性的持久化 AOF机制对每条写入命令作为日志,以append-only的模式写入一个日志文件中,在redis重启的 ...