首页 > 其他分享 >MyBatis-日志功能,基本的CURD,MyBatis对象分析,创建工具类。

MyBatis-日志功能,基本的CURD,MyBatis对象分析,创建工具类。

时间:2022-11-06 14:47:14浏览次数:63  
标签:SqlSessionFactory 对象 SqlSession CURD student MyBatis import 日志 SqlSessionFactory

MyBatis-日志功能,基本的CURD,MyBatis对象分析,创建工具类。

1.配置日志功能

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

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

如图所示:

image-20221106135419584
然后我们在执行之后就可以看见日志情况了:

2. 基本的 CURD

2.1 insert

  1. StudentDao 接口中增加方法
package com.bjpowernode.dao;

import com.bjpowernode.domain.Student;

import java.util.List;

//接口操作student表
public interface StudentDao {

    //查询student表的所有的数据
    public List<Student> selectStudents();

    //插入方法
    //参数: student ,表示要插入到数据库的数据
    //返回值: int , 表示执行insert操作后的 影响数据库的行数
    public int insertStudent(Student student);
}
  1. 然后再StudentDao.xml 加入 sql 语句添加 insert 的sql语句,参数通过 #{id}传参数
<?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.bjpowernode.dao.StudentDao">
    <!--
       select:表示查询操作。
       id: 你要执行的sql语法的唯一标识, mybatis会使用这个id的值来找到要执行的sql语句
           可以自定义,但是要求你使用接口中的方法名称。

       resultType:表示结果类型的, 是sql语句执行后得到ResultSet,遍历这个ResultSet得到java对象的类型。
          值写的类型的全限定名称
    -->
    <select id="selectStudents" resultType="com.bjpowernode.domain.Student" >
        select id,name,email,age from student order by id
    </select>

    <!--插入操作-->
    <insert id="insertStudent">
        insert into student values(#{id},#{name},#{email},#{age})
    </insert>
</mapper>
  1. 增加测试方法

    注意点:在operSession()可以指定true表示自动提交事务

    否则需要在执行 insert 之后手动提交事务

    源代码如下:

package com.bjpowernode;

import com.bjpowernode.domain.Student;
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 TestMyBatis {
    //测试方法,测试功能
    @Test
    public void testInsert() throws IOException {

        //访问mybatis读取student数据
        //1.定义mybatis主配置文件的名称, 从类路径的根开始(target/clasess)
        String config="mybatis.xml";
        //2.读取这个config表示的文件
        InputStream in = Resources.getResourceAsStream(config);
        //3.创建了SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder builder  = new SqlSessionFactoryBuilder();
        //4.创建SqlSessionFactory对象
        SqlSessionFactory factory = builder.build(in);
        //5.获取SqlSession对象,从SqlSessionFactory中获取SqlSession
        //SqlSession sqlSession = factory.openSession();
        SqlSession sqlSession = factory.openSession(true);
        //6.【重要】指定要执行的sql语句的标识。  sql映射文件中的namespace + "." + 标签的id值
        String sqlId = "com.bjpowernode.dao.StudentDao.insertStudent";
        //7. 重要】执行sql语句,通过sqlId找到语句
        Student student  = new Student();
        student.setId(1004);
        student.setName("nana");
        student.setEmail("[email protected]");
        student.setAge(20);
        int nums = sqlSession.insert(sqlId,student);

        //mybatis默认不是自动提交事务的, 所以在insert ,update ,delete后要手工提交事务
        //sqlSession.commit();

        //8.输出结果
        System.out.println("执行insert的结果="+nums);

        //9.关闭SqlSession对象
        sqlSession.close();
    }
}

执行结果如下:

2.2 update 就不一一粘贴代码了,直接上截图

(1) StudentDao 接口中增加方法
int updateStudent(Student student);

(2) StudentDao.xml 增加 sql 语句
<update id="updateStudent">
 update student set age = #{age} where id=#{id}
</update>

(3) 增加测试方法
        @Test
    public void testUpdate() throws IOException {
        //1.mybatis 主配置文件
        String config = "mybatis.xml";
        //2.读取配置文件
        InputStream in = Resources.getResourceAsStream(config);
        //3.创建 SqlSessionFactory 对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //4.获取 SqlSession
        SqlSession session = factory.openSession();
        //5.创建保存数据的对象
        Student student = new Student();
        student.setId(1004);//要修改的 id
        student.setAge(99); //要修改的年龄值
        //6.执行更新 update
        int rows = session.update(
                "com.bjpowernode.dao.StudentDao.updateStudent",student);
        //7.提交事务
        session.commit();
        System.out.println("修改记录的行数:"+rows);
        //8.关闭 SqlSession
        session.close();
}

3.MyBatis 对象分析

2.3.1

对象使用

SqlSession,SqlSessionFactory 等

Resources

Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返

回不同类型的 IO 流对象。

SqlSessionFactoryBuilder

SqlSessionFactory 的 创 建 , 需 要 使 用 SqlSessionFactoryBuilder 对 象 的 build() 方 法 。 由 于

SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将

该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。

SqlSessionFactory 接口

SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用

只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。

➢ openSession(true):创建一个有自动提交功能的 SqlSession

➢ openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交

➢ openSession():同 openSession(false)

SqlSession 接口

SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以

SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。

SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将

其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。

4. 创建工具类

因为每次都是那些重复的代码,我们可以将重复的代码进行封装,然后直接调用。

如下所示 返回的是一个 SqlSessionFactory 对象

package com.bjpowernode.utils;

import jdk.internal.util.xml.impl.Input;
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 factory = null;
    static {
        String config="mybatis.xml"; // 需要和你的项目中的文件名一样
        try {
            InputStream in = Resources.getResourceAsStream(config);
            //创建SqlSessionFactory对象,使用SqlSessionFactoryBuild
            factory = new SqlSessionFactoryBuilder().build(in);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    //获取SqlSession的方法
    public static SqlSession getSqlSession() {
        SqlSession sqlSession  = null;
        if( factory != null){
            sqlSession = factory.openSession();// 非自动提交事务
        }
        return sqlSession;
    }
}

通过测试工具,结果如下:

标签:SqlSessionFactory,对象,SqlSession,CURD,student,MyBatis,import,日志,SqlSessionFactory
From: https://www.cnblogs.com/atao-BigData/p/16862561.html

相关文章

  • 关闭favicon.ico" failed (2: No such file or directory)报错日志
    提示找不到favicon.ico,favicon.ico是网站的小图标,可有可无,这种错误其实没什么影响,没必要管他。奈何这个错误提示太多了,非常影响精准像素查看有用的错误提示,所以必须要关闭......
  • MyBatis框架快速入门-搭建环境,编写代码,测试。
    MyBatis框架快速入门1入门案例案例的结构如下:MyBatis开发准备搭建MyBatis开发环境,实现第一个案例2使用Mybatis准备下载mybatishttps://github.com/mybati......
  • MyBatis-架构概述,什么是框架,三层架构,JDBC
    MyBatis框架-第1章框架概述1.软件开发常用结构1.1三层架构三层架构包含的三层:界面层(UserInterfacelayer)、业务逻辑层(BusinessLogicLayer)、数据访问层(Dataacc......
  • Mybatis 入门
    MyBatis简介: MyBatis是一种JDBC的框架,为了让JDBC更加简洁,快速,易于维护。MyBatis主要从以下几个方面简化JDBC:1.把注册驱动和sql语句这些硬编码,在配置文件中完成2.把手......
  • 【单片机/嵌入式】【梁山派】学习日志07:位带操作
    位带操作一、位带操作介绍为了减少“读-改-写”操作的次数,Cortex-M4处理器提供了一个可以执行单原子比特操作的位带功能。存储器映射包含了两个支持位带操作的区域。其中......
  • 快速复习mybatis
    mybatis面试题1.MyBatis特性1)MyBatis是支持定制化SQL、存储过程以及高级映射的优秀的持久层框架2)MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集......
  • 学习笔记-日志
    日志前言在windows系统的运行过程中会不断记录日志信息,根据种类可以分为windows日志(事件日志)、应用程序及服务日志,这些日志信息在取证和溯源中非常重要。审核......
  • MyBatis简介与用途
    1.是一款持久性层框架,简化jdbc开发2.持久层:保证数据库的那一层代码(JAVAEE三层架构:表现层,业务层,持久层)3.框架:半成本软件,可套用的软件基础代码模型,在此基础上开发,效劳会更......
  • MyBatis--判断boolean类型实现动态sql--方法/实例
    简介        本文介绍MyBatis如何判断boolean类型实现动态sql。        使用MyBatis时,有时需要使用if标签判断boolean类型,从而决定是否拼接sql(动态查询)。代......
  • 关于rocketmq 中日志文件路径的配置
    rocketmq中的数据和日志文件默认都是存储在​​user.home​​路径下面的,往往我们都需要修改这些路径到指定文件夹以便管理。服务端日志网上搜索rocketmq日志存储路径的修改......