Mybatis-01-简单上手

1、简介

什么是 MyBatis?

  • MyBatis 持久层框架,它支持自定义 SQL、存储过程以及高级映射。

  • MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。

  • MyBatis 可以通过简单的 XML 或 注解 来配置和映射原始类型、接口 和 Java POJO(实体类 对象)为数据库中的记录。

2、使用Mybatis

2.1、如何获取Mybatis

  • Maven仓库

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.6</version>
    </dependency>
    
  • Github

  • 中文文档

2.2、在项目中使用Mybatis

项目结构

搭建数据库

CREATE DATABASE `mybatis`;
USE `mybatis`;

CREATE TABLE `user`(
    `id` INT(10) NOT NULL,
    `name` VARCHAR(30) DEFAULT NULL,
    `pwd` VARCHAR(30) DEFAULT NULL,
    PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'青柠','123456'),
(2,'小明','123456'),
(3,'李四','123456'),
(4,'张三','123456');
  1. Maven 来构建项目,将 mybatis 依赖代码添加到 pom.xml 文件中:

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    
    <!--Mysql 连接-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.49</version>
    </dependency>
    
  2. 添加资源文件

    1. bd.properties 数据库连接配置

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8
      username=root
      password=123456
      
    2. mybatis-config.xml 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>
          <!--引入 数据库 配置信息-->
          <properties resource="db.properties"/>
          <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>
      
      </configuration>
      
  3. 创建实体类,接口

    • User

      public class User {
          private int id;
          private String name;
          private String pwd;
      
          public User(){}
          public User(int id, String name, String pwd) {
              this.id = id;
              this.name = name;
              this.pwd = pwd;
          }
      
          public int getId() {
              return id;
          }
      
          public void setId(int id) {
              this.id = id;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getPwd() {
              return pwd;
          }
      
          public void setPwd(String pwd) {
              this.pwd = pwd;
          }
      
          @Override
          public String toString() {
              return "User{" +
                      "id=" + id +
                      ", name='" + name + '\'' +
                      ", pwd='" + pwd + '\'' +
                      '}';
          }
      }
      
    • Mapper 接口 UserMapper

      public interface UserMapper {
          List<User> getUsers();
      }
      
    • 在Mapper接口同目录下 新建于 同名的.xml 文件 UserMapper.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">
      <!--namespace : 需要绑定的 接口-->
      <mapper namespace="com.qn.dao.UserMapper">
          <!-- 
          select:需要执行的操作  
          id : 绑定接口中的方法
          resultType: 返回值类型  填完全限定名 可一在 mybatis-config.xml 中配置别名-->
          <select id="getUsers" resultType="com.qn.pojo.User">
              # 需要执行的 sql 
              select *
              from mybatis.user
          </select>
      </mapper>
      
    • 在核心配置文件 mybatis-config.xml 中配置 mapper

      <mappers>
          <!--这是 通过 类 来注册 mapper  用 . 来分割  
              要注意 UserMapper 和 UserMapper.xml 同名
              -->
          <mapper class="com.qn.dao.UserMapper"/>
      </mappers>
      
      <mappers>
          <!--
          使用mapper xml 文件来注册 mapper
          需要用  /  来分割路径
          -->
          <mapper resource="com/qn/dao/UserMapper.xml"/>
      </mappers>
      
  4. 准备测试

    1. 新建测试类

    2. 从 XML 中构建 SqlSessionFactory对象

      String resource = "org/mybatis/example/mybatis-config.xml";
      InputStream inputStream = Resources.getResourceAsStream(resource);
      SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
    3. 从 SqlSessionFactory 中获取 SqlSession对象

      try (SqlSession session = sqlSessionFactory.openSession()) {
        Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101);
      }
      
    4. 编写测试代码

      public class MyTest {
          public static void main(String[] args) {
              // mybatis-config.xml  mybatis的配置 路径
              String resource = "mybatis-config.xml";
              InputStream inputStream = null;
              try {
                  inputStream = Resources.getResourceAsStream(resource);
              } catch (IOException e) {
                  e.printStackTrace();
              }
              SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
      
              SqlSession sqlSession = sqlSessionFactory.openSession();
      
              // 通过 sqlSession 获得mapper 来执行业务
              UserMapper mapper = sqlSession.getMapper(UserMapper.class);
              List<User> users = mapper.getUsers();
              for (User user : users) {
                  System.out.println(user);
              }
      
              // 关闭连接资源
              sqlSession.close();
          }
      }
      
    5. 测试结果

3、程序运行错误

3.1、资源无法导出

注意点 maven 可能无法导出 java 路径下的 xml资源文件,程序报错

### Error building SqlSession.
### The error may exist in com/qn/dao/UserMapper.xml
### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/qn/dao/UserMapper.xml

解决方法

在 pom.xml 中添加 配置 资源过滤

<!--maven 配置文件 资源过滤-->
<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>true</filtering>
        </resource>
    </resources>
</build>

3.2、导出的资源中存在中文乱码

解决方法

把mapper 配置文件中的中文删除

posted @ 2021-05-06 10:18  遇见星光  阅读(58)  评论(0编辑  收藏  举报