MyBatis框架快速入门

 

目录

一:新建maven项目并导入依赖

二:根据数据表生成对应的POJO类

三:编写接口(这里使用了一张用户表,并采用两种方式查询)

四:编写数据源参数文件(路径:src/main/resources/config.properties)

五:编写核心配置文件(路径:src/main/resources/mybatis/mybatis-config.xml)

六:编写映射配置文件(路径:src/main/resources/mapper/PersonMapper.xml)

七:测试数据库的连通性

八:编写方法获取SqlSession对象

九:测试

十:解决驼峰命名和下划线映射关系 

十一:在控制台显示程序执行的log日志


一:新建maven项目并导入依赖

   1. 可以使用图形化构建maven项目。

   2.也可以使用命令行构建maven项目。

mvn archetype:generate
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.lihaozhe</groupId>
  <artifactId>mybatis</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>mybatis</name>
  <packaging>jar</packaging>

  <properties>
    <jdk.version>17</jdk.version>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
    <maven.compiler.encoding>utf-8</maven.compiler.encoding>
    <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <maven.test.failure.ignore>true</maven.test.failure.ignore>
    <maven.test.skip>true</maven.test.skip>
    <junit.version>5.8.2</junit.version>

    <fastjson.version>2.0.6</fastjson.version>
    <gson.version>2.9.0</gson.version>
    <hutool.version>5.8.0.M3</hutool.version>
    <jackson.version>2.13.3</jackson.version>
    <lombok.version>1.18.24</lombok.version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <!--commons-->
    <!--commons-lang3-->
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>3.8.1</version>
    </dependency>
    <!--commons-io-->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.11.0</version>
    </dependency>
    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>cn.hutool</groupId>
      <artifactId>hutool-all</artifactId>
      <version>${hutool.version}</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
      <scope>provided</scope>
    </dependency>
    <!--json-->
    <!--fastjson-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>${fastjson.version}</version>
    </dependency>
    <!--gson-->
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>${gson.version}</version>
    </dependency>
    <!--jackson-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.datatype</groupId>
      <artifactId>jackson-datatype-jsr310</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.29</version>
    </dependency>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.10</version>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.20</version>
    </dependency>
  </dependencies>

  <build>
    <!--项目打包文件名-->
    <!--<finalName>news</finalName>-->
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.3.2</version>
      </plugin>
      <!-- 编译级别 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <!-- 设置编译字符编码 -->
          <encoding>UTF-8</encoding>
          <!-- 设置编译jdk版本 -->
          <source>${jdk.version}</source>
          <target>${jdk.version}</target>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-clean-plugin</artifactId>
        <version>3.2.0</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.2.0</version>
      </plugin>
      <!-- 打包的时候跳过测试junit begin -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.22.2</version>
        <configuration>
          <skip>true</skip>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

二:根据数据表生成对应的POJO类

 (也就是将数据库中的表和生成的POJO类逐个对应起来(形成映射关系))。

三:编写接口(这里使用了一张用户表,并采用两种方式查询)

            1. resultType查询用户列表

            2. resultMap查询用户列表

package com.lihaozhe.mapper;

import com.lihaozhe.pojo.Person;

import java.util.List;


public interface PersonMapper {
    /**
     * 查询用户列表 resultType
     *
     * @return
     */
    List<Person> selectAll4t();

    /**
     * 查询用户列表 resultMap
     *
     * @return
     */
    List<Person> selectAll4m();
}

四:编写数据源参数文件(路径:src/main/resources/config.properties)

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql:///mybatis?useUnicode=true&characterEncoding=UTF8&useSSL=false&useServerPrepStmts=false&rewriteBatchedStatements=true&cachePrepStmts=true&allowMultiQueries=true&serverTimeZone=Aisa/Shanghai
username=root
password=Xxx!!@@6633

五:编写核心配置文件(路径:src/main/resources/mybatis/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>
    <!--
        这些属性可以在外部进行配置,并可以进行动态替换。
        你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
    -->
    <properties resource="config.properties" />
    <!--
        MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。
        例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
    -->
    <!--默认使用的环境 ID(比如:default="development")。-->
    <environments default="development">
        <!--每个 environment 元素定义的环境 ID(比如:id="development")。-->
        <environment id="development">
            <!--事务管理器的配置(比如:type="JDBC")。-->
            <!--
                事务管理器(transactionManager)
                在 MyBatis 中有两种类型的事务管理器(也就是 type="[JDBC|MANAGED]"):
                JDBC – 这个配置直接使用了 JDBC 的提交和回滚设施,它依赖从数据源获得的连接来管理事务作用域。
                MANAGED – 这个配置几乎没做什么。它从不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
                默认情况下它会关闭连接。然而一些容器并不希望连接被关闭,因此需要将 closeConnection 属性设置为 false 来阻止默认的关闭行为。
                如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器,因为 Spring 模块会使用自带的管理器来覆盖前面的配置。
                这两种事务管理器类型都不需要设置任何属性。它们其实是类型别名,换句话说,你可以用 TransactionFactory 接口实现类的全限定名或类型别名代替它们。
            -->
            <transactionManager type="JDBC"/>
            <!--数据源的配置(比如:type="POOLED")-->
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--
        既然 MyBatis 的行为已经由上述元素配置完了,我们现在就要来定义 SQL 映射语句了。
        但首先,我们需要告诉 MyBatis 到哪里去找到这些语句。
        在自动查找资源方面,Java 并没有提供一个很好的解决方案,所以最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
        你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:/// 形式的 URL),或类名和包名等。
    -->
    <mappers>
        <!-- 使用相对于类路径的资源引用 -->
        <!--单独加载某个映射配置文件-->
        <!--<mapper resource="mybatis/mapper/PersonMapper.xml"/>-->
        <!-- 使用完全限定资源定位符(URL) -->
        <!--<mapper url="file:///home/lhz/ideaproject/mybatis/src/main/resources/mybatis/mapper/PersonMapper.xml"/>-->
        <!--加载某包下所有的映射配置文件-->
        <!--<package name="com.lihaozhe.mapper"/>-->
        <package name="mybatis.mapper"/>
    </mappers>
</configuration>

六:编写映射配置文件(路径:src/main/resources/mapper/PersonMapper.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	命名空间	对应接口的名字
-->
<mapper namespace="com.lihaozhe.mapper.PersonMapper">
    <!--
      select  用于查询
      id      与接口中方法的名字同名 即调用接口中方法的时候 该方法会找到该配置文件中对应的SQL
      resultType 返回值数据类型 或 泛型为该数据类型的集合
    -->

    <!--查询用户列表 resultType-->
    <select id="selectAll4t" resultType="com.lihaozhe.pojo.Person">
        SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card`
        FROM `person`
    </select>
</mapper>

七:测试数据库的连通性

@Test
public void testConetion() throws IOException {
    // 核心配置文件classpath路径
    String resource = "mybatis/mybatis-config.xml";
    // 加载配置文件
    Reader reader = Resources.getResourceAsReader(resource);
    // 构建会话工厂
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    // 从SqlSessionFactory对象中获取SqlSession
    SqlSession sqlSession = sqlSessionFactory.openSession();
    System.out.println(sqlSession.getConnection());
    // 归还连接给数据源
    sqlSession.close();
}

八:编写方法获取SqlSession对象

private SqlSession sqlSession;
// JUnit5 @BeforeAll和@BeforeEach注解替换了 JUnit4 中的@Before注解。
// 它⽤于表⽰应在当前类中的每个@Test⽅法之前执⾏注解⽅法。
// 注意:@BeforeAll注解的⽅法必须为静态⽅法,否则它将引发运⾏时错误。
// 注意:@BeforeEach注解的⽅法不得为静态⽅法,否则它将引发运⾏时错误。
@BeforeEach
public void SqlSession() throws IOException {
    // 核心配置文件classpath路径
    String resource = "mybatis/mybatis-config.xml";
    // 加载配置文件
    Reader reader = Resources.getResourceAsReader(resource);
    // 构建会话工厂
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    // 从SqlSessionFactory对象中获取SqlSession
    sqlSession = sqlSessionFactory.openSession();
}

九:测试

@Test
public void selectAll4t(){
    // 获取该接口的代理对象
    PersonMapper mapper = sqlSession.getMapper(PersonMapper.class);
    // 执行接口中的方法
    List<Person> people = mapper.selectAll4t();
    // 释放SqlSession资源
    sqlSession.close();
    // 遍历集合
    people.forEach(System.out::println);
}

测试结果发现idCard属性获取到的值为null,这是由于查询字段中没有idCard字段,

换而言之就是idCard属性没有 与id_card字段形成映射关系。

解决方法有两种:

1. 使用ResultMap做结果映射集,不再使用ResultType做结果映射集。

2.在核心配置文件中设置 mapUnderscoreToCamelCase值为true。

十:解决驼峰命名和下划线映射关系 

1.使用ResultMap

在映射配置文件中编写resultMap

<!--描述如何从数据库结果集中加载对象,是最复杂也是最强大的元素。-->
<!--
	resultMap
	id 在命名空间中唯一的标识符
	type 结果集映射的javabean 或者 泛型为该类型的集合
-->
<resultMap id="PersonMap" type="com.lihaozhe.pojo.Person">
    <!--
		id 主键映射
		result 非主键映射
		property javabean 中的 filed
		column datatable 中的 filed
    -->
    <id property="id" column="id"/>
    <result property="id" column="id"/>
    <result property="uuid" column="uuid"/>
    <result property="mobile" column="mobile"/>
    <result property="nickname" column="nickname"/>
    <result property="idCard" column="id_card"/>
</resultMap>

修改select id="selectAll4m" 的属性resultType="com.lihaozhe.pojo.Person"为resultMap="PersonMap"

<select id="selectAll4m" resultMap="PersonMap">
    SELECT `id`, `uuid`, `mobile`, `nickname`, `id_card`
    FROM `person`
</select>

2.配置 mapUnderscoreToCamelCase值为true

在核心配置文件中配置参数如下:

<settings>
    <!-- 驼峰命名与下划线自动转换 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

十一:在控制台显示程序执行的log日志

在核心配置文件中设置logImpl的值为 STDOUT_LOGGING

<settings>
    <!-- log日志 -->
    <setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

这样MyBatis快速入门就结束了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星不喝药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值