idea2024版本创建maven项目并使用mybatis

前提

针对IDEA2023以上,以及jdk17,maven3.9.6





什么是maven?

Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 提供了一套标准的构建生命周期,项目对象模型(POM),依赖管理,项目信息和用于项目构建、报告和文档的一系列插件。

Maven 的主要特点包括:

  1. 依赖管理:Maven 能够自动处理项目依赖关系,这意味着当你添加一个依赖到你的项目中时,Maven 可以自动下载所需的库,并且解决这些库之间的依赖关系。
  2. 项目构建:Maven 使用一个中央配置文件 pom.xml 来定义项目的构建过程,这使得构建过程更加规范和易于理解。
  3. 生命周期和插件:Maven 定义了一系列的构建阶段,如 clean, compile, test, package, install 和 deploy 等等。每个阶段都可以由 Maven 插件来执行特定的任务。
  4. 多模块项目支持:Maven 支持多模块项目,可以方便地管理大型项目中的多个子项目。
  5. 集成开发环境 (IDE) 集成:大多数现代的 Java IDE 都提供了对 Maven 的支持,这使得在 IDE 中使用 Maven 成为了可能。
  6. 仓库管理:Maven 使用本地或远程仓库来存储 JAR 文件和其他类型的构建产物。远程仓库可以是公共的,例如 Maven Central Repository,也可以是私有的,企业通常会部署自己的私有仓库。

通过使用 Maven,开发者可以更加专注于应用程序的逻辑而不是构建系统的细节。这使得项目更容易维护,同时也简化了团队之间的协作。





为什么使用maven?

使用 Maven 有几个重要的原因:

  1. 标准化构建流程:Maven 强制实施了一种约定优于配置的方法,提供了一个标准的项目布局和构建生命周期。这样,任何熟悉 Maven 的开发人员都可以很容易地理解项目的结构并知道如何构建它,而无需深入研究详细的构建脚本。
  2. 依赖管理:Maven 能够帮助管理项目的依赖项,包括自动解析依赖树,避免版本冲突,并从远程仓库(如 Maven Central)下载必要的库。这大大减少了手动管理依赖项的工作量,降低了因依赖项问题导致的错误风险。
  3. 简化构建过程:Maven 使用一个中心化的配置文件 pom.xml 来控制整个构建过程。这使得构建过程更加简洁明了,也便于维护。
  4. 多模块项目支持:对于大型项目或者需要拆分成多个模块进行开发的项目来说,Maven 提供了很好的支持。它可以轻松地处理多模块项目之间的依赖关系,并且能够有效地构建和测试整个项目。
  5. 插件生态系统:Maven 拥有大量的插件,可以用来执行各种任务,如生成项目文档、运行测试、打包应用程序等。这使得扩展 Maven 的功能变得非常简单。
  6. 持续集成与部署:Maven 的标准化构建流程非常适合与持续集成(CI)工具结合使用。许多 CI 工具都直接支持 Maven,使得自动化构建、测试和部署变得更加容易。
  7. 项目信息和报告:Maven 还能够自动生成项目的文档和报告,如依赖关系图、项目信息页面等,有助于提高项目的透明度。
  8. 社区支持:由于 Maven 是一个广泛使用的工具,因此拥有庞大的用户群和活跃的社区支持。这意味着遇到问题时,很容易找到解决方案或求助。

综上所述,Maven 为 Java 开发者提供了一个强大且灵活的构建工具,可以帮助他们更高效地管理项目依赖、构建和部署应用。





怎么使用maven?





IDEA中集成maven

在这里插入图片描述





配置maven环境(全局)

在这里插入图片描述





创建maven项目





方法1





方法2

使用quickstart的话,src/main下面只有java文件夹,没有resource文件夹作为配置文件存放地。那就自己自己新建目录。

在这里插入图片描述





配置maven





导入依赖

<project xmlns="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>





新建数据库和表

在这里插入图片描述

CREATE TABLE `t_customer` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `jobs` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  `phone` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;





定义实体类和工具类





MyBatisUtils

src/main/java/com/wake/utils/MyBatisUtils.java

package com.wake.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午1:48
 * @Version 1.0
 * @Description <p>备注:</p>
 */
public class MyBatisUtils {
    public static SqlSession getSqlSession(){
        SqlSession sqlSession;
        try {
            //创建配置信息输入流
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");
            //创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            //创建SqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);
            //实例化SqlSession对象
            sqlSession=sqlSessionFactory.openSession();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return sqlSession;
    }

    public static void closeSqlSessionAndCommit(SqlSession sqlSession){
        sqlSession.commit();
        sqlSession.close();
    }
}



Customer

src/main/java/com/wake/entity/Customer.java

package com.wake.entity;

import lombok.*;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午12:58
 * @Version 1.0
 * @Description <p>备注:</p>
 */

@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
@Builder
public class Customer {
    /**
     * id
     */
    private Integer id;

    /**
     * 用户名
     */
    private String username;

    /**
     * 职位
     */
    private String jobs;

    /**
     * 电话
     */

    private String phone;
}





定义CustomerMapper接口

src/main/java/com/wake/mapper/CustomerMapper.java

package com.wake.mapper;

import com.wake.entity.Customer;

import java.util.List;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午1:07
 * @Version 1.0
 * @Description <p>备注:</p>
 */
public interface CustomerMapper {
    List<Customer> findAllCustomer();
}





定义CustomerMapper.xml文件

注意:注意这里建包规则和上面不同这里要写成com/wake/mapper。而上面的要写成com.wake.xxx 这种形式。

<?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="com.wake.entity.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="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"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <properties resource="db.properties"/>
    <!-- 设置别名 -->
    <typeAliases>
        <typeAlias alias="Customer" type="com.wake.entity.Customer"/>
    </typeAliases>
    <!-- 配置环境 -->
    <environments default="development">
        <environment id="development">
            <!-- 事务管理器 -->
            <transactionManager type="JDBC"/>

            <!-- 数据源 -->
            <dataSource type="POOLED">
                <!--MySQL驱动类名-->
                <property name="driver" value="${jdbc.driver}"/>
                <!--数据库连接URL-->
                <property name="url" value="${jdbc.url}"/>
                <!--数据库用户名-->
                <property name="username" value="${jdbc.username}"/>
                <!--数据库密码-->
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射文件位置 -->
    <mappers>
        <mapper resource="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"?>
<!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>
</mapper>





新建MybatisTest测试类

在这里插入图片描述

package com.wake;

import com.wake.entity.Customer;
import com.wake.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午1:28
 * @Version 1.0
 * @Description <p>备注:</p>
 */
public class MyBatisTest {

    @Test
    public void findAllCustomer() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        List<Customer> customers = sqlSession.selectList("com.wake.mapper.CustomerMapper.findAllCustomer");
        customers.forEach(System.out::println);
        MyBatisUtils.closeSqlSessionAndCommit(sqlSession);
    }
}





运行结果





补充

CustomerMapper.java

package com.wake.mapper;

import com.wake.entity.Customer;

import java.util.List;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午1:07
 * @Version 1.0
 * @Description <p>备注:</p>
 */
public interface CustomerMapper {
    List<Customer> findAllCustomer();

    int addCustomer(Customer customer);


    int deleteCustomer(Integer id);


    int updateCustomer(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

package com.wake;

import com.wake.entity.Customer;
import com.wake.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

/**
 * @Author LiuBin
 * @Date 2024/9/13 下午1:28
 * @Version 1.0
 * @Description <p>备注:</p>
 */
public class MyBatisTest {

    @Test
    public void findAllCustomer() {
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        List<Customer> customers = sqlSession.selectList("com.wake.mapper.CustomerMapper.findAllCustomer");
        customers.forEach(System.out::println);
        MyBatisUtils.closeSqlSessionAndCommit(sqlSession);
    }

    @Test
    public void addCustomer() {
        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("添加失败");
    }

    @Test
    public void deleteCustomerById() {
        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("删除失败");
    }


    @Test
    public void updateCustomer() {
        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("修改失败");
    }
}





结语

细节决定成败,一步错,步步错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值