mybatis复习01,简单配置让mybatis跑起来

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 文章介绍了MyBatis的基本概念、历史和特点,并详细指导了如何配置MyBatis环境,包括创建Maven项目、添加依赖、编写核心配置文件、创建数据表和实体类、编写Mapper接口和XML配置文件,以及如何编写工具类和测试用例。

MyBatis简介

Mybatis历史

MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队
转投Google Code旗下,iBatis3.x正式更名为MyBatis。代码于2013年11月迁移到Github
iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBatis提供的持久层框架包括SQL Maps和Data AccessObjects(DAO)

Mybatis的特点

  1. MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。
  2. MyBatis 避免了几乎所有的 JDBC代码和手动设置参数以及获取结果集。
  3. MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。

创建Maven项目并且编写代码

在IDEA中选择File–>new–>project,然后选择Maven项目,next–>Finish即可。
在这里插入图片描述

在pom.xml文件中引入依赖

最为核心的几个依赖包,mybatis包,junit测试单元,log4j日志,mysql数据库驱动包。

    <dependencies>
        <!--mybatis核心-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>

        <!--junit 测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!--MySql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.3</version>
        </dependency>

        <!--log4j 日志-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>

创建mybatis核心配置为文件

在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>
    <!--MyBatis核心配置文件的标签必须按照指定的顺序去配置
        properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
        objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?
    -->
    <properties resource="jdbc.properties"></properties>
    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name=""/>
    </typeAliases>
    <!--配置链接数据库的环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <package name=""/>
    </mappers>
</configuration>

上面的配置文件中,目前需要注意几个点。

  1. <typeAliases>标签,根据它的标签名的意思为别名。就是我们在使用mybatis时,确定一个类,需要加它的全限定名称,比如下面的country实体类,它的全限定名应为com.gothic.sunset.pojo.Country,这样看着都麻烦,而且实体类多了的话,也容易出错。typeAliase标签就是用来给包起一个别名,让我们可以在确定实体类时,只需要将typeAliase中写入别名,就可以只用实体类类名了。
 <typeAliases>
        <package name="com.gothic.sunset.pojo"/>
 </typeAliases>

这样就可以直接使用country来确定实体类,一下子清爽了许多!
2. <environments>标签,它主要是用来配置数据库连接的环境,和jdbc几乎一模一样,就不过多赘述,它也可以通过properties文件来将jdbc连接的用户名,密码,url,驱动名称映射过去。
3. ```标签``,mappers标签中配置了一个包含完整类路径的xxxxMapper.xml文件(这是一个mybatis的sql语句和映射配置文件),很核心的部分。
一开始你只需要了解,这个文件中对应着你的sql语句和mapper接口即可。

jdbc.porperties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

创建数据表country

country表,三个字段,其中id为自增主键。
在这里插入图片描述
向country表中,填充几条记录。
在这里插入图片描述

建立对应的实体类country

在这里插入图片描述
在src/main/java的包下新建一个包com/gothic/sunset/pojo,然后写country实体类(getter和setter方法,toString方法,已经有参无参构造器)。

package com.gothic.sunset.pojo;

public class Country {
   
    private int id;
    private String countryname;
    private String countrycode;


    public Country(int id, String countryname, String countrycode) {
   
        this.id = id;
        this.countryname = countryname;
        this.countrycode = countrycode;
    }

    public Country() {
   
    }

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getCountryname() {
   
        return countryname;
    }

    public void setCountryname(String countryname) {
   
        this.countryname = countryname;
    }

    public String getCountrycode() {
   
        return countrycode;
    }

    public void setCountrycode(String countrycode) {
   
        this.countrycode = countrycode;
    }

    @Override
    public String toString() {
   
        return "Country{" +
                "id=" + id +
                ", countryname='" + countryname + '\'' +
                ", countrycode='" + countrycode + '\'' +
                '}';
    }
}

写要实现功能的Mapper接口及配置Mapper.xml文件

在mybatis中,一般用Mapper作为接口类名和XMl的后缀。
首先,在包com/gothic/sunset/mapper中,编写mapper接口,CountryMapper.java.
一开始,我们就写一个功能,后面写动态sql,再将所有的CRUD全部实现。

package com.gothic.sunset.mapper;

import com.gothic.sunset.pojo.Country;

import java.util.List;

public interface CountryMapper {
   
    /**
     * 查询所有的国家信息
     * @return
     */
    List<Country> selectAll();


}

在resources目录下新建一个包,与上面的包一致 com/gothic/sunset/mapper,新建时,需要注意,切记路径不能以.号分隔,虽然它看起来完全一致,但是在target目录中,你就会观察到,并不是一致的。
新建时,应该这样做:
点击resources右键new一个directory,然后就如下图所示:
在这里插入图片描述
最后的目录结构如这样:
在这里插入图片描述
创建好目录后,新建CountryMapper.xml,这里的话为了方便与mapper接口相呼应,方便观察和编写代码(其实也都是大家都遵循的习惯啦)。

<?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.gothic.sunset.mapper.CountryMapper">
    <!-- List<Country> selectAll();-->
    <select id="selectAll" resultType="Country">
        select id,countryname,countrycode from country
    </select>

</mapper>

刚刚也已经所过,Mapper.xml文件中写的就是对应的sql语句。
这里暂时需要注意的是,其中增删改查,在xml中都是对应的英文标签insert ,delete,update,select。
重点是,如何将接口中的抽象方法与之对应,说到这里的话,看一下select标签中的id的值,其实就是对应的抽象方法名
在这里插入图片描述
resultType,不就是返回值类型吗,因为我们这个方法是要查找所有的country,那它每一条记录一定是一个country实体类的对象,所以这里写Country。
再看看标签体中的内容,就是最简单的sql语句(当然当前只是静态的,后面会有复杂的动态sql啊)。
说到这里,其实mybatis中最难的也就是配置文件难记,简单的很,多写写就熟练啦!

接下来完善之前的核心配置文件 mybatis-config.xml

添加包的别名,以及引入刚刚编写的Mapper.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>
    <!--MyBatis核心配置文件的标签必须按照指定的顺序去配置
        properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,
        objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?
    -->
    <properties resource="jdbc.properties"></properties>

    <settings>
        <!--将下划线映射为驼峰-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <typeAliases>
        <package name="com.gothic.sunset.pojo"/>
    </typeAliases>
    <!--配置链接数据库的环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <package name="com.gothic.sunset.mapper"/>
    </mappers>

</configuration>

编写SqlSessionUtil工具类,用来获取SqlSession对象

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
在com/gothic/sunset/util下新建一个SqlSessionUtil工具类:

package com.gothic.sunset.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;

public class SqlSessionUtil {
   
    public static SqlSession getSqlSession(){
   
        SqlSession sqlSession = null;
        try {
   
            //获取核心配置文件输入流
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //获取sqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder =new SqlSessionFactoryBuilder();
            //获取sqlSessionFactory对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            //获取sqlSession对象
            sqlSession = sqlSessionFactory.openSession(true);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
        return sqlSession;
    }
}

编写log4j.xml文件

在resources目录下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug" />
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info" />
    </logger>
    <root>
        <level value="debug" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>

当前的完整目录结构

在这里插入图片描述

编写测试用例Test

在test包下编写,利用junit来测试。

import com.gothic.sunset.mapper.CountryMapper;
import com.gothic.sunset.pojo.Country;
import com.gothic.sunset.utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class test {
   
    @Test
    public void testSelectAllCt(){
   
        SqlSession sqlSession = SqlSessionUtil.getSqlSession();
        CountryMapper mapper = sqlSession.getMapper(CountryMapper.class);
        List<Country> countryList = mapper.selectAll();
        countryList.forEach(System.out::println);
    }

}

测试输出:
在这里插入图片描述
与我们填充的数据一致,成功,第一天复习就到此结束啦。
关键的知识点,在于如何配置mybatis-config.xml以及Mapper.xml文件,和其中一些标签的用法含义,还有就是SqlSession的获取。
在这里插入图片描述

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
5月前
|
XML Java 数据库连接
MyBatis的常见配置
MyBatis 常见配置包括数据库连接、类型别名、映射器等核心模块,合理配置可提升开发效率与系统性能。主要内容涵盖核心配置文件结构、关键配置项详解及配置优先级说明。
555 4
|
6月前
|
SQL XML Java
通过MyBatis的XML配置实现灵活的动态SQL查询
总结而言,通过MyBatis的XML配置实现灵活的动态SQL查询,可以让开发者以声明式的方式构建SQL语句,既保证了SQL操作的灵活性,又简化了代码的复杂度。这种方式可以显著提高数据库操作的效率和代码的可维护性。
403 18
|
11月前
|
Oracle 关系型数据库 Java
【YashanDB知识库】Mybatis-Plus适配崖山配置
【YashanDB知识库】Mybatis-Plus适配崖山配置
|
11月前
|
Java 数据库连接 微服务
微服务——MyBatis配置——事务管理
本段内容主要介绍了事务管理的两种类型:JDBC 和 MANAGED。JDBC 类型直接利用数据源连接管理事务,依赖提交和回滚机制;而 MANAGED 类型则由容器全程管理事务生命周期,例如 JEE 应用服务器上下文,默认会关闭连接,但可根据需要设置 `closeConnection` 属性为 false 阻止关闭行为。此外,提到在使用 Spring + MyBatis 时,无需额外配置事务管理器,因为 Spring 模块自带的功能可覆盖上述配置,且这两种事务管理器类型均无需设置属性。
185 0
|
11月前
|
Java 数据库连接 数据库
微服务——MyBatis配置——多环境配置
在 MyBatis 中,多环境配置允许为不同数据库创建多个 SqlSessionFactory。通过传递环境参数给 SqlSessionFactoryBuilder,可指定使用哪种环境;若忽略,则加载默认环境。`environments` 元素定义环境配置,包括默认环境 ID、事务管理器和数据源类型等。每个环境需唯一标识,确保默认环境匹配其中之一。代码示例展示了如何构建工厂及配置 XML 结构。
181 0
|
11月前
|
缓存 Java 数据库连接
微服务——MyBatis配置——常见配置
本文介绍了 MyBatis 的常见配置及其加载顺序。属性配置优先级为:方法参数传递的属性 &gt; resource/url 属性中配置 &gt; properties 元素中指定属性。同时列举了多个关键配置项,如 `cacheEnabled`(全局缓存开关)、`lazyLoadingEnabled`(延迟加载)、`useGeneratedKeys`(使用 JDBC 自动生成主键)等,并详细说明其作用、有效值及默认值。这些配置帮助开发者优化 MyBatis 的性能与行为。
173 0
|
11月前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
1632 0
|
11月前
|
缓存 Java 数据库连接
MyBatis篇-常见配置
本文介绍了 MyBatis 的常见配置及事务管理相关内容。首先概述了 MyBatis 属性加载顺序,方法参数属性优先级最高。接着列举了几个常见配置属性,如 cacheEnabled、lazyLoadingEnabled 等,并说明其作用与默认值。在多环境配置部分,讲解如何通过 SqlSessionFactoryBuilder 指定环境,以及 environments 元素的配置细节。最后讨论了两种事务管理模式:JDBC 和 MANAGED,分别适用于不同场景,并指出在使用 Spring 模块时无需额外配置事务管理器。
|
缓存 NoSQL Java
Mybatis学习:Mybatis缓存配置
MyBatis缓存配置包括一级缓存(事务级)、二级缓存(应用级)和三级缓存(如Redis,跨JVM)。一级缓存自动启用,二级缓存需在`mybatis-config.xml`中开启并配置映射文件或注解。集成Redis缓存时,需添加依赖、配置Redis参数并在映射文件中指定缓存类型。适用于查询为主的场景,减少增删改操作,适合单表操作且表间关联较少的业务。
261 6
|
安全 Java 数据库连接
后端框架的学习----mybatis框架(3、配置解析)
这篇文章详细介绍了MyBatis框架的核心配置文件解析,包括环境配置、属性配置、类型别名设置、映射器注册以及SqlSessionFactory和SqlSession的生命周期和作用域管理。
后端框架的学习----mybatis框架(3、配置解析)