zoukankan      html  css  js  c++  java
  • 重识maven

     在之前直接使用了maven,了解了maven的最基本的使用,但是一直没有对maven做一个全面的了解,只知道maven是用来导jar包的,今天对maven做一个重新认识,方便后面理解springboot:

    1.maven的父子工程:创建一个maven父工程

    创建成功后删除src文件夹,因为父工程只负责管理jar包

    1.1.父工程并没有实质性的内容,所有的jar包都在里面,也就是说只需要管理jar包即可,不参与任何逻辑开法

    然后再父工程的pom文件中导入依赖:

    <dependencies>
            <!--mysql包-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.45</version>
            </dependency>
            <!--spring包-->
            <!--mybatis包-->
            <!--shiro包-->
        </dependencies>

    在以往的项目中我们都是这么导入依赖的,现在导入依赖后,在父工程下创建子模块

    创建好子工程后,在回过头查看父工程的pom文件:

    可以看到,刚创建的子模块都在父工程的pom文件中显示出来了,在子工程的pom文件中也有这样一段代码

    标识该模块的父工程,那么父工程是用来管理依赖的,因此父工程内有的依赖,子工程就会继承该依赖,因此就会在每一个子工程中都导入一遍父工程的依赖,

    2.在父工程中拥有很多子模块,每一个子模块都代表了不用的包(package:entity,mapper,service,impl,controller)

      而且父工程中的所有jar包,都会被子工程所继承

    问题1:

    如果依赖非常多的话,就会影响项目的性能,因为每个模块负责的功能都不相同,如果web模块需要shiro的jar包,而其他的模块都不需要该jar包,但是因为父子工程的规则,强制子模块将jar包都导入进来,每一个子模块都都导入进来,就会影响项目于的性能运行速度等。怎么解决?

    <!--dependencyManagement标签,被该标签控制的jar包不会被子工程所继承,如果子工程有需要,可以重写父工程中的jar包
        并且不需要写版本号(如果写了版本号,就表示是从maven重新下载,而不是继承父类工程的)-->
        <dependencyManagement></dependencyManagement>

    具体实例如下:

    <dependencyManagement>
            <dependencies>
                <!--mysql包-->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.45</version>
                </dependency>
                <!--spring包-->
                <!--mybatis包-->
                <!--shiro包-->
            </dependencies>
        </dependencyManagement>

    现在在父工程中,将jar包放入了dependencyManagement标签中,那么子模块就不能从父类中继承了,如果子工程需要用

    不用写版本号,继承自父类。

    使用maven的好处:

      方便了整个项目的管理,解决了jar包冗余的问题,方便分布式开发

    问题2:

    如果开始分模块开发,那么之前我们项目中写的entity、controler、mapper、service等包都会被分成一个一个的模块,这时候,controller要调用service,service要调用mapper,可是不在一个模块中,如图:

     仙子啊mapper中的UserMapper类内存在方法需要调用User实体:

    User实体是在另一个model中的,调不到怎么解决?

    使用工程依赖
    在mapper项目中的pom.xml文件中以jar包的形式引入model项目即可
    一旦使用量的工程依赖,就会出现层级依赖

    在mapper模块的pom文件中引入model:

         <dependency>
                <!--groupId与父工程的一样-->
                <groupId>com.zs</groupId>
                <!--需要引入的模块-->
                <artifactId>model</artifactId>
                <!--需要引入的版本号-->
                <version>1.0-SNAPSHOT</version>
            </dependency>

    然后就可以在mapper中引入User对象了:

    问题3:

    使用了层级依赖,上级所引用的jar包,下级是否可以引用?

     可以引用,在mapper中引用了model,在service中可以直接引用不需要重新导入依赖:

    在service模块中引入mapper依赖:

    这里并没有引入model的依赖;然后写接口:

    注意,在这里仍然可以使用model的依赖,因为service引入了mapper,而mapper引入了model,因此service也可以使用model中的类。

    定义实体类的标准:
    1.需要实现序列化接口
    2.需要重写hashCode和equalse
    3.需要重写toString()
    4.必须有getter和setter方法
    5.要求所有的类型全部为包装类型,不能使用基本类型(因为使用包装类型可以防止空指针异常)

  • 相关阅读:
    oracle锁分类
    oracle中decode函数
    oracle分区
    oracle处理字符串
    oracle索引分类
    oracle表连接
    oracle处理字符串
    oracle分区
    木马中如何编程实现远程关机
    木马中如何编程实现远程关机
  • 原文地址:https://www.cnblogs.com/Zs-book1/p/11360304.html
Copyright © 2011-2022 走看看