搭建MyBatis

1、MyBatis简介

  • MyBatis原是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation 迁移到了Google Code,随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
  • 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。
  • 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。
  • 可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

2、创建Mybatis示例

  • MyBatis的官方文档是https://mybatis.org/mybatis-3/zh/index.html,可根据官方的内容创建一个Mybatis示例。

    • ①创建一个maven项目,在pom.xml中导入MyBatis、mysql、日志等相关依赖。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      <!--日志-->
      <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
      </dependency>

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

      <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.3</version>
      </dependency>
    • ②在资源文件夹下创建MyBatis全局配置文件mybatis-config.xml。MyBatis 的全局配置文件包含了影响 MyBatis 行为甚深的设置(settings)和属性(properties)信息、如数据库连接池信息等,指导着MyBatis进行工作。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      <?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>
      <!--resourse:引用类路径资源-->
      <!--url:网络或磁盘资源-->
      <properties resource="jdbc.properties"></properties>

      <settings>
      <!--开启驼峰命名-->
      <setting name="mapUnderscoreToCamelCase" value="true"/>
      </settings>

      <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>
      <!--resource表示从类路径下找资源-->
      <mapper resource="mapper/UserMapper.xml"/>
      </mappers>
      </configuration>
    • ③创建mysql的相关配置信息的配置文件jdbc.properties:

      1
      2
      3
      4
      jdbc.url =jdbc:mysql://127.0.0.1:3306/User
      jdbc.driver = com.mysql.cj.jdbc.Driver
      jdbc.username = root
      jdbc.password =<数据库密码>

      在mysql中创建User数据库并在其中新建一个t_users表,里面有初始数据:

      并在项目中创建对应的bean:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      public class User {
      private Integer id ;
      private String userName ;
      private String password ;

      public Integer getId() {
      return id;
      }

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

      public String getUserName() {
      return userName;
      }

      public void setUserName(String userName) {
      this.userName = userName;
      }

      public String getPassword() {
      return password;
      }

      public void setPassword(String password) {
      this.password = password;
      }

      @Override
      public String toString() {
      return "User{" +
      "id=" + id +
      ", userName='" + userName + '\'' +
      ", password='" + password + '\'' +
      '}';
      }
      }
    • ④创建SQL映射文件,此映射文件的作用就相当于是定义Dao接口的实现类如何工作,这也是我们使用MyBatis时编写的最多的文件。这里在资源文件夹下创建mapper/UserMapper.xml文件。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      <?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">

      <!-- namespace 必须跟 UserDao 接口的全限定名称一致 -->
      <mapper namespace="com.example.dao.UserDao">

      <select id="getAllUsers" resultType="com.example.bean.User" >
      SELECT * FROM t_users;
      </select>
      </mapper>

      对应的UserDao接口为:

      1
      2
      3
      public interface UserDao {
      List<User> getAllUsers();
      }
    • ⑤在资源文件夹下新建日志的配置文件log4j.xml:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      <?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>
    • ⑥编写测试文件。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      public class MybatisTest {
      public static void main(String[] args) throws IOException {
      //1.根据全局配置文件创建一个sqlSessionFactory
      //SqlSessionFactory是SqlSession工厂,负责创建SqlSession对象
      //SqlSession:sql会话(代表和数据库的一次会话)
      String resource = "mybatis-config.xml";
      InputStream inputStream = Resources.getResourceAsStream(resource);
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

      //2.获取和数据库的一次会话:getConnection()
      SqlSession sqlSession = sqlSessionFactory.openSession();

      //3.使用SqlSession操作数据库,先获取到dao接口实现
      UserDao mapper = sqlSession.getMapper(UserDao.class);

      //4.调用方法
      List<User> allUsers = mapper.getAllUsers();
      System.out.println(allUsers);
      }
      }

      执行结果: