MyBatis学习笔记(一)简单配置让MyBatis跑起来

MyBatis是一款优秀的支持自定义SQL查询、存储过程和高级映射的持久层框架,消除了几乎多有的JDBC代码和参数的手动设置和结果集的检索。MyBatis可以使用XML和注解进行配置和映射,MyBatis通过将参数映射到配置的SQL形成最终执行的SQL语句,最后将执行SQL的结果映射成Java对象返回。

一、创建Maven项目

Maven是一个优秀的项目构建和管理工具,使用Maven构建项目非常方便,可以非常方便地处理Jar包依赖问题。这里提供构建MyBatis应用的的pom.xml配置内容。


<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.0modelVersion>

    <groupId>com.lemongroupId>
    <artifactId>lemon-mybatisartifactId>
    <version>1.0-SNAPSHOTversion>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <mybatis.version>3.4.6mybatis.version>
        <junit.version>4.12junit.version>
        <mysql.connector.version>8.0.11mysql.connector.version>
        <slf4j.version>1.7.25slf4j.version>
        <log4j.version>1.2.17log4j.version>
        <lombok.version>1.16.20lombok.version>
    properties>

    <dependencies>

        
        <dependency>
            <groupId>org.mybatisgroupId>
            <artifactId>mybatisartifactId>
            <version>${mybatis.version}version>
        dependency>

        
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit.version}version>
            <scope>testscope>
        dependency>

        
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>${mysql.connector.version}version>
        dependency>

        
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-apiartifactId>
            <version>${slf4j.version}version>
        dependency>

        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>${slf4j.version}version>
            <scope>testscope>
        dependency>

        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>${log4j.version}version>
        dependency>

        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>${lombok.version}version>
        dependency>

    dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>3.7.0version>
                <configuration>
                    <source>1.8source>
                    <target>1.8target>
                    <encoding>UTF-8encoding>
                configuration>
            plugin>
        plugins>
    build>
project>

其中标签指定了源代码的编码方式为UTF-8,以及项目所依赖的Jar包的版本。除了引入MyBatis应用所必须的Jar以外,还引入了lomboklombok是一款非常优秀的插件,它可以被安装到EclipseIntelliJ IDEA上,使用lombok的相关注解可以使得创建JavaBean的代码十分简洁,至于如何使用,可以去CSDN上找到相关博客学习一下。

二、准备数据库

这里准备一个非常简单的MySQL数据库,数据库的编码方式设置为UTF-8,现在提供相关的SQL语句来建立数据库并插入测试数据。

-- 创建名称为lemon-mybatis的数据库
CREATE DATABASE lemon-mybatis DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 使用数据库
use lemon-mybatis;
-- 创建数据库表并插入数据
DROP TABLE IF EXISTS `country`;
CREATE TABLE `country` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `countryName` varchar(255) DEFAULT NULL,
  `countryCode` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);
INSERT `country` (`countryName`, `countryCode`)
VALUES ('中国', 'CN'), ('美国', 'US'),
		('俄罗斯', 'RU'), ('英国', 'GB'), ('法国', 'FR');

三、配置MyBatis

配置MyBatis的方式有多种,最常见的是使用XML形式进行配置,当然,与Spring进行整合的时候,也可以使用Spring Bean的方式进行配置,另外还可以通过Java编码方式进行配置,但是这种方式不常用,这里仅仅使用XML形式配置MyBatis
在项目的src/main/resources文件夹下面创建mybatis-config.xml配置文件,具体配置的内容如下:



<configuration>

    <settings>
        
        <setting name="logImpl" value="LOG4J"/>
    settings>

    
    <typeAliases>
        <package name="com.lemon.example.model"/>
    typeAliases>

    <environments default="development">
        <environment id="development">
            
            <transactionManager type="JDBC">
                <property name="" value=""/>
            transactionManager>
            <dataSource type="UNPOOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://192.168.171.133:3306/lemon-mybatis?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            dataSource>
        environment>
    environments>
    <mappers>
        
        <mapper resource="com/lemon/example/mapper/CountryMapper.xml"/>
    mappers>
configuration>

简单介绍一下这个配置文件:

  • 中的logImpl属性配置指定使用LOG4J输出日志

  • 配置了一个包的别名,通常情况下,辨别一个类使用的是类的全限定名称,比如com.lemon.example.model.Country,在Mybatis中会频繁使用到类的全限定名称,所以配置包的别名以后,在配置文件中需要使用到全限定名称的时候直接写简单的类名即可,如Country

  • 环境配置中主要配置了数据库连接,可以同时配置多个数据库连接环境,内部使用隔离不同的环境。

  • 标签是配置配置Mapper文件的标签,其内部可以配置多个多个类似CountryMapper.xml,使用的是标签,也可以使用标签,更加便捷,后面会介绍更多细节。

四、创建实体类和Mapper.xml文件

MyBatis是一个结果映射型框架,一般在数据库设计和实体类设计的过程中,都是一个表对应一个实体类,对数据库的增删改查一般都是将实体类作为数据载体。而这里的Mapper.xml文件,是SQL语句和结果映射的基本载体,一般的命名习惯是实体类的名称加上Mapper,比如CountryMapper.xml。在实际的开发过程中,一个实体类Country对应一个接口CountryMapper.javaCountryMapper.xml文件,其中接口CountryMapper.java放在src/main下面的包里,比如com.lemon.example.mapper,而CountryMapper.xml文件则放在src/main/resources文件夹下,建立的各层文件夹和对应的接口包名一致,如com/lemon/example/mapper,其中接口并不是必须的。
本例中实体类Country的代码为:

package com.lemon.example.model;

import lombok.Data;

/**
 * @author lemon
 * @date 2018/4/22 下午9:32
 */
@Data
public class Country {

    private Long id;
    private String countryName;
    private String countryCode;

}

这里导入了lombokData注解,在运行时会自动为实体类创建gettersetter方法。本例中没有创建CountryMapper接口,所以直接创建CountryMapper.xml文件,代码如下:



<mapper namespace="com.lemon.example.mapper.CountryMapper">
    <select id="selectAll" resultType="Country">
        select id, countryName, countryCode from country
    select>
mapper>

对于上面的Mapper文件,进行如下解释:

  • 标签XML的根元素,属性namespace定义了当前XML的命名空间,是唯一的,如果没有创建该Mapper文件的Mapper接口,那么这个命名空间可以随意设置,如果创建了接口,那么这个命名空间的值必须是对应接口的全限定类名。

  • 标签