初探MyBatis

MyBatis Study Notes Day01

什么是MyBatis?

一款用于简化JDBC开发的持久层框架,作为数据对象的持久化引擎

标准的MVC开发模式就是SSM框架,而SSM就是由Spring、Spring MVC、MyBatis的整合

MyBatis官网:https://mybatis.org/mybatis-3/zh/index.html

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

MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和POJO为数据库中记录

MyBatis几乎避免了所有的JDBC代码和手动设置参数以及获取结果集

创建MyBatis程序

  1. 创建maven项目

  2. 导入Mybatis、MySQL驱动、junit依赖

      <dependencies>
    <!--  MyBatis 依赖  -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.5</version>
        </dependency>
    <!--  MySQL驱动 依赖  -->
        <dependency>
          <groupId>com.mysql</groupId>
          <artifactId>mysql-connector-j</artifactId>
          <version>8.0.31</version>
        </dependency>
    <!--  junit 单元测试  -->
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
    
  3. 编写MyBatis的核心配置文件

<?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>
<!-- 引入外部配置文件 -->
    <properties resource="dbcp.properties"/>
    <settings>
    <!-- 配置日志实现 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
         <!-- 开启驼峰命名映射 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${dbcp.url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
</configuration>
  1. 编写mybatis工具类(固定写法)

    package com.yuqu.utils;
    
    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 java.io.IOException;
    import java.io.InputStream;
    
    public class MyBatisUtils {
        private static SqlSessionFactory sqlSessionFactory;
        static{
            try {
    // 使用mybatis第一步:获取sqlSessionFactory对象
                String resource = "mybatis-config.xml";
                InputStream inputStream = Resources.getResourceAsStream(resource);
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
        // 获取sqlSession对象
        public static SqlSession getSqlSession(){
            return sqlSessionFactory.openSession();
        }
    }
    
    

    sqlSessionFactory顾名思义就是产生sqlSession的工厂,拥有sqlSessionFactory就可以获取sqlSession实例,sqlSession实例提供了在数据库执行SQL指令所需的所有方法

  2. 编写测试类–> 实体类、dao接口 实现类

    // 根据sql编写User实体类
    // sql:
    CREATE TABLE tb_user(
     id INT PRIMARY KEY ,
     username VARCHAR(20),
     password VARCHAR(20),
     gender CHAR(1),
     addr VARCHAR(30)
     )ENGINE=INNODB;
     
     INSERT INTO tb_user VALUES(1,'张三','123','男','郑州');
     INSERT INTO tb_user VALUES(2,'李四','234','女','苏州');
     INSERT INTO tb_user VALUES(3,'王五','345','女','杭州');
     // UserDao
     public interface UserDao {
         List<User> getUserList();
     }
    
  3. 映射SQL语句(xml文件配置)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <!-- nameSpace命名空间=绑定一个对应Dao/Mapper接口 -->
    <mapper namespace="com.yuqu.dao.UserDao">
        <select id="getUserList" resultType="com.yuqu.pojo.User">
            select * from testmybatis.tb_user;
        </select>
    </mapper>
    

    与原来的JDBC相比,此处将UserDaoImpl转换为UserMapper.xml配置文件

  4. 测试

    利用junit单元测试

    异常:org.apache.ibatis.binding.BindingException: Type interface com.yuqu.dao.UserDao is not known to the MapperRegistry接口类型UserDao未在Mapper中心注册,所以我们每一个实体接口都需要在MyBatis-config.xml文件中注册,如下

    <!--每一个mapper都需要在MyBatis核心配置文件中注册!--> 
    <mappers>
            <mapper resource="UserMapper.xml"/>
    </mappers>
    

    注意所有的配置文件尽量按照标准放在resources目录下,如果放在其他包下则可能会出现资源导出失败问题,也就是程序编译之后会无法找到该资源,但也可以通过maven配置build来防止资源导出失败

    <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>
    

测试代码:

public class UserTest {
    @Test
    public void test(){
        // 获取sqlSession
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        // 方式一:执行sql
        UserDao mapper = sqlSession.getMapper(UserDao.class);
        List<User> list = mapper.getUserList();
        for (User user : list) {
            System.out.println(user);
        }
        // 关闭sqlSession
        sqlSession.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

绿仔牛奶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值