今日知识
Maven
配置文件
pom.xml
- maven 项目的核心文件
- groupId 包名
- artifactId 模块名
- version 版本
- package 打包类型
- dependencies 依赖
- 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项目
如图所示


各种问题的解决方法
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
对象关系映射,即:
- 类与表关系映射
- 对象与记录关系映射
- 对象的属性与表列关系映射
步骤
- 添加依赖
- 写代码
- 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&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); 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>
|