MyBatis学习笔记之首次开发及文件配置

这篇具有很好参考价值的文章主要介绍了MyBatis学习笔记之首次开发及文件配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MyBatis概述

框架

  • 在文献中看到的framework被翻译为框架
  • Java常用框架:
    • SSM三大框架:Spring + SpringMVC +MyBatis
    • SpringBoot
    • SpringCloud
    • 等。。
  • 枢架其实就是对通用代码的封装,提前写好子了一堆接口和类,我们可以在做项目的时候直接引入这些接口和类(引入框架),基于这些现有的接口和类进行开发,可以大大提高开发效率
  • 框架一般都法jar包的形式存在。(jar包中有class文件以及各种配置文件等。)
  • SSM三大框架的学习顺序:MyBatis、Spring.SpringMVC(仅仅是建议)

特点

  • 支持定制化SQL、存储过程、基本映射以及高级映射
  • 避免了几乎所有的JDBC代码中手动设置参数以及获取结果集
  • 支持XML开发,也支持注解式开发。【为了保证sql语句的灵活,所以mybatis大部分是采用XML方式开发。】
  • 将接口和Java的POJOs(Plain Ordinary Java Object,简单普通的Java对象)映射成数据库中的记录
  • 体积小好学:两个jar包,两个XML配置文件。
  • 完全做到sql解耦合。
  • 提供了基本映射标签。
  • 提供了高级映射标签。
  • 提供了XML标签,支持动态SQL的编写。

有关resources目录

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

开发步骤

  • 第一步:打包方式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.38</version>
	</dependency>
</dependencies>
  • 第三步:编写MyBatis核心配置文件:mybatis-config.xml

注意:
第一:这个文件名不是必须叫做mybatis-config.xml,可以用其他的名字。只是大家都采用这个名字。
第二:这个文件存放的位置也不是固定的,可以随意,但一般情况下,会放到类的根路径下。

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">
			<transactionHanager type="JDBC/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.cj.jdbc.Drivercom.mysql.cj.jdbc.Driver"/>	
				<property name="url" value="jdbc:mysql://localhost:3306/demo"/>//这个是找到mysql并找到要操作的数据库
				<property name="username" value="root"/>//mysql的账号
				<property name="password" value="root"/>//mysql的密码		
			</dataSource>
		</environment>
	</environments>
	<mappers>
	<mapper resource="CarMapper.xml"/>//配置Mapper的地方
	</mappers>
</configuration>
  • 第四步:编写XxxxMapper.xml文件。

在这个配置文件当中编写SQL语句
这个文件名也不是固定的,放的位置也不是固定的,这里给它起个名字,叫做CarMapper.xml
把它暂时放到类的根路径下。

<mapper namespace="fdsafdsa">//这个namespace暂时可以随便取
	<!--insert语句,id是这条SQL语句的唯一标识。这个id就代表了这条SQL语句。-->
	<insert id="insertCar">
		insert into t_car(id, car_num, brand, guide_price, produce_time ,car_type)
		values(null, '1083','丰田霸道',30.0," 2088-10-11','燃油车')
	</insert>
</mapper>
  • 第五步:在mybatis-config.xml文件中指定XxxxMapper.xml文件的路径:
<mapper resource="CarMapper.xml"/>

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


  • 第六步:开始编写MyBatis程序(使用mybatis的类库,编写mybatis程序,连接数据库,做增删改查就行了。)

从XML中构建SqlSessionFactory

从官方的这句话中,能想到什么

  • 第一:在MyBatis中一定是有一个很重要的对象,这个对象是:SqlSessionFactory对象。
  • 第二:SalSessionFactory对象的创建需要XML

XML是什么?

  • 他一定是一个配置文件

MyBatis中有两个主要的配置文件

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

  • t_user表,一般会对应一个UserMapper.xml
  • t_student表,一般会对应一个StudentMapper.xml

编写MyBatis程序

zaiMyBatis中,负责执行SQL语句的那个对象叫做什么?

  • SqlSession

SqlSession是专门用来执行SQL语句的,是一个Java程序和数据库之间的一次会话

要想获取SqlSession对象,需要先获取SqlSessionFactory对象,通过SqlSessionFactory工厂来实现SqlSession对象。

那如何获取SqlSessionFactory对象?
通过SqlSessionFactoryBuilder对象的build方法,来获取一个SqlSessionFactory对象。

mybatis的核心对象包括:

  • SqlSessionFactoryBuilder
  • SqlSessionFactory
  • SqlSession
    SqlSessionFacotryBuilder --> SqlSessionFactory -->SqlSession
public class MyBatisIntroductionTest {
	public static void main(string[] args) {
	//获取SqlSessionFactoryBuilder对象
	sqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
	//获取SqlSessionFactory对象
	//Inputstream is = new FileInputStream( name: "mybatis-config.xml文件的路径");
	InputStream is = Resources.getResourceAsStream( "mybatis-config.xml");
	//Resources.getResourceAsStream默认就是从类的根路径下开始查找资源
	SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
	//获取SqlSession对象
	SqlSession sqlSession = sqlSessionFactory.openSession():
	
	//执行SQL语句
	int count = sqlSession.insert( s: "insertCar"");//返回值是影响数据库表当中的记录条数。
	
	System.out.println("插入了几条记录:" + count);
	
	//手动提交
	sqlSession.commit();
	}
}

关于第一个程序的小细节

  • mybatis中sql语句的结尾";"可以省略。
  • Resources.getResourceAsStream

小技巧:以后凡是遇到resource这个单词,大部分情况下,这种加载资源的方式就是从类的根路径下开始加载。(开始查找)
优点:采用这种方式,从类路径当中加载资源,项目的移植性很强。项目从windows移植到linux,代码不需要修改,因为这个资源文件一直都在类路径当中。

  • InputStream is = new FileInputstream(“d:\lmybatis-config.xml”);

采用这种方式也可以。
缺点:可移植性太差,程序不够健壮。可能会移植到其他的操作系统当中。导致以上路径无效,还需要修改java代码中的路径。这样违背了OCP原则。

  • 己经验证了:

mybatis核心配置文件的名字,不一定是: mybatis-config.xml。可以是其它名字。
mybatis核心配置文件存放的路径,也不一定是在类的根路径下。可以放到其它位置。但为了项目的移植性,他壮性,最好将这个配置文件放到类路径下面。

  • 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.xm1");

  • CarMapper.xml文件的名字是固定的吗? CarMapper.xml文件的路径是固定的吗?

都不是固定的。
resource属性:这种方式是从类路径当中加载资源
url属性:这种方式是从绝对路径当中加载资源。

MyBatis的事务管理机制

  • 在mybatis-config.xml文件中,可以通过以下的配置进行mybatis的事务管理
<transactionMapper type="JDBC"/>
  • type属性的值就包括两个:JDBC和MANAGED(大小写无所谓)
  • 在mybatis中提供了两种事务管理机制:JDBC事务管理器,MANAGED事务管理器

只要autoCommit是true,就表示没有开启事务。
只有autoCommit是false的时候,就表示开启了事务。

JDBC

mybatis框架自己管理事务,自己采用原生的JDBC代码去管理事务

conn.setAutoCommit(false);//开启事务
//...业务处理...
conn.commit();//手动提交事务

如果编写的是下面的代码

SqlSession sqlSession = sqlSessionFactory.openSession(true);

表示的是没有开启事务,因为这种方式压根不会执行:conn.setAutoCommit(false);
在JDBC事务中,没有执行conn.setAutoCommit(false);那么autoCommit就是true。
如果autoCommit是true,就表示没有开启事务。只要执行任意一条DML语句就要提交一次。

如果你没有在JDBC代码中执行:conn.setAutoCommit(false);的话,默认的autoCommit是false

MANAGED

mybatis不再负责事务的管理了,事务管理交给其他容器来负责,例如:spring,

我不管事务了,你来负责把

对于我们当前的单纯的只有mybatis的情况下,如果配置为:MANAGED
那么事务这块是没人管的。没有人管理事务表示事务压根没开启

编写一个较为完整的mybatis

package org.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisCompleteText {
    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 (Exception e) {
            //最好回滚事务
            if (sqlsession != null) {
                sqlsession.rollback();
            }
            e.printStackTrace();
        }
		finally {
            //关团会话(释放资源>
            if (sqlsession != null) {
                sqlsession.close();
            }
        }
    }
}

junit测试

为了保证自己写的模块方法没问题,需要对其进行测试

单元测试方法写多少个
一般是一个业务方法对应一个测试方法
测试方法的规范:public void testXxxx(){}
测试方法的方法名:以test开始,假设测试的方法是sum,这个测试方法名:testSum
@Test注释非常重要,被这个注解标注的方法就是一个单元测试方法


单元测试中有两个重要的概念
一个是实际值(被测试的业务方法的真正执行结果)
一个是期望值(执行了这个业务方法之后,你期望的执行结果是多少)

//写的模块
package org.example;

public class MathServer {
    public int sum(int a,int b){
        return a+b;
    }
    public int sub(int a, int b){
        return a-b;
    }
}
//测试
package service;

import org.example.MathServer;
import org.junit.Assert;
import org.junit.Test;

public class MathServerTest {
    @Test
    public void testSum(){
        MathServer mathServer = new MathServer();
        //获取实际值
        int actual = mathServer.sum(1,2);
        //获取期望值
        int expected = 3;
        //加断言进行测试
        Assert.assertEquals(expected,actual);
    }

    @Test
    public void testSub(){
        MathServer mathServer = new MathServer();
        //实际值
        int actual = mathServer.sub(10,5);
        //期望值
        int expected = 5;
        Assert.assertEquals(expected,actual);
    }
}

MyBatis学习笔记之首次开发及文件配置,javaweb,mybatis,学习,笔记
绿色测试通过

mybatis集成日志组件

这玩意能让我们调试起来更加方便

在核心配置文件里面(mybatis-config.xml)中配置settings
这是MyBatis中极为重要的调整设置,它们会改变MyBatis的运行时行为。
链接:https://mybatis.net.cn/configuration.html#settings

↑可以查看settings中可以设置什么,以及它的作用

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--开启mybatis自己对日志的实现-->
    </settings>

常见的mybatis集成日志组件有哪些呢?(在上面代码value中设置的还有啥)

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

其中STDOUT_LOGGING是标准日志,mybatis已经实现了这种标准日志,mybatis框架本身已经实现了这种标准
what is more标签是有它的顺序的在configuration标签中得按照它的标签顺序进行排序,不然会报错


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

  • 第一步:引入logback的依赖
<!--第一次引入也挺快的-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.11</version>
</dependency>
  • 第二步:引入logback所必须的xml配置文件
    这个配置文件的名字必须叫做:logback.xml或logback_test.xml,不能是其他的名字
    这配置文件必须放到类的根路径下,不能是其他的位置。

注意注意,不要用1.4开头的那个版本,会出现输出不了日志的情况文章来源地址https://www.toymoban.com/news/detail-592309.html

<!--logback配置文件的内容-->
<?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>%d{yyyy-MM-dd HH:mm: ss.SSS} [%thread] %-5level %logger{50} - %msg8n</pattern>
        </encoder>
    </appender>
    <!--按照每天生成日志文件-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
           <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yYvy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度Xmsg:日志消息,%n是换行符--><pattern>%d{yyyy-MMN-dd HH:mm:ss.ssS} [%thread] %-5level %logger{50}- %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.sizeBasedTriggeringPolicy">
            <MaxFilesize>100MB</MaxFilesize>
        </triggeringPolicy>
    </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>

到了这里,关于MyBatis学习笔记之首次开发及文件配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解MyBatis配置文件开发与注解式开发

    一.框架介绍 MyBatis 的主要特点 二.MyBatis工作流程 1. 初始化和配置 2. 创建 SqlSessionFactory 3. 获取 SqlSession 4. 映射器绑定 5. 执行操作 6. 处理结果 7. 提交或回滚事务 8. 释放资源 示例 注意事项  三.核心配置文件 四.配置文件开发 五.注解式开发 1. 配置 Mapper 扫描 2. 使用注解定义

    2024年04月27日
    浏览(31)
  • Mybatis——Javaweb进阶学习(五)

    首先我们要先创建springboot工程,选择mysql和mybatis驱动 然后创建sql表,插入数据 实体类的创建,pojo包 在mapper文件夹,相当于dao层,编写,UserMapper接口 @Mapper会自动进入容器,注释@Select来进行编写 在测试类中进行单元测试: 我们看见User类,是不是除了属性,还要写get,set方法

    2024年02月20日
    浏览(32)
  • Java企业级开发学习笔记(2.1)MyBatis实现简单查询

    零、创建数据库与表 在Navicat里创建MySQL数据库testdb 创建用户表 - t_user CREATE TABLE t_user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) DEFAULT NULL, age int(11) DEFAULT NULL, address varchar(255) DEFAULT NULL, PRIMARY KEY ( id ) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; 执行SQL语句来创建用户表 INSERT IN

    2024年02月09日
    浏览(76)
  • Mybatis学习笔记1 Mybatis入门

    差不多根据mybatis中文文档:创建第一个mybatismaven项目,将它跑起来 入门_MyBatis中文网 新建库 建表 创建项目 重启之后 配置下Maven与encoding  成习惯了 新建模块 注意:这个GroupId和ArtifactId  version是之后,你用Maven install时候后存放的包路径和包名 目录结构:虽然换了JDK17但是编译器版

    2024年02月07日
    浏览(27)
  • 【MyBatis】1、MyBatis 核心配置文件、多表查询、实体映射文件 ......

    SSM( S pring、 S pringMVC、 M yBatis) Apache Shiro SpringBoot 事务 :若将 N 个 数据库操作 (CRUD)放到同一个事务中,则这 N 个数据库操作最终要么全都生效,要么全都不生效 🍀 开启事务【 START TRANSACTION 】 🍀 回滚事务:若事务中的某个数据库操作失败,其他所有数据库操作都需要

    2024年02月08日
    浏览(65)
  • MyBatis基础知识和快速入门、MyBatis核心配置文件讲解

    什么是Mybatis MyBatis 是一个优秀的基于java的 持久层框架 ,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中

    2024年02月04日
    浏览(80)
  • Mybatis核心配置文件介绍

    核心配置文件包含了 MyBatis 最核心的设置和属性信息 properties标签引入外部文件 具体使用,如下配置   typeAliases:为全类名起别名的父标签。 typeAlias:为全类名起别名的子标签。 属性 type:指定全类名 alias:指定别名 package:为指定包下所有类起别名的子标签。(别名就是类名

    2024年02月17日
    浏览(40)
  • mybatis核心配置文件解读

    目录 标签具体含义  数据源dataSource  properties导入配置 配置文档的顶层结构如下(必须严格按照以下顺序): configuration(配置)     properties(属性)     settings(设置)     typeAliases(类型别名)     typeHandlers(类型处理器)     objectFactory(对象工厂)     plugins(插件

    2024年02月16日
    浏览(38)
  • Mybatis学习笔记一

    MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录 MyBatis 是

    2024年02月07日
    浏览(21)
  • MyBatis学习笔记之缓存

    缓存 :cache 缓存的作用 :通过减少IO的方式,来提高程序的执行效率 mybatis的缓存 :将select语句的查询结果放到缓存(内存)当中,下一次还是这一条select语句的话,直接从缓存中取,不再查数据库。一方面是减少了IO。另一方面不再执行繁琐的查找算法,效率大大提升。

    2024年02月15日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包