mybatis配置及入门

1,210 阅读6分钟

mybatis

MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来。

简单来讲就是简化数据库的相关操作。

开发环境

Windows10 + jdk-13.0 + MySql 5.7.28 + Idea

Mysql最新版本已经到8.x,但是5.x使用更为广泛,因此使用5.7版本

开始

创建 maven 项目

配置maven默认的jdk版本

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>13</source>
                    <target>13</target>
                </configuration>
            </plugin>
        </plugins>

上边的配置文件应放置在pom.xml文件中,如果不配置,在每一次修改pom.xml文件后,再次编译运行时都会提示 不支持的发行版本XXX的错误。

在pom.xml中注册所有的xml

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>

这是极其关键的一步,只有这一步成功,在运行时所有的xml文件才能正确发挥其作用。

添加相关的依赖

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.3</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.48</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

分别添加mybatis、mysql、junit包,idea的提示足够智能,只要输入相关的名称,稍等片刻就能自动补全。

文件创建及配置

创建文件

在resources目录下创建 mybatis-config.xml 文件。 文件名可以任意更改,但建议如上命名。db.properties文件可以创建,也可以不创建,建议创建,命名无要求,主要是用来存放一些数据库连接相关的配置,如用户名、密码等。

src/main/java 目录下创建 com.XXX.daocom.XXX.pojocom.XXX.utils三个包

简要解释一下三个包的含义:

Util是工具的意思,一般来说,常常用来描述和业务逻辑没有关系的数据处理。
Dao一般而言,都是用来和底层数据库通信,负责对数据库的增删改查。
POJO是Plain OrdinaryJava Object的缩写,它不实现任何接口,不继承任何父类,且不应该含有注解。

在我的项目中,数据库内容如下:

poet表中有三个字段,因此,在 pojo 下建立 poet类。相应的,建立 poetMapper等文件。

配置文件

配置数据库连接
<?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>
        <package name="com.wang.pojo"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <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>

    <mappers>
        <mapper resource="com/wang/dao/poetMapper.xml"/>
    </mappers>
</configuration>

<properties resource="db.properties"/>

将resources目录下的 db.properties 文件导入,如果前边创建文件时没有创建这个文件,可以忽略这一步。

   <typeAliases>
      <package name="com.wang.pojo"/>
  </typeAliases>

为我们的包设置一个别名,这样在下边的使用中可以简化步骤,当然也可以省略这一步。 同时,为包取别名的方法不唯一,这里采取比较简单的一种。在后续使用中,如果要使用 com.wang.pojo.poet ,可以直接用 poet 代替。

<environments default="development">
      <environment id="development">
          <transactionManager type="JDBC"/>
          <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官方文档中有详细说明。 这一步主要是配置mysql的环境, environments 的 s 说明在此标签下可以配置多个环境 default="development" 则选择其中一个作为默认环境。

<transactionManager type="JDBC"/> 配置事务管理器,采用mysql保持默认即可。

<dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>        
</dataSource>
db.properties文件:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=root

datasource 标签配置数据源,默认即可。 下边三个属性配置数据库的驱动、url、用户名、密码。这里因为创建了data.properties配置文件,因此相关信息并未直接写在此处的文件中。如果没有创建配置文件,下边配置可以参考:

<dataSource type="POOLED">                         
  <property name="driver"   value="com.mysql.jdbc.Driver"/>    
  <property name="url"      value="jdbc:mysql://localhost:3306?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>          
  <property name="username" value="xxx"/>
  <property name="password" value="xxx"/>
</dataSource>                                      
<mappers>
      <mapper resource="com/wang/dao/poetMapper.xml"/>
</mappers>

这一步的目的是注册xml文件,不注册在运行时会报错。 注册也有多种方式,此处选择resource注册。


至此,数据库文件就配置完毕了。

配置mybatisUtils工具类

public class mybatisUtils {
   private static SqlSessionFactory sqlSessionFactory;

   static {
       String res = "mybatis-config.xml";
       InputStream inputStream = null;
       try {
           inputStream = Resources.getResourceAsStream(res);
       } catch (IOException e) {
           e.printStackTrace();
       }
       sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
   }

   public static SqlSession getSession() {
       return sqlSessionFactory.openSession();
   }
}

所谓工具类,仅仅提供一个基础的工具。在这个类中,返回一个MySQL的session。

编写poet类

package com.wang.pojo;

public class poet {
    private int id;
    private String name;
    private  String info;

    public poet(int id, String name, String info) {
        this.id = id;
        this.name = name;
        this.info = info;
    }

    public poet( ) {
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getInfo() {
        return info;
    }

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


    public void setName(String name) {
        this.name = name;
    }

    public void setInfo(String info) {
        this.info = info;
    }
    
    @Override
    public String toString() {
        return "poet{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", info='" + info + '\'' +
                '}';
    }

}

完整内容如上图,可以根据自己的项目编写相关的内容。

编写dao中的接口和mapper映射文件

public interface poetMapper {
    List<poet> getList();
}
<?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.wang.dao.poetMapper">
    <select id="getList" resultType="poet">
        select *
        from poems.poets
    </select>
</mapper>

上图在mapper标签中 namespace 对应相应的接口类,要给出完整的包名。在resultType处要注意,原本应该写完整的包名 com.XXX.pojo.XXX ,但由于我们在 mapper-config.xml中配置了别名,在此使用 poet 即可。

所有的标签都如下图所示,在此仅以select作为示例:

到此,所有的配置已经完成。

编写测试类

public class mybatisUtilsTest {
    //注意此处的 @Test 注解,不可少。
    @Test
    public void test() {
        //下边两行就是我们创建的工厂类的使用,从工厂类中获得一个session。
        SqlSession sqlSession = mybatisUtils.getSession();
        poetMapper poetMapper = sqlSession.getMapper(com.wang.dao.poetMapper.class);

        List<poet> poets = poetMapper.getList();
        for (poet poet : poets) {
            System.out.println(poet);
        }
    }
}

成功!

good luck~


参考:

pojo 维基百科

mybatis 官方文档