史上最全Maven教程(五)

文章目录

    • 🔥Maven聚合案例_搭建dao模块
    • 🔥Maven聚合案例_搭建service模块
    • 🔥Maven聚合案例_搭建web模块
    • 🔥Maven聚合案例_运行项目
    • 🔥依赖传递失效及解决方案

🔥Maven聚合案例_搭建dao模块

dao子工程中一般写实体类和dao层:

  1. 在父工程下创建maven模块,不选择模板,创建时一定要选择父工程。
    在这里插入图片描述
  2. 子模块的pom文件中写入父工程证明继承成功。
    在这里插入图片描述
  3. 准备数据库
CREATE DATABASE 'student';
USE 'student';
DROP TABLE IF EXISTS 'student';
CREATE TABLE `student` (
  'id' int(11) NOT NULL AUTO_INCREMENT,
  'name' varchar(255) DEFAULT NULL,
  'sex' varchar(10) DEFAULT NULL,
  'address' varchar(255) DEFAULT NULL,
  PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
insert  into
'student'('id','name','sex','address')values (1,'程序员','男','北京'),(2,
'程序猿','女','北京');
  1. 编写实体类
public class Student {
    private int id;
    private String name;
    private String sex;
    private String address;
    
    // 省略getter/setter/tostring/构造方法
}
  1. 在resources中编写连接数据库的配置文件db.properties
jdbc.url=jdbc:mysql:///student
jdbc.user=root
jdbc.password=root
  1. 编写dao方法
public class StudentDao {
    // 查询所有学生
    public List<Student> findAll() throws Exception {
        // 读取配置文件
        Properties properties = new Properties();
        InputStream is = this.getClass().getClassLoader().getResour
ceAsStream("db.properties");
        properties.load(is);
        String url = properties.getProperty("jdbc.url");
        String user = properties.getProperty("jdbc.user");
        String password = properties.getProperty("jdbc.password");

        // 查询数据库
        Connection connection = DriverManager.getConnection(url, user,
password);
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from
student");

        // 处理结果集
        List<Student> students = new ArrayList();
        while (resultSet.next()){
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            String sex = resultSet.getString("sex");
            String address = resultSet.getString("address");
            Student student = new Student(id, name, sex, address);
            students.add(student);
       }
        // 释放资源
        resultSet.close();
        statement.close();
        connection.close();
        return students;
   }
}
  1. 测试 dao 方法
public class StudentDaoTest {
    // 测试findAll
    @Test
    public void testFindAll() throws Exception {
        StudentDao studentDao = new StudentDao();
        List<Student> all = studentDao.findAll();
        all.forEach(System.out::println);
   }
}

🔥Maven聚合案例_搭建service模块

service子工程中一般写service层的内容,也需要继承父工程,由于需要调用dao子工程的方法,所以需要导入dao子工程的依赖。

  1. 在父工程下创建maven模块,不选择模板,选择父工程。
  2. 在service模块的pom文件中引入dao子工程的依赖。
<dependencies>
    <dependency>
     <groupId>com.it</groupId>
	 <artifactId>maven_demo2_dao</artifactId>
     <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
  1. 编写Service方法
public class StudentService {
    private StudentDao studentDao = new StudentDao();
    public List<Student> findAllStudent() throws Exception {
        return studentDao.findAll();
   }
}
  1. 测试service方法
public class StudentServiceTest {
    // 测试findAllStudent
    @Test
    public void testFindAll() throws Exception {
       StudentService studentService = new StudentService();
        List<Student> allStudent = studentService.findAllStudent();
      	allStudent.forEach(System.out::println);
   }
}

🔥Maven聚合案例_搭建web模块

web子工程中一般要写控制器和前端页面的内容。它不是普通的java工程,而是一个web工程,需要继承父工程,导入service子工程的依赖。

  1. 在父工程下创建maven模块,选择web工程模板,选择父工程。
    在这里插入图片描述

  2. 创建好后,添加父工程,删除pom文件中的jdk编译版本,删掉junit依赖,引入service依赖。

<parent>
    <artifactId>maven_demo2</artifactId>
    <groupId>com.itbaizhan</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>com.itbaizhan</groupId>
        <artifactId>maven_demo2_service</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
  1. 编写控制器
@WebServlet("/allStudent")
public class FindAllStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        StudentService studentService = new StudentService();
        List<Student> allStudent = null;
        try {
            allStudent = studentService.findAllStudent();
       } catch (Exception e) {
            e.printStackTrace();
		req.setAttribute("allStudent",allStudent);
		req.getRequestDispatcher("allStudent.jsp").forward(req,resp);
   }
}
  1. 编写JSP页面
<%@ page contentType="text/html;charset=UTF-8" language="java"isELIgnored="false" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
	<html>
		<head>
    		<title>所有学生</title>
		</head>
	<body>
		<table align="center" border="1"cellspacing="0" cellpadding="0"
width="500px">
    <tr>
        <th>id</th>
        <th>姓名</th>
        <th>性别</th>
        <th>地址</th>
    </tr>
    <c:forEach items="${allStudent}" 
    			var="student">

      	 <tr>
            <td>${student.id}</td>
            <td>${student.name}</td>
            <td>${student.sex}</td>
            <td>${student.address}</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>

🔥Maven聚合案例_运行项目

有以下两种方式可以运行项目:

  1. 配置tomcat插件运行父工程,此时会自动聚合运行项目。
    点开配置tomcat7插件:
    在这里插入图片描述
    进行如下配置:
    在这里插入图片描述
    点击运行箭头即可访问 http://localhost:8080/allStudent

  2. 配置tomcat插件运行web子工程。
    运行web子工程时会从本地仓库下载依赖的jar包,所以必须将dao模块和service模块发布到本地仓库,我们可以直接发布整个项目。
    在这里插入图片描述

之后按照tomcat插件配置父工程的方式配置web工程即可:
在这里插入图片描述

点击运行箭头即可访问
http://localhost:8080/allStudent

🔥依赖传递失效及解决方案

在这里插入图片描述
之前的案例中,junit是在父工程当中引入的,如果在dao工程引入,service工程引入dao工程,即 service --> dao --> junit 。按照依赖的传递性,service工程也可以使用junit。可实际情况却是无法使用。这就是依赖传递失效问题。
在这里插入图片描述

Maven在定义依赖传递时,一些依赖范围的依赖无法传递,表格如下:
在这里插入图片描述

在实际开发中,不需要记这张表格,遇到依赖没有传递过来时,我们直接在本工程再次添加一遍依赖即可。

<dependencies>
<dependency>
     <groupId>com.itbaizhan</groupId>
	<artifactId>maven_demo2_dao</artifactId>
     <version>1.0-SNAPSHOT</version>
</dependency>

<dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
     <scope>test</scope>
</dependency>
</dependencies>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/15630.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

055:cesium两种方法加载天地影像图

第055个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中用两种方法加载天地影像图。一种是利用WebMapTileServiceImageryProvider,另一种是利用UrlTemplateImageryProvider. 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方…

面试题30天打卡-day14

1、线程的生命周期是什么&#xff0c;线程有几种状态&#xff0c;什么是上下文切换&#xff1f; 线程通常有五种状态&#xff1a;创建&#xff0c;就绪&#xff0c;运行、阻塞和死亡状态。 新建状态&#xff08;New&#xff09;&#xff1a;新创建了一个线程对象。就绪状态&am…

controlnet1.1模型和预处理器功能详解(各预处理器出稿对比及对应模型说明)

ControlNet 1.1 与 ControlNet 1.0 具有完全相同的体系结构,ControlNet 1.1 包括所有以前的模型&#xff0c;具有改进的稳健性和结果质量&#xff0c;且增加并细化了多个模型。 命名规范 项目名版本号标识基础模型版本功能名文件后缀名 control 官方总是以control为项目名&…

Go | 一分钟掌握Go | 9 - 通道

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 在Java中&#xff0c;多线程之间的通信方式有哪些&#xff1f;记得吗&…

【云计算•云原生】3.一小时熟练掌握docker容器

文章目录 docker简介ubuntu下安装dockerkali下安装dockerdocker基本命令docker搭建mysql、nginx、redis容器/镜像打包搭建私有镜像仓库docker网络管理Dockerfile文件docker-compose.yml示例&#xff1a;搭建lamp docker简介 docker是一个开源的应用容器引擎&#xff0c;可以让…

缓存优化----SpringCache

spring cache spring Cache介绍 spring cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不…

解决方案丨票据集中在集团总部处理,如何解决实物票据管理难?

目前越来越多的企业都成立了财务共享中心&#xff0c;通过统一财务中心可以进行集中式、标准化、统一化管理&#xff0c;提升财务运营水平与效率、降低企业的整体运作成本、集团战略发展支撑。 如何确保财务共享中心稳健和高效运营&#xff0c;是很多企业建立共享中心后面的难…

7.参数校验

在controller和service进行前端传参校验&#xff0c;保证存到数据库的数据是正确的 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>这里无需…

《程序员面试金典(第6版)》面试题 16.05. 阶乘尾数

题目描述 设计一个算法&#xff0c;算出 n 阶乘有多少个尾随零。 示例 1: 输入: 3输出: 0解释: 3! 6, 尾数中没有零。 示例 2: 输入: 5输出: 1解释: 5! 120, 尾数中有 1 个零 说明: 你算法的时间复杂度应为 O(log n) 。 解题思路与代码 这道题&#xff0c;乍一看很简单…

米哈游新游正式公测!还没上线就已经“爆了”!

米哈游制作的3D冒险主题回合制策略游戏《崩坏&#xff1a;星穹铁道》&#xff0c;在2023年4月26日正式开启全平台公测。 该游戏在2021年10月27日曾开启过“始发测试”&#xff0c;后继续沉淀了两年才正式开启公测。 B站的ACG内容生态丰富&#xff0c;其中游戏相关内容当数米哈…

锂溶液净化和提纯

锂离子电池是一种充电电池&#xff0c;依靠锂离子在正极和负极之间移动来工作&#xff0c;广泛应用在便携式设备、卫星、储备电源、电动汽车等领域&#xff0c;具有替代各种二次电源的潜力。 近年来国家大力提倡和发展的新能源产业&#xff0c;锂离子电池的需求量的不断攀升&a…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能&#xff1b; 01 【先来说说背景】 这个概念由来已久&#xff0c;但是在国内兴起&#xff0c;是最近几年&#xff1b; 低代码即「Low-Code」&#xff1b; 指提供可视化开发环境&#xff0c;可以用来创建和管理软件应用&#xff1b; 简单的说…

Apache Zeppelin系列教程第一篇——安装和使用

一、Apache Zeppelin 介绍 Apache Zeppelin是一种开源的Web笔记本类型交互式数据分析工具&#xff0c;它提供了基于浏览器的界面&#xff0c;允许数据工程师和科学家通过各种语言和工具&#xff0c;如Scala, Python, SQL, R,等等&#xff0c;交互式地进行数据分析、可视化以及…

成功解决长时间挂起虚拟机后再次打开无法连接网络,并提示网络激活失败(亲测有效)

成功解决长时间挂起虚拟机后再次打开无法连接网络&#xff0c;并提示网络激活失败&#xff08;亲测有效&#xff01;&#xff09; 之前做区块链的一个虚拟机很久没打开&#xff0c;一直处于挂起状态&#xff0c;一直提示网络连接激活失败。试了很多种方法没解决&#xff0c;更…

如何设置ddns动态域名实现内网发布外网

在本地搭建好服务器&#xff0c;部署好web网站或其他应用后&#xff0c;需要设置动态域名服务ddns&#xff0c;将主机的内网IP端口映射到外网访问&#xff0c;才能实现在外网访问内网。今天小编就和大家分享一下内网发布外网方案&#xff0c;即如何设置ddns动态域名服务实现外网…

【hello Linux】可重入函数、volatile和SIGCHLD信号

目录 1. 可重入函数 2. volatile 3. SIGCHLD信号 Linux&#xff01;&#x1f337; 1. 可重入函数 先来谈一下重入函数的概念&#xff1a;重入函数便是在该函数还没有执行完毕便重复进入该函数&#xff08;一般发生在多线程中&#xff09;&#xff1b; 可重入函数&#xff1a…

【私有云底层】理解OpenStack核心组件

文章目录 &#x1f479; 关于作者一、Keystone 身份认证服务Keystone 架构工作流程 二、Glance 镜像服务Glance 架构磁盘与容器Glance 工作流程 三、Placement 放置服务Placement 工作流程 四、Nova 计算服务Nova 架构Nova 工作流程 五、Neutron 网络服务Neutron 架构Neutron 支…

浅谈测试用例设计 | 京东云技术团队

作者&#xff1a;京东物流 王莹莹 一、测试用例为什么存在 1.1 定义 测试用例(Test Case)是指对特定的软件产品进行测试任务的描述&#xff0c;体现测试方案、方法、技术和策略。测试用例内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等&#xff0c;…

FreeRTOS系统学习第一步:新建 FreeRTOS 工程—软件仿真

创建一个FreeRTOS系统工程 1.新建工程文件夹2.Keil新建工程2.1 New Project2.2 Select Device For Target2.3 Manage Run-Time Environment 3. 在 KEIL 工程里面新建文件组3.1在 KEIL 工程里面添加文件 4. 编写 main 函数5. 调试配置5.1 设置软件仿真5.2 修改时钟大小在时钟相关…

基于python的socket网络通信【1】

一、Socket原理 学习了大佬的知识&#xff0c;简单记一些笔记 https://www.jianshu.com/p/066d99da7cbd http://c.biancheng.net/view/2351.html 1.1什么是Socket 在计算机通信领域&#xff0c;socket 被翻译为“套接字”&#xff0c;它是计算机之间进行通信的一种约定或一种…