【2023.11.24】Mybatis基本连接语法学习➹

基本配置

1.如果使用Maven管理项目,需要在pom.xml中配置依赖。

2.安装Mybatis-3.5.7.jar包

3.进行XML配置:这里将文件命名为mybatis-config.xml

配置数据库连接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="${驱动类(含包名)}"/>
        <property name="url" value="${数据库连接URL}"/>
        <property name="username" value="${用户名}"/>
        <property name="password" value="${密码}"/>
      </dataSource>
    </environment>
  </environments>

    <mappers>
        <mapper url = "file:src/com/test/mapper/TestMapper.xml"/>
        <!--    存放映射器XML文件   -->
    </mappers>

</configuration>

其中mappers标签内存放XML映射器文件

编写Java主函数

package com.test;

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

import java.io.FileInputStream;
import java.io.FileNotFoundException;


public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            System.out.println(sqlSession.selectList("getArtist"));//括号内填写SQL映射语句的id
        }
    }
}

1.从 XML 中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得,创建SqlSessionFactory时会调用xml配置文件。

2.从 SqlSessionFactory 中获取 SqlSession

我们可以从中获得 SqlSession 的实例。SqlSession 提供了在数据库执行 SQL 命令所需的所有方法。

你可以通过 SqlSession 实例来执行已映射的 SQL 语句。SQL语句的映射需要编写映射器XML文件

编写映射器(mapper)的XML文件

<?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="src/com/test/mapper/TestMapper.xml"><!--区分不同映射器-->
    <!--条件查询-->
    <select id="getArtist" resultType="String">
        select aName from artist<!--填写SQL语句,里面的变量都是数据库的表名和字段名-->
    </select>
</mapper>

注:若xml配置文件中出现找不到映射器文件的情况,注意配置文件中mapper标签内的映射器引用格式。


接口函数

编写映射器接口:

package com.test.mapper;

import com.test.artist;

import java.util.List;

public interface TestMapperInterface {
    List<artist> selectArtist();
    artist getArtistById(int a);
    int addArtist(artist newArtist);
    int deleteArtist(int d);
}

要让映射器关联上映射器接口,只需要修改映射器的namespace为接口地址:

<?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.test.mapper.TestMapperInterface">
      <resultMap id="test" type="com.test.artist">
                <result column="aID" property="aID"/>
            </resultMap>
            <select id="selectArtist" resultMap="test">
                select * from artist
            </select>

    <!--条件查询-->
        <select id="getArtistById" resultMap="test">
        select * from artist where aID = #{a}<!--接口形参名-->
        </select>

    <!--插入操作-->
        <insert id="addArtist">
        insert into artist(aID,aName,asex) values (#{aID},#{aName},#{asex})
        </insert>

    <!--删除操作-->
        <delete id="deleteArtist" parameterType="com.test.artist">
        delete from artist where aID = #{d}
        </delete>

</mapper>

接口中的方法会自动对应上映射器中的SQL执行语句id

修改配置文件中的mapper路径:

<mapper resource = "com/test/mapper/TestMapper.xml"/>
因为接口的命名空间通常是在类路径下的某个位置,所以这里要将URL改成 resource

主函数调用映射器接口:

package com.test;

import com.test.mapper.TestMapperInterface;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("src/mybatis-config.xml"));
        try (SqlSession sqlSession = sqlSessionFactory.openSession(true)){
            TestMapperInterface mapper = sqlSession.getMapper(TestMapperInterface.class);
            mapper.selectArtist().forEach(System.out::println);
            System.out.println("\n");
            System.out.println(mapper.getArtistById(2089));
        }
    }
}

MyBatis与JDBC的差异

JDBC和Mybatis优缺点对比
JDBCMybatis
DriverManager驱动类连接数据库,java代码与数据库耦合

配置xml文件中连接数据库,使得java代码与数据库分离

Statement对象中执行SQL语句,java代码与SQL语句耦合映射器的xml文件中执行SQL语句,使得java代码与SQL语句分离
ResultSet对象中接收SQL语句结果,每条结果需要指针遍历。直接通过SqlSession中的方法接收SQL语句结果,结果是一个集合

综上,相比于JDBC所有功能都在java代码中执行,Mybatis尽管结构更加复杂,但每个文件负责不同的功能,更加便于管理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/185496.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据结构-归并排序+计数排序

1.归并排序 基本思想&#xff1a; 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列有序&#xff0c;再使子序列段间有序。若将两个有序表合并成一个…

Relabel与Metic Relabel

Prometheus支持多种方式的自动发现目标&#xff08;targets&#xff09;&#xff0c;以下是一些常见的自动发现方式&#xff1a; 静态配置&#xff1a;您可以在Prometheus配置文件中直接列出要监测的目标。这种方式适用于目标相对稳定的情况下&#xff0c;例如固定的服务器或设…

【多线程】Thread类的使用

目录 1.概述 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程-start() 5.中断一个线程 5.1通过共享的标记来进行沟通 5.2 调用 interrupt() 方法来通知 6.等待一个进程 7.获取当前线程引用 8.线程的状态 8.1所有状态 8.2线程状态和转移的意义 1.概述 …

字节序

计算机硬件有两种储存数据的方式&#xff1a;大端字节序big endian 和 小端字节序 little endian。 数值0x2211使用两个字节储存&#xff1a;高位字节是0x22&#xff0c;低位字节是0x11。 大端字节序&#xff1a;低位放高地址&#xff0c;高位字节在低地址&#xff0c;地址空间…

JDBC编程方法及细节

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言用于连接和操作数据库的API&#xff08;Application Programming Interface&#xff09;。它为开发人员提供了一组Java类和接口&#xff0c;用于与各种关系型数据库进行通信。使用JDBC&#xff0c;开发人…

路径规划之Best-First Search算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之Best-First Search算法 系列文章目录前言一、Best-First Search算法1.1 起源1.2 过程 三、简单使用 前言 Best-First Search算法和Dijkstra算法类似&#xff0c;都属于BFS的扩展或改进 一、…

【Python进阶笔记】md文档笔记第6篇:Python进程和多线程使用(图文和代码)

本文从14大模块展示了python高级用的应用。分别有Linux命令&#xff0c;多任务编程、网络编程、Http协议和静态Web编程、htmlcss、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。 全套md格式笔记和代码自…

【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景

文章目录 一、collect_set()/collect_list():二、实际运用1、创建测试表及插入数据 :举例1&#xff1a;按照id&#xff0c;cur_day分组&#xff0c;取出每个id对应的所有rule&#xff08;不去重&#xff09;。举例2&#xff1a;按照id&#xff0c;cur_day分组&#xff0c;取出每…

【Unity入门】碰撞检测

碰撞器由来 1.系统默认会给每个对象(GameObject)添加一个碰撞组件(ColliderComponent)&#xff0c;一些背景对象则可以取消该组件。 2.在unity3d中&#xff0c;能检测碰撞发生的方式有两种&#xff0c;一种是利用碰撞器&#xff0c;另一种则是利用触发器。这两种方式的应用非…

左孩子右兄弟(Java详解)

目录 一、题目描述 二、题解 一、题目描述 对于一棵多叉树&#xff0c;我们可以通过“左孩子右兄弟” 表示法&#xff0c;将其转化成一棵二叉树。 如果我们认为每个结点的子结点是无序的&#xff0c;那么得到的二叉树可能不唯一。 换句话说&#xff0c;每个结点可以选任意子结…

论文导读 | 10月专题内容精选:人的预测

编者按 本次论文导读&#xff0c;编者选择了10月份OR和MS上与"人的预测"有关的三篇文章&#xff0c;分别涉及群体智慧的提取&#xff0c;个体序列预测的评估&#xff0c;以及决策者对风险的扭曲感知在分布式鲁棒优化中的应用。其中&#xff0c;从基于"生成式可能…

红队攻防实战之从边界突破到漫游内网(无cs和msf)

也许有一天我们再相逢&#xff0c;睁大眼睛看清楚&#xff0c;我才是英雄。 本文首发于先知社区&#xff0c;原创作者即是本人 本篇文章目录 网络拓扑图&#xff1a; 本次红队攻防实战所需绘制的拓扑图如下&#xff1a; 边界突破 访问网站&#xff1a; http://xxx.xxx.xxx…

Flink 常用物理分区算子(Physical Partitioning)

Flink 物理分区算子(Physical Partitioning) 在Flink中&#xff0c;常见的物理分区策略有&#xff1a;随机分配(Random)、轮询分配(Round-Robin)、重缩放(Rescale)和广播(Broadcast)。 接下来&#xff0c;我们通过源码和Demo分别了解每种物理分区算子的作用和区别。 (1) 随机…

2024北京林业大学计算机考研分析

24计算机考研|上岸指南 北京林业大学 特色优势 Characteristics & Advantages&#xff1a;信息学院创建于2001年&#xff0c;是一个年轻而有朝气的学院。学院秉承“结构、特色、质量、创新”的八字方针&#xff0c;坚持以“质量提升、行业融合”为核心的内涵式发展战略&am…

Pycharm创建项目新环境,安装Pytorch

在python项目中&#xff0c;很多项目使用的各类包的版本是不一致的。所以我们可以对每个项目有专属于它的环境。所以这个文章就是教你如何创建新环境。 一、创建新环境 首先我们需要去官网下载conda。然后在Pycharm下面添加conda的可执行文件。 用conda创建新环境。 二、…

libmosquitto库的一个bug,任务消息id(mid)分配后不起作用

代码如图所示: 当订阅了所有主题后,每个主题的mid是他们的下标索引加100的数字,可是实际打印出来的值是: mid依然是1,2,这个参数在这里失效了,不知道是bug还是mqtt的什么机制?

Python之Pygame游戏编程详解

一、介绍 1.1 定义 Pygame是一种流行的Python游戏开发库&#xff0c;它提供了许多功能&#xff0c;使开发人员可以轻松创建2D游戏。它具有良好的跨平台支持&#xff0c;可以在多个操作系统上运行&#xff0c;例如Windows&#xff0c;MacOS和Linux。在本文中&#xff0c;我们将…

Linux后台运行Python的py文件,如何使ssh工具退出后仍能运行

常规运行 python3 mysqlbak.py ssh工具退出后&#xff0c;或ctrlc中断后&#xff0c;程序将不在运行 后台运行 nohup python3 mysqlbak.py > mysqlbak.log & > mysqlbak.log为可选项&#xff0c;输出日志到指定文件&#xff0c;如果不写&#xff0c;输出日志到nohup…

【Seata源码学习 】篇四 TM事务管理器是如何开启全局事务

TM发送 单个或批量 消息 以发送GlobalBeginRequest消息为例 TM在执行拦截器链路前将向TC发送GlobalBeginRequest 消息 io.seata.tm.api.DefaultGlobalTransaction#begin(int, java.lang.String) Overridepublic String begin(String applicationId, String transactionServi…

网络安全工程师究竟是什么?怎么入门?

首先啊骚年们我们必须先了解网络安全这个行业究竟是干啥的。 是打ctf的&#xff1f;一个个都像韩商言吴白那么帅刷刷敲几个代码就能轻易夺旗&#xff1f; 还是像十大黑客之一的米特尼克一样闯入了“北美空中防务指挥系统”的计算机主机内&#xff0c;还在被通缉逃跑期间控制了…