• 【MyBatis】二、入门程序


    第一个程序

    一、resources目录

    放在resources目录的一般是资源文件、配置文件,直接放在该路径的资源相当于放到了类的根路径下。

    二、开发步骤

    1.打包方式jar

     <!--打包方式jar-->
        <packaging>pom</packaging>
    
    • 1
    • 2

    2.引入依赖

    mybatis依赖
    mysql驱动依赖

    <dependencies>
            <!--mybatis依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.10</version>
            </dependency>
            <!--mysql驱动依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
        </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    3.编写mybatis核心配置文件-mybatis-config.xml

    (从XML中构建SqlSessionFactory),通常放在类的根路径下

    <?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>
        <!--开启mybatis对标准日志的实现-->
        <settings>
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
        
        <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="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
    <!--        执行xxxMapper.xml文件的路径-->
            <mapper resource="carMapper.xml"/>
        </mappers>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    4.编写xxxMapper.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语句的唯一标识-->
       <insert id="insertCar">
           insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)
           values(null ,'1003','丰田霸道',30,'2000-10-11','燃油车')
       </insert>
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    5.在mybatis-config.xml文件中指定xxxMapper.xml文件的路径

    (注意:resource属性会自动从类的根路径下开始查找资源)

    <!--        执行xxxMapper.xml文件的路径-->
            <mapper resource="carMapper.xml"/>
    
    • 1
    • 2

    6.编写MyBatis程序

    • 在MyBatis中负责执行SQL语句的对象叫做SqlSession
    • SqlSession是专门用来执行SQL语句的,是一个JAVA程序和数据库之间的一次会话。
    • 要想获取SqlSession对象,需要先获取SqlSessionFactory对象,通过SqlSessionFactory工厂来生产SqlSession对象。而SqlSessionFactory需要SqlSessionFactoryBuilder对象的build方法来获取。
      在这里插入图片描述
    public class MyBatisIntroduction {
        public static void main(String[] args) throws Exception{
            //获取SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
            //获取SqlSessionFactory对象
            InputStream is= Resources.getResourceAsStream("mybatis-config.xml");//默认从类的根路径下寻找
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(is);//一般一个数据库对应一个SqlSessionFactory对象
            //获取SqlSession对象
            SqlSession sqlSession=sqlSessionFactory.openSession();
            //执行sql语句
           int count= sqlSession.insert("insertCar");//返回值是影响数据库表当中的记录条数
            System.out.println("插入了几条记录:"+count);
            //手动提交
            sqlSession.commit();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    三、从XML中构建SqlSessionFactory对象

    四、mybatis有两个配置文件

    mybatis-config.xml 核心配置文件,主要配置连接数据库的信息等
    xxxMapper.xml 编写SQL语句的配置文件(一个表一个)

    五、一些细节

    在这里插入图片描述

    六、mybatis的事务管理机制

    在mybatis-config.xml文件中,可以通过以下配置进行Mybatis的事务管理

    <transactionManager type="JDBC"/>
    
    • 1

    type属性的值包括两个:

    JDBC(jdbc)
    MANAGED(managed)

    在mybatis中提供了两种事务管理机制:
    JDBC事务管理器
    MANAGED事务管理器
    JDBC事务管理器:
    mybatis框架自己管理事务,采用原生的JDBC代码去管理事务
    conn.setAutoCommit(false):开启事务。
    …业务处理…
    conn.commit();手动提交事务
    在这里插入图片描述

    MANAGED事务管理器:
    mybatis不再负责事务的管理,交给其他容器来负责, 比如spring.
    在这里插入图片描述
    在这里插入图片描述

    七、完整程序

    xxxMapper.xml
    
    • 1
    <?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语句的唯一标识-->
       <insert id="insertCar">
           insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)
           values(null ,'1003','丰田霸道',30,'2000-10-11','燃油车')
       </insert>
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    mybatis-config.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>
        <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="123456"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
    <!--        执行xxxMapper.xml文件的路径-->
            <mapper resource="carMapper.xml"/>
        </mappers>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    MyBatisCompleteTest.java

    package com.mybatis;
    
    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程序
     */
    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();
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    pom.xml

    <?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>org.example</groupId>
        <artifactId>untitled</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
        <!--打包方式jar-->
        <packaging>jar</packaging>
    
        <dependencies>
            <!--mybatis依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.10</version>
            </dependency>
            <!--mysql驱动依赖-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.30</version>
            </dependency>
    <!--        引入junit依赖-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.13.2</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    程序改进-封装工具类

    第一次改进

        public static SqlSession openSession(){
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder=new SqlSessionFactoryBuilder();
           //SqlSessionFactory对象:一个SqlSessionFactory对应一个environment,一个environment通常是一个数据库
            SqlSessionFactory sqlSessionFactory=sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
            SqlSession sqlSession=sqlSessionFactory.openSession();
            return sqlSession;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    缺点:sqlSessionFactory其实只需要创建一次就好了,不需要多次创。

    第二次改进——最终版本

    package 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;
    
    /**
     * mybatis工具类
     */
    public class SqlSessionUtil {
        private static SqlSessionFactory sqlSessionFactory;
        //工具类的构造方法是私有化的
        //工具类中所有方法都是静态的,直接采用类名即可调用,不需要new对象
        //为了防止new对象,构造方法私有化
        private SqlSessionUtil(){}
    
        //类加载时执行
        //SqlSessionUtil工具类在进行第一次加载的时候,解析mybatis-config.xml文件,创建SqlSessionFactory对象
        static{
            try {
                 sqlSessionFactory=new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取会话对象
         * @return 会话对象
         */
        public static SqlSession openSession(){
            return  sqlSessionFactory.openSession();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    关于mybatis集成日志组件

    mybatis常见的集成的日志组件

    SLF4J(沙拉风),这是一个日志标准,其中有一个框架叫做logback,它实现了沙拉风规范。
    LOG4J
    LOG4J2
    STDOUT_LOGGING

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

    <settings>
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
    
    • 1
    • 2
    • 3
    这个标签应该出现在environments标签之前。
    
    • 1

    如果想使用更加丰富的配置,可以继承第三方的log组件

    集成logback日志框架

    logback日志框架实现了slf4j标准。

    第一步:引入logback的依赖

     <!--引入logback的依赖,这个日志框架实现了slf4j规范-->
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.2.11</version>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    第二步:引入logback所必须的xml配置文件。

    这个配置文件的名字必须叫做:logback.xml或logback-test.xml。
    必须放在类的根路径下

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!-- 配置文件修改时重新加载,默认true -->
    <configuration debug="false">
    
        <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder" charset="UTF-8">
                <!-- 输出日志记录格式 -->
                <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>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
  • 相关阅读:
    Linux 进程概念
    WebRTC 服务器搭建篇
    论信息系统项目的沟通管理
    GEE|时间序列分析(二)
    笔记本电脑切换Fn功能键
    【MM小贴士】采购信息记录与工厂的相关性
    leetcode刷题:二叉树23(二叉搜索树中的众数)
    nmap使用指南
    OA项目之我的审批(查询&会议签字)
    Spring Cloud Ribbon面试题
  • 原文地址:https://blog.csdn.net/misakisaigao/article/details/128016741