文章目录
前提
针对IDEA2023以上,以及jdk17,maven3.9.6
什么是maven?
Apache Maven 是一个 Java 项目的构建管理和理解工具
。Maven 提供了一套标准的构建生命周期,项目对象模型(POM),依赖管理,项目信息和用于项目构建、报告和文档的一系列插件。
Maven 的主要特点包括:
- 依赖管理:Maven 能够自动处理项目依赖关系,这意味着当你添加一个依赖到你的项目中时,Maven 可以自动下载所需的库,并且解决这些库之间的依赖关系。
- 项目构建:Maven 使用一个中央配置文件
pom.xml
来定义项目的构建过程,这使得构建过程更加规范和易于理解。 - 生命周期和插件:Maven 定义了一系列的构建阶段,如 clean, compile, test, package, install 和 deploy 等等。每个阶段都可以由 Maven 插件来执行特定的任务。
- 多模块项目支持:Maven 支持多模块项目,可以方便地管理大型项目中的多个子项目。
- 集成开发环境 (IDE) 集成:大多数现代的 Java IDE 都提供了对 Maven 的支持,这使得在 IDE 中使用 Maven 成为了可能。
- 仓库管理:Maven 使用本地或远程仓库来存储 JAR 文件和其他类型的构建产物。远程仓库可以是公共的,例如 Maven Central Repository,也可以是私有的,企业通常会部署自己的私有仓库。
通过使用 Maven,开发者可以更加专注于应用程序的逻辑而不是构建系统的细节。这使得项目更容易维护,同时也简化了团队之间的协作。
为什么使用maven?
使用 Maven 有几个重要的原因:
- 标准化构建流程:Maven 强制实施了一种约定优于配置的方法,提供了一个标准的项目布局和构建生命周期。这样,任何熟悉 Maven 的开发人员都可以很容易地理解项目的结构并知道如何构建它,而无需深入研究详细的构建脚本。
- 依赖管理:Maven 能够帮助管理项目的依赖项,包括自动解析依赖树,避免版本冲突,并从远程仓库(如 Maven Central)下载必要的库。这大大减少了手动管理依赖项的工作量,降低了因依赖项问题导致的错误风险。
- 简化构建过程:Maven 使用一个中心化的配置文件
pom.xml
来控制整个构建过程。这使得构建过程更加简洁明了,也便于维护。 - 多模块项目支持:对于大型项目或者需要拆分成多个模块进行开发的项目来说,Maven 提供了很好的支持。它可以轻松地处理多模块项目之间的依赖关系,并且能够有效地构建和测试整个项目。
- 插件生态系统:Maven 拥有大量的插件,可以用来执行各种任务,如生成项目文档、运行测试、打包应用程序等。这使得扩展 Maven 的功能变得非常简单。
- 持续集成与部署:Maven 的标准化构建流程非常适合与持续集成(CI)工具结合使用。许多 CI 工具都直接支持 Maven,使得自动化构建、测试和部署变得更加容易。
- 项目信息和报告:Maven 还能够自动生成项目的文档和报告,如依赖关系图、项目信息页面等,有助于提高项目的透明度。
- 社区支持:由于 Maven 是一个广泛使用的工具,因此拥有庞大的用户群和活跃的社区支持。这意味着遇到问题时,很容易找到解决方案或求助。
综上所述,Maven 为 Java 开发者提供了一个强大且灵活的构建工具,可以帮助他们更高效地管理项目依赖、构建和部署应用。
怎么使用maven?
IDEA中集成maven
配置maven环境(全局)
创建maven项目
方法1
方法2
使用quickstart的话,
src/main下面只有java文件夹,没有resource文件夹作为配置文件存放地
。那就自己自己新建目录。
配置maven
导入依赖
<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.wake</groupId><artifactId>mybatis</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>mybatis</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version><scope>provided</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build></project>
新建数据库和表
CREATETABLE`t_customer`(`id`bigintunsignedNOTNULLAUTO_INCREMENT,`username`varchar(255)COLLATE utf8mb4_general_ci DEFAULTNULL,`jobs`varchar(255)COLLATE utf8mb4_general_ci DEFAULTNULL,`phone`varchar(255)COLLATE utf8mb4_general_ci DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=5DEFAULTCHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
定义实体类和工具类
MyBatisUtils
src/main/java/com/wake/utils/MyBatisUtils.java
packagecom.wake.utils;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importjava.io.IOException;importjava.io.InputStream;/**
* @Author LiuBin
* @Date 2024/9/13 下午1:48
* @Version 1.0
* @Description <p>备注:</p>
*/publicclassMyBatisUtils{publicstaticSqlSessiongetSqlSession(){SqlSession sqlSession;try{//创建配置信息输入流InputStream is=Resources.getResourceAsStream("mybatis-config.xml");//创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder=newSqlSessionFactoryBuilder();//创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);//实例化SqlSession对象
sqlSession=sqlSessionFactory.openSession();}catch(IOException e){thrownewRuntimeException(e);}return sqlSession;}publicstaticvoidcloseSqlSessionAndCommit(SqlSession sqlSession){
sqlSession.commit();
sqlSession.close();}}
Customer
src/main/java/com/wake/entity/Customer.java
packagecom.wake.entity;importlombok.*;/**
* @Author LiuBin
* @Date 2024/9/13 下午12:58
* @Version 1.0
* @Description <p>备注:</p>
*/@Data@NoArgsConstructor@AllArgsConstructor@EqualsAndHashCode@BuilderpublicclassCustomer{/**
* id
*/privateInteger id;/**
* 用户名
*/privateString username;/**
* 职位
*/privateString jobs;/**
* 电话
*/privateString phone;}
定义CustomerMapper接口
src/main/java/com/wake/mapper/CustomerMapper.java
packagecom.wake.mapper;importcom.wake.entity.Customer;importjava.util.List;/**
* @Author LiuBin
* @Date 2024/9/13 下午1:07
* @Version 1.0
* @Description <p>备注:</p>
*/publicinterfaceCustomerMapper{List<Customer>findAllCustomer();}
定义CustomerMapper.xml文件
注意:注意这里建包规则和上面不同这里要写成com/wake/mapper。而上面的要写成com.wake.xxx 这种形式。
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.wake.mapper.CustomerMapper"><!-- 通用查询映射结果 --><resultMapid="BaseResultMap"type="com.wake.entity.Customer"><idcolumn="id"property="id"/><resultcolumn="username"property="username"/><resultcolumn="jobs"property="jobs"/><resultcolumn="phone"property="phone"/></resultMap><selectid="findAllCustomer"resultMap="BaseResultMap"resultType="com.wake.entity.Customer">
select * from t_customer
</select></mapper>
定义db.properties配置文件
src/main/resources/db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
定义mybatis-config配置文件
src/main/resources/mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><propertiesresource="db.properties"/><!-- 设置别名 --><typeAliases><typeAliasalias="Customer"type="com.wake.entity.Customer"/></typeAliases><!-- 配置环境 --><environmentsdefault="development"><environmentid="development"><!-- 事务管理器 --><transactionManagertype="JDBC"/><!-- 数据源 --><dataSourcetype="POOLED"><!--MySQL驱动类名--><propertyname="driver"value="${jdbc.driver}"/><!--数据库连接URL--><propertyname="url"value="${jdbc.url}"/><!--数据库用户名--><propertyname="username"value="${jdbc.username}"/><!--数据库密码--><propertyname="password"value="${jdbc.password}"/></dataSource></environment></environments><!-- 映射文件位置 --><mappers><mapperresource="com/wake/mapper/CustomerMapper.xml"/></mappers></configuration>
注意:由于配置了
<typeAlias alias="Customer" type="com.wake.entity.Customer"/>
。
CustomerMapper.xml
文件的
com.wake.entity.Customer
可以单独写类名
Customer
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.wake.mapper.CustomerMapper"><!-- 通用查询映射结果 --><resultMapid="BaseResultMap"type="Customer"><idcolumn="id"property="id"/><resultcolumn="username"property="username"/><resultcolumn="jobs"property="jobs"/><resultcolumn="phone"property="phone"/></resultMap><selectid="findAllCustomer"resultMap="BaseResultMap"resultType="Customer">
select * from t_customer
</select></mapper>
新建MybatisTest测试类
packagecom.wake;importcom.wake.entity.Customer;importcom.wake.utils.MyBatisUtils;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;/**
* @Author LiuBin
* @Date 2024/9/13 下午1:28
* @Version 1.0
* @Description <p>备注:</p>
*/publicclassMyBatisTest{@TestpublicvoidfindAllCustomer(){SqlSession sqlSession =MyBatisUtils.getSqlSession();List<Customer> customers = sqlSession.selectList("com.wake.mapper.CustomerMapper.findAllCustomer");
customers.forEach(System.out::println);MyBatisUtils.closeSqlSessionAndCommit(sqlSession);}}
运行结果
补充
CustomerMapper.java
packagecom.wake.mapper;importcom.wake.entity.Customer;importjava.util.List;/**
* @Author LiuBin
* @Date 2024/9/13 下午1:07
* @Version 1.0
* @Description <p>备注:</p>
*/publicinterfaceCustomerMapper{List<Customer>findAllCustomer();intaddCustomer(Customer customer);intdeleteCustomer(Integer id);intupdateCustomer(Customer customer);}
CustomerMapper.xml
<?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"><mapper namespace="com.wake.mapper.CustomerMapper"><!-- 通用查询映射结果 --><resultMap id="BaseResultMap" type="Customer"><id column="id" property="id"/><result column="username" property="username"/><result column="jobs" property="jobs"/><result column="phone" property="phone"/></resultMap><select id="findAllCustomer" resultMap="BaseResultMap" resultType="Customer">
select * from t_customer
</select><insert id="addCustomer" parameterType="Customer">
insert into t_customer(username,jobs,phone)values(#{username},#{jobs},#{phone})</insert><delete id="deleteCustomer" parameterType="Integer">
delete from t_customer where id = #{id}</delete><update id="updateCustomer" parameterType="Customer">
update t_customer set username = #{username},jobs = #{jobs},phone = #{phone} where id = #{id}</update></mapper>
MyBatisTest.java
packagecom.wake;importcom.wake.entity.Customer;importcom.wake.utils.MyBatisUtils;importorg.apache.ibatis.session.SqlSession;importorg.junit.Test;importjava.util.List;/**
* @Author LiuBin
* @Date 2024/9/13 下午1:28
* @Version 1.0
* @Description <p>备注:</p>
*/publicclassMyBatisTest{@TestpublicvoidfindAllCustomer(){SqlSession sqlSession =MyBatisUtils.getSqlSession();List<Customer> customers = sqlSession.selectList("com.wake.mapper.CustomerMapper.findAllCustomer");
customers.forEach(System.out::println);MyBatisUtils.closeSqlSessionAndCommit(sqlSession);}@TestpublicvoidaddCustomer(){SqlSession sqlSession =MyBatisUtils.getSqlSession();Customer customer =Customer.builder().username("wake").jobs("java").phone("123456789").build();int result = sqlSession.insert("com.wake.mapper.CustomerMapper.addCustomer", customer);if(result >0){System.out.println("添加成功");MyBatisUtils.closeSqlSessionAndCommit(sqlSession);return;}System.out.println("添加失败");}@TestpublicvoiddeleteCustomerById(){SqlSession sqlSession =MyBatisUtils.getSqlSession();int result = sqlSession.delete("com.wake.mapper.CustomerMapper.deleteCustomer",4);if(result >0){System.out.println("删除成功");MyBatisUtils.closeSqlSessionAndCommit(sqlSession);return;}System.out.println("删除失败");}@TestpublicvoidupdateCustomer(){SqlSession sqlSession =MyBatisUtils.getSqlSession();Customer customer =Customer.builder().id(4).username("wake1").jobs("java1").phone("123456789").build();int result = sqlSession.update("com.wake.mapper.CustomerMapper.updateCustomer", customer);if(result >0){System.out.println("修改成功");MyBatisUtils.closeSqlSessionAndCommit(sqlSession);return;}System.out.println("修改失败");}}
结语
细节决定成败,一步错,步步错。
版权归原作者 落叶拾秋 所有, 如有侵权,请联系我们删除。