Mybatis初学入门

Mybatis入门

1.什么是mybatis?

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

2.为什么使用mybatis?

  1. 简单易学,最简单安装只要两个jar文件+配置几个sql映射文件
  2. 解除sql与程序代码的耦合,sql和代码的分离,提高了可维护性
  3. 避免了几乎所有的 JDBC 代码,不再需要手动设置参数以及获取结果集
  4. 可以使用简单的 XML 或注解来配置和映射原生信息

3.如何使用mybatis(重点)?

参考官方文档学习

下文都是以maven项目来学习的

  1. 使用mybatis,将将下面的依赖代码置于 pom.xml 文件中:

    <!-- mybatis依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    
    <!-- 连接数据库mysql依赖 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.15</version>
    </dependency>
    
    <!-- junit单元测试(可忽略,方便测试用的) -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
  2. 从xml中构建SqlSessionFactory

    • 在resources文件夹下创建mybatis核心配置文件mybatis-config.xml

      <?xml version="1.0" encoding="UTF-8" ?>
      <!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
        <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>
      
    • 创建一个使用mybatis的工具类,获取SqlSessionFactory对象,减轻代码冗余

      public class MybatisUtils {
      
          private static SqlSessionFactory sqlSessionFactory;
      
          static {
              //使用mybatis必须的第一步:获取 sqlSessionFactory 对象
              try {
                  String resource = "mybatis-config.xml";
                  InputStream inputStream = Resources.getResourceAsStream(resource);
                  sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
      
  3. 从SqlSessionFactory对象中获取SqlSession

    在使用mybatis的工具类中编写一个获取SqlSession的方法getSqlSession(),减轻代码冗余

    /**
     * 从 SqlSessionFactory 中获得 SqlSession 的实例
     * SqlSession 提供了在数据库执行 SQL 命令所需的所有方法
     * 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句
     */
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
    
  4. 探究已映射的SQL语句

    • 编写一个mapper(相当于网络编程里面的Dao接口)接口

      public interface personMapper {
          //获取Persion集合
          List<Person> getPersonList();
      }
      
    • 编写一个personMapper接口的personMapper.xml映射文件(相当于j接口的实现类)

      <?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.yg.mapper.personMapper"(为对应的mapper接口路径)>
          <select id="getPersonList"(为要实现的接口方法) resultType="com.yg.pojo.Person"(为接口方法对应的返回类型)>
              select * from person(sql语句)
          </select>
      </mapper>
      
    • 编写一个测试类,测试已经实现的 getPersonList()方法

      public class personMapperTest {
      
          @Test
          public void test01(){
              //1.获取 sqlSession 对象
              SqlSession sqlSession = MybatisUtils.getSqlSession();
      
              //2.获取 Mapper 映射
              personMapper mapper = sqlSession.getMapper(personMapper.class);
              List<Person> personList = mapper.getPersonList();
      
              //3.遍历输出查看结果
              for (Person person :
                      personList) {
                  System.out.println(person);
              }
      
              //4.关闭释放资源
              sqlSession.close();
          }
      }
      
  5. 所有新建的文件规范的目录结构(仅供参考)

    image-20221011131951366

**!补充说明:**因为要简单展现mybatis的强大不同,嘚借用上数据库增删改查功能,上面的例子当中,前面我省去了数据库部分的知识,所以还嘚建一个简单的数据表、连接数据库、编写一个对应数据的实体类等工作。这方面不懂的可以看一下我以前的JDBC入门学习这篇文章和相关实体类的文章

4.入门学习mybatis常见报错

  1. org.apache.ibatis.binding.BindingException: Type interface com.yg.mapper. is not known to the MapperRegistry.

    **原因:**没有注册mapper

    **解决方案:**在 mybatis-config.xml 配置文件中注册personMapper

    <mappers>
        <mapper resource="com/yg/mapper/personMapper.xml(为mapper的路径)”/>
    </mappers>
    
  2. org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com/yg/mapper/personMapper.xml

    原因:不能找到personMapper.xml资源,该.xml文件是写在了java源代码目录下,运行时maven是默认不会从java源代码目录下打包.xml/.properties文件的

    解决方案:pom.xml全局配置文件下配置导出资源配置

    <build>
        <!-- 导出资源配置,防止资源导出失败的问题-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    
  3. java.io.IOException: Could not find resource mybatis-config.xml

    原因:不能找到mybatis-config.xml资源,顾名思义就是编译后打包的classes文件夹中找不到这个文件。很有可能的原因就是pom.xml的导出资源配置出了问题,因为在配置pom.xml中的resources标签时只配置了扫描src/main/java,则maven只会扫描src/main/java,不会扫描src/main/resources,即使后者已经被标记为项目的资源目录。

    **解决方案:**配置导出资源配置标签时,不能仅仅配置java源代码目录下的,还要配置resources资源目录下的,即使用完整的导出资源配置,如下:

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

关于导出资源配置的相关问题,详情可以看一下这篇文章 关于maven打包时, 资源文件没有被打包进来的问题,里面有详细介绍原理

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值