二、开发第一个Mybatis程序

1. 建数据库表

请添加图片描述
添加两条数据

请添加图片描述

2. 开发步骤

1.新建一个maven模块
项目结构
在这里插入图片描述

resources
放在这个目录当中的一般都是资源文件,配置文件
直接放到resources目录下的资源,等同于放到类的根路径下

2.开发步骤

  • 1.(pom.xml)打包方式jar <packaging>jar</packaging>

  • 2.(pom.xml)引入依赖

    • 从maven仓库查找
      • mybatis依赖
      • mysql驱动依赖
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.powenode</groupId>
        <artifactId>mybatis-001-introduction</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <!--打包方式-->
        <packaging>jar</packaging>
    
        <dependencies>
            <!--mybatis依赖-->
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.10</version>
            </dependency>
            <!--mysql驱动依赖-->
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
        </dependencies>
    
        <properties>
            <maven.compiler.source>17</maven.compiler.source>
            <maven.compiler.target>17</maven.compiler.target>
        </properties>
    </project>
    
  • 3.编写mybatis核心配置文件:mybatis-config.xml
    文件名不是必须叫mybatis-config.xml,可以用其他名字
    文件的位置一般情况下放到类的根路径下(resources),不是固定的
    修改连接数据库信息

    <?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>
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                    <property name="username" value="root"/>
                    <property name="password" value="root"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <!--指定XxxMapper.xml文件的路径-->
            <!--resource属性自动从文件的根路径下获取资源-->
            <mapper resource="CarMapper.xml"/>
        </mappers>
    </configuration>
    
  • 4.编写XxxxMapper.xml文件
    在这个文件当中编写sql语句

    <?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="org.mybatis.example.BlogMapper">
        <!--insert语句,id是这条sql语句的唯一标识,id代表了这条SQL语句-->
        <insert id="insertCar">
            insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)
            values(null, 1003, '丰田霸道', 30.0, '2000-10-11', '燃油车')
        </insert>
    </mapper>    
    
  • 5.在mybatis-config.xml文件中指定XxxMapper.xml文件的路径
    <mapper resource="CarMapper.xml"/>
    resource属性自动从文件的根路径下获取资源

  • 6.编写mybatis程序(使用mybatis的类库,编写mybatis程序,连接数据库,做增删改查)
     在mybatis中,负责执行SQl语句的对象
      SqlSession
      SqlSession是专门用来执行SQL语句的,是一个java程序和数据库之间的一次会话
     要想获取SqlSession对象,需要先获取SqlSessionFactory对象
      通过SqlSessionFactory工厂来生产SqlSession对象
     怎么获取SqlSessionFactory对象?
      需要首先获取SqlSessionFactoryBuilder对象
      通过SqlSessionFactoryBuilder对象的build方法,来获取一个SqlSessionFactory对象
     mybatis的核心对象包括
      SqlSessionFactoryBuilder
      SqlSessionFactory
       SqlSession
    SqlSessionFactoryBuilder --> SqlSessionFactory --> SqlSession

    package com.powernode.mybatis.test;
    
    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.InputStream;
    
    public class MyBatisIntroductionTest {
        public static void main(String[] args) throws Exception {
    
            // 获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    
            // 获取SqlSessionFactory对象
            // Resources.getResourceAsStream默认是从类的根路径下查找资源
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            // 一般情况下一个数据库对应一个SqlSessionFactory对象
            // build的参数需要传入一个指向mybatis-config.xml文件的流
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
    
            // 获取SqlSession对象
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            // 执行sql语句
            // 参数传的是sql语句的id
            // 返回值是影响数据库表中的记录条数
            int count = sqlSession.insert("insertCar");
    
            System.out.println("插入了几条记录:" + count);
    
            // 手动提交
            sqlSession.commit();
        }
    }
    

    采用正规的方式,写一个完整的MyBatis程序

    package com.powernode.mybatis.test;
    
    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;
    
    /**
     * 采用正规的方式,写一个完整的MyBatis程序
     * @author b
     * @version 1.0
     * @since 1.0
     */
    public class MyBatisCompleteTest {
        public static void main(String[] args) {
            SqlSession sqlSession = null;
            try {
                SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
                SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
                // 开启会话(底层会开启失去)
                sqlSession = sqlSessionFactory.openSession();
                // 执行SQL语句,处理相关业务
                int count = sqlSession.insert("insertCar");
                System.out.println(count);
                // 执行到这,没有发生任何异常,提交事务,终止事务
                sqlSession.commit();
            } catch (IOException e) {
                // 回滚事务
                if (sqlSession != null) {
                    sqlSession.rollback();
                }
                e.printStackTrace();
            } finally {
                // 关闭会话(释放资源)
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    }
    

3. mybatis中有两个主要的配置文件

mybatis-config.xml:核心配置文件,主要配置连接数据库的信息等(一个)
XxxxMapper.xml:这个文件用来专门编写sql语句的配置文件(一个表一个)

4.关于第一个程序的小细节

  • mybatis中sql语句的结尾";"可以省略
  • Resources.getResourceAsStream
    小技巧:以后凡是遇到resource这个单词,大部分情况下,这种加载资源的方式就是从类的路径下开始加载(开始查找)
  • InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(“mybatis-config.xml”);
    ClassLoader.getSystemClassLoader() 获取系统的类加载器
    系统类加载器中有一个方法:getResourceAsStream
    他就是从类路径中加载资源的
    通过源代码分析
    InputStream is = Resources.getResourceAsStream(“mybatis-config.xml”);
    底层的源代码就是
    InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(“mybatis-config.xml”);

5.关于mybatis的事务管理机制

  • 在mybatis-config.xml文件中,可以通过以下的配置进行mybatis的事务管理
    <transactionManager type=“JDBC”/>
  • type属性的值包括两个:
    JDBC(jdbc)
    MANAGED(managed)
  • 在mybatis中提供了两种事务管理机制
    • JDBC事务管理机制
      mybatis框架自己管理事务,自己采用原生的JDBC代码管理事务
      conn.setAutoCommit(false);开启事务
      …业务处理…
      conn.commit();手动提交事务
      使用JDBC事务管理器的话,底层创建的事务管理器对象:JdbcTransaction对象

      编写以下代码
      SqlSession sqlSession = sqlSessionFactory.openSession(true);
      表示没有开启事务,因为这种方式不会执行:conn.setAutoCommit(false);
      JDBC中,没有执行conn.setAutoCommit(false);那么autoCommit就是true
      autoCommit是true,就表示没有开启事务。只要执行任意一条DML语句就提交一次

    • MANAGED事务管理机制
      mybatis不再负责事务的管理,事务管理交给其他容器来负责。例如:spring

6.在MyBatis中引入JUnit

在pom.xml中添加junit依赖

        <!--junit依赖-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

在test中新建包,以及创建CarMapperTest类
在这里插入图片描述
在CarMapperTest类中编写MyBatis代码

package com.powernode.mybatis.test;

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;

public class CarMapperTest {
    // 单元测试方法一般是一个业务方法对应一个测试方法
    // 测试方法规范:public void testXxxx(){}
    // @Test注解非常重要,被这个注解标注的方法就是一个单元测试方法
    @Test
    public void testInsertCar(){
        SqlSession sqlSession = null;
        try {
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            // 开启会话(底层会开启失去)
            sqlSession = sqlSessionFactory.openSession();
            // 执行SQL语句,处理相关业务
            int count = sqlSession.insert("insertCar");
            System.out.println("新增记录" + count);
            // 执行到这,没有发生任何异常,提交事务,终止事务
            sqlSession.commit();
        } catch (IOException e) {
            // 回滚事务
            if (sqlSession != null) {
                sqlSession.rollback();
            }
            e.printStackTrace();
        } finally {
            // 关闭会话(释放资源)
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

运行,测试,绿色就是没问题

在这里插入图片描述

7. 关于mybatis集成日志组件

  • mybatis常见的日志组件:
    SLF4J(沙拉风):沙拉风是一个日志标准,其中有一个框架叫logback,它实现了沙拉风规范
    LOG4J
    LOG4J2
    STDOUT_LOGGING

  • STDOUT_LOGGING是标准日志,mybatis已经实现了这种标准日志
    只要开启即可,在mybatis-config.xml文件中使用settings标签进行配置开启

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

    这种实现可以看到一些信息,比如:连接对象什么时候创建,什么时候关闭,sql语句是怎样的
    但是没有详细的日期,线程名字等,想使用更加丰富的配置,可以集成第三方的log组件
    在这里插入图片描述

  • 集成logback日志框架
    logback日志框架实现了slf4j规范

    • 在pom.xml中引入logback依赖
      <!--引入logback依赖-->
      <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.2.11</version>
      </dependency>
      
    • 引入logback必须的xml配置文件
      这个配置文件的名字必须叫做:logback.xml或者logback-test.xml
      这个配置文件必须放到类的根路径下
      <?xml version="1.0" encoding="UTF-8"?>
      
      <configuration debug="false">
          <!-- 控制台输出 -->
          <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
              <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                  <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
                  <pattern>[%thread] %-5level %logger{50} - %msg%n</pattern>
              </encoder>
          </appender>
      
          <!--mybatis log configure-->
          <logger name="com.apache.ibatis" level="TRACE"/>
          <logger name="java.sql.Connection" level="DEBUG"/>
          <logger name="java.sql.Statement" level="DEBUG"/>
          <logger name="java.sql.PreparedStatement" level="DEBUG"/>
      
          <!-- 日志输出级别,logback日志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR -->
          <root level="DEBUG">
              <appender-ref ref="STDOUT"/>
              <appender-ref ref="FILE"/>
          </root>
      
      </configuration>
      
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值