mybatis初识

Posted 小马Mark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis初识相关的知识,希望对你有一定的参考价值。

MyBatis概述

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。

iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)

Mybatis的功能:

  1. 注册数据库的驱动,例如 Class.forName(“com.mysql.jdbc.Driver”))
  2. 创建 JDBC 中必须使用的 Connection , Statement, ResultSet 对象
  3. 从 xml 中获取 sql,并执行 sql 语句,把 ResultSet 结果转换 java 对象
  4. 关闭资源

总结:

MyBatis是一个优秀的持久层框架。它对jdbc几乎所有的数据库操作进行了封装(包括加载驱动、创建connection、创建statement、手动设置参数、结果集检索等繁琐操作),使开发者只需要关注 SQL本身。

MyBatis快速入门

下载MyBatis,直接在github上搜索即可。

MyBatis中文文档:https://mybatis.org/mybatis-3/zh/getting-started.html

解压mybatis压缩包后:

在这里插入图片描述

MyBatis框架搭建

在普通web项目中的搭建

直接在lib目录下导入:mybatis相关jar包、mysql驱动包、log4j相关jar包。

例如:mybatis-3.4.5.jar、mysql-connector-java-5.1.23-bin.jar、log4j-1.2.17.jar

在maven项目中的搭建

  1. 创建maven项目

  2. 在pom.xml文件中加入依赖

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--MyBatis依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.1</version>
        </dependency>
         <!--mysql驱动依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.9</version>
        </dependency>
    </dependencies>
    
  3. 提前创建一个数据库

    例如:test1数据库中有account表,包含字段有id int 、name varchar(20)、money double。

  4. 编写一个domain/entity实体类:Account实体类

    package com.maj.domain;
    
    public class Account {
        private Integer id;
        private String name;
        private Double money;
        // 后面省略
    }
    
  5. 编写创建一个持久层的Dao接口 AccountDao

    package com.maj.dao;
    
    import com.maj.domain.Account;
    import java.util.List;
    
    // 接口操作account表
    public interface AccountDao {
    
        // 查询account表中所有数据
        public abstract List<Account> showAccount();
    
    }
    
  6. 创建一个sql映射文件,xml文件

    sql映射文件:是用来写sql语句的,一般一个表对应一个sql映射文件

    创建的位置:应该与dao接口所在位置一致,且其名称也应该一样

    <?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:命名空间,唯一值的,
                   可以使用自定义的,但是要求用dao接口的全限定名称
    -->
    <mapper namespace="com.maj.dao.AccountDao">
        <!--
            select标签:表示查询操作
            id属性:sql语句的唯一标识,可以自定义,但是要求使用接口中的方法名称
            resultType:设置返回值类型
        -->
        <select id="showAccount" resultType="com.maj.domain.Account">
            select id,name,money from account order by id;
      </select>
    </mapper>
    
  7. 创建一个mybatis主配置文件,xml文件

    用处:主要用于定义数据库配置信息(类似于连接数据库),sql映射文件的位置

    位置:放在maven工程中resources目录下

    命名:可以自定义,一般是mybatis.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>  <!-- 根标签 -->
        <!--  环境配置:数据库连接信息  -->
        <!--  default属性:表示现在要使用数据库,指向数据库id  -->
        <environments default="mydev">
            <!--
                environment标签:一个数据库信息的配置
                id属性:唯一标识,自定义
            -->
            <environment id="mydev">
                <!--
                    transactionManager:mybatis事务类型
                    type="JDBC"表示使用jdbc中Connection对象的commit,rollback做事务处理
                -->
                <transactionManager type="JDBC"/>
                <!--
                    dataSource标签:表示数据源,连接数据库
                    type属性:表示数据源类型,POOLED是使用连接池
                 -->
                <dataSource type="POOLED">
                    <!-- 数据库驱动类名 -->
                    <!-- driver,url,username,password是固定的,不能自定义 -->
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/test1"/>
                    <property name="username" value="root"/>
                    <property name="password" value="maj6226543"/>
                </dataSource>
            </environment>
        </environments>
        <!--  配置sql mapper文件置  -->
        <mappers>
            <!--    一个mapper标签对应一个文件位置    -->
            <!--    从类路径开始的路基信息  从classes/目录开始后面的路径    -->
            <mapper resource="com/maj/dao/AccountDao.xml"/>
        </mappers>
    </configuration>
    
  8. 测试用例

    package com.maj;
    
    import com.maj.domain.Account;
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    
    public class MyBatisTest {
        @Test
        public void test1() throws IOException {
            // 1.定义mybatis主配置文件名称,从类路径的根开始(classes/后面)
            String config = "mybatis.xml";
            // 2.读取配置文件
            InputStream in = Resources.getResourceAsStream(config);
            // 3.创建SqlSessionFactory对象,目的是获取SqlSession
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            // 4.获取SqlSession(因为SqlSession能够执行SQL语句)***
            SqlSession session = factory.openSession();
            // 5.执行SqlSession的selectList()  ***
            // 参数是 映射文件的namespace值 + "." + ql语句的id
            List<Account> accountList = session.selectList("com.maj.dao.AccountDao.showAccount");
            // 6.输出结果
            accountList.forEach(System.out::println);
            // 7.释放资源
            session.close();
        }
    }
    

    补充:可以配置日志功能

    • mybatis.xml 文件加入日志配置,可以在控制台输出执行的 sql 语句和参数

    • <settings>
              <setting name="logImpl" value="STDOUT_LOGGING"/>
      </settings>
      

以上是关于mybatis初识的主要内容,如果未能解决你的问题,请参考以下文章

初识MyBatis

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识MyBatis

初识MyBatis

初识MyBatis