实训Day03

今日知识

  • Maven
  • 框架

Maven

配置文件

pom.xml

  • maven 项目的核心文件
  • groupId 包名
  • artifactId 模块名
  • version 版本
  • package 打包类型
  • dependencies 依赖
    • dependency
  • plugins 插件
    • tomcat
    • clean
    • compiler
    • deploy
    • install
    • jar
    • resources
    • site
    • surefile

setting.xml

  • localRepository 配置本地仓库

  • mirror 配置镜像

配置pom.xml案例

添加Tomcat插件
1
2
3
4
5
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
添加Servlet
1
2
3
4
5
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
</dependency>

配置setting.xml案例

修改仓库源

打开maven根目录下的conf中的setting.xml文件

添加以下内容

1
2
3
4
5
6
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

使用Maven项目

如图所示
创建Maven项目

配置Maven运行

各种问题的解决方法

Java JDK版本不兼容

方法一

一个项目改一次pom.xml

1
2
3
4
5
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
方法二

更改整个Maven setting.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<profile>  
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>

cannot be cast to javax.servlet.Servlet

根本原因

在maven中的jar是有依赖范围的,而我们需要的servet-api.jar在tomcat中有,如果我们项目有也有这个jar的话,就会导致jar冲突。

解决方法

给servlet依赖中添加范围 scope

1
2
3
4
5
6
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>

获取依赖过程

先找本地仓库(文件夹),再到国内镜像或国外中央仓库中找

项目包

Jar包

JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。

简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

War包

war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。

简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

依赖作用域 Scope

scope 取值 有效范围(compile, runtime, test) 依赖传递 例子
compile all spring-core
provided compile, test servlet-api
runtime runtime, test JDBC
test test JUnit
system compile, test

注意事项

idea虽然自带有maven,但我们一般不用

框架

含义

  • 处理某一领域的最佳的解决方案
  • 基于框架上实现我们的业务逻辑(框架是一个半成品)

常见框架

  • Spring
  • SpringMVC
  • Mybatis
  • SpringBoot
  • SpringCloud
  • SSH

Mybatis

含义

基于 JDBC 的 ORM 框架

ORM

对象关系映射,即:

  • 类与表关系映射
  • 对象与记录关系映射
  • 对象的属性与表列关系映射

步骤

  • 添加依赖
    • 驱动
    • Mybatis自己的依赖
  • 写代码
    • SqlSessionFactoryBuilder
    • SqlSessionFactory
    • SqlSession [Connection]
      • 相关方法
    • 资源释放

配置文件

  • 主配置文件
    • 数据库连接信息
    • 指定映射文件的路径
  • 映射文件
主配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/nacl?useUnicode=true&amp;characterEncoding=UTF-8"/>
<property name="username" value="********"/>
<property name="password" value="********"/>
</dataSource>
</environment>
</environments>

<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
映射文件
1
2
3
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) throws IOException {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
// 加载配置文件进输入字符流
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
// 根据 SqlSessionFactoryBuilder 和 配置文件 生成 SqlSessionFactory 对象 [连接池]
SqlSession session = factory.openSession();
// 从工厂对象中获取一个会话 [连接对象]
List<UserVO> userVOs = session.selectList("findAll");
// 执行封装好的语句并获得记录集合
for (UserVO userVO : userVOs) {
System.out.println(userVO);
}
// 测试获得的数据
session.close();
// 资源释放
}

问题解决

返回类型属性名与列名不一致

resultType 改为 resultMap

1
2
3
<select id='findAll' resultMap='baseResultMap' >
select * from table
</select>

同时设置添加一个

1
2
3
4
<resultMap id='baseResultMap' type='baseClass'>
<id property = 'class_id' column = 'table_id' />
...
</resultMap>

实训Day03
http://yjh-2860674406.github.io/2023/07/07/编程/实训/Day03/
Author
Ye JinHua
Posted on
July 7, 2023
Licensed under