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

news2024/9/23 1:38:10

基本配置

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.coloradmin.cn/o/1249156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【华为数通HCIP | 网络工程师】821-IGP高频题、易错题之OSPF(5)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

周报6_YMK

周报6 本周主要在看代码&#xff1a;看Medusa头的代码发现不是很了解base_model那部分&#xff0c;所以又去看了llama2的代码和一些相关博客。 重写了一部分佛山中医学院项目的代码&#xff0c;更规范一些。 调研CosmoFlow&#xff0c;是一个深度学习预测宇宙参数的模型&…

面试题:Java 对象不使用时,为什么要赋值 null ?

文章目录 前言示例代码运行时栈典型的运行时栈Java的栈优化提醒 GC一瞥提醒 JVM的“BUG”总结 前言 最近&#xff0c;许多Java开发者都在讨论说&#xff0c;“不使用的对象应手动赋值为null“ 这句话&#xff0c;而且好多开发者一直信奉着这句话&#xff1b;问其原因&#xff…

python命令行交互 引导用户选择宠物

字多不看&#xff0c;直接体验 代码 以下代码将在命令行中&#xff0c;引导用户选择一个或者多个宠物&#xff0c;并反馈用户选择的宠物 # -*- coding:UTF-8 -*- """ author: dyy contact: douyaoyuan126.com time: 2023/11/22 15:19 file: 在命令行中引导用户…

实例分割12篇顶会论文及代码合集,含2023最新

同学们&#xff0c;你们觉得视觉经典四个任务中哪个最难&#xff1f;我个人觉得是实例分割。 因为它既具备语义分割的特点&#xff0c;需要做到像素层面上的分类&#xff0c;也具备目标检测的一部分特点&#xff0c;即需要定位出不同实例&#xff0c;即使它们是同一种类。 但…

C# 时间计算(二)

目录 五、时间比较 六、时间数据转换 七、时间间隔计算 八、获取网络时间 九、时间戳 十、时区时间 结束 概述 在 C# 中&#xff0c;DateTime 用于处理日期和时间的内置类&#xff0c;其值范围为 00&#xff1a;00&#xff1a;00 (午夜) &#xff0c; 0001年1月1日&…

高压放大器应用领域分享:关于电磁波的极化,看这篇文章就够了!

谈到电磁波&#xff0c;除了频率和幅度之外&#xff0c;还有一个比较重要的方面就是&#xff1a;极化。极化&#xff0c;就是指波振动的平面&#xff0c;电磁波的传播是由相互垂直的电场和磁场产生的。因此存在电场和磁场两个相互垂直的振荡平面&#xff0c;所以呢&#xff0c;…

力扣 3. 无重复字符的最长子串

题目 题解 方法 public static int lengthOfLongestSubstring(String s) {HashSet<Character> charSet new HashSet<Character>();int i 0,l0,max0;for (int j 0; j < s.length(); j) {while (charSet.contains(s.charAt(j))) {charSet.remove(s.charAt(l…

一个干净的前端架构是什么样的?

干净的前端架构,围绕这个话题有很多原则&#xff1a; SOLID、KISS&#xff08;保持简单明了&#xff09;、DRY&#xff08;不要重复自己&#xff09;、DDD&#xff08;领域驱动设计&#xff09;等等。 为什么需要前端架构&#xff1f; 功能性和非功能性的要求不仅应该在后端…

如何处理git多分支

本篇文章主要处理以下两种多分支问题 如何将自己在本地的修改上传到一个新的Git分支&#xff08;比如用于测试&#xff0c;不合并进main分支&#xff09;&#xff1f;如何在一个新的本地仓库拉取一个项目的非main分支&#xff0c;并处理他们关联关系&#xff1f; 1. 将自己在…

智能条件单具体操作步骤,解放你投资双手!

一般我们说到量化交易都觉得很困难&#xff0c;写策略难&#xff0c;看python难&#xff0c;不会使用程序难&#xff0c;电脑交易不方便难&#xff0c;今天我们来看看手机电脑都可以使用的量化基础条件单的操作。迈入量化第一步&#xff0c;条件单的使用。 很多投资者不清楚条件…

C语言——输入一个4位正整数,输出其逆数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("输入一个4位正整数&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

SQL 语句 UNION 连接,查询字段数量必须一致

MySQL&#xff1a;The used SELECT statements have a different number of columns 执行SQL报错&#xff1a;The used SELECT statements have a different number of columns 以上翻译&#xff1a;使用的SELECT语句具有不同数量的列 原因&#xff1a;我们在 SQL 语句中使用…

Java 简单配置环境变量,切换多个jdk版本

文章目录 前言一、jdk下载二、配置环境变量三、查看jdk版本四、配置多个jdk五、切换jdk 前言 windows 配置jdk环境变量&#xff0c;如果项目没有规定使用的jdk版本的话&#xff0c;建议使用jdk8&#xff0c;这是最常用也是最稳定的版本 一、jdk下载 https://www.oracle.com/ja…

APP软件线上排查方法

在线上环境中排查APP软件的问题是一项关键任务&#xff0c;需要使用一系列方法和工具来识别、定位和解决问题。以下是一些建议的排查方法&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.监控和日志…

38 关于 redo 日志

前言 undo 和 redo 是在 mysql 中 事务, 或者 异常恢复 的场景下面 经常会看到的两个概念 这里 来看一下 redo, redo 主要是用于 异常恢复 的场景下面 测试表结构如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NULL…

2023年【山东省安全员C证】考试试卷及山东省安全员C证考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【山东省安全员C证】考试试卷及山东省安全员C证考试试题&#xff0c;包含山东省安全员C证考试试卷答案和解析及山东省安全员C证考试试题练习。安全生产模拟考试一点通结合国家山东省安全员C证考试最新大纲及山东…

测绘资质工程测量乙级资质办理条件

新测绘资质分为10个专业&#xff1a; 1.大地测量 2.测绘航空摄影 3.摄影测量与遥感 4.工程测量 5.海洋测绘 6.界线与不动产测绘 7.地理信息系统工程 8.地图编制 9.导航电子地图制作 10.互联网地图服务。 新《测绘资质管理办法》和《测绘资质分类分级标准》&#xff…

HTML5+CSS3+JS小实例:蜂巢里的小蜜蜂光标特效

实例:蜂巢里的小蜜蜂光标特效 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

quickapp_快应用_DOM是否显示只能通过if指令!

目录 官网概念语法拓展使用三元表达式控制示例 官网 if指令 概念 if条件指令用于控制是否增加或者删除组件。 语法 <组件名 ifbol><组件名>上述语法中只要bol值为ture则显示该组件&#xff0c;若是bol值为false则不显示该组件(并将其从DOM结构中移除)。 拓展…