MyBatics-学习笔记

news2024/11/27 11:37:44

文章目录

      • 1.概念介绍
      • 2.Mybatis快速入门
          • 1.创建用户表
          • 2.创建模块导入坐标
          • 3.编写配置文件
          • 4.编写sql映射文件
          • 5.编码
      • 3.Mapper代理开发
      • 4.MyBatis核心配置文件
      • 5.商品增删改查案例(重点)
      • 6.参数传递
        • 6.2 多个参数

1.概念介绍

概念
MyBatis 是一款支持普通 SQL 查询、存储过程和高级映射的优秀持久层框架。

  • 它将 Java 对象和数据库中的数据映射起来,使得 Java 开发人员可以通过简单的 XML 或注解配置来控制 SQL 语句和映射关系,从而避免了传统的手写 JDBC 代码的繁琐和冗余。

JDBC缺点:
来源:https://www.bilibili.com/video/BV1Qf4y1T7Hx
在这里插入图片描述

Mybatis简化
在这里插入图片描述

2.Mybatis快速入门

在这里插入图片描述

1.创建用户表
drop table if exists tb_user;

create table tb_user(
	id int primary key auto_increment,
	username varchar(20),
	password varchar(20),
	gender char(1),
	addr varchar(30)
);



INSERT INTO tb_user VALUES (1, 'zhangsan', '123', '', '北京');
INSERT INTO tb_user VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user VALUES (3, '王五', '11', '男', '西安');


2.创建模块导入坐标
<dependencies>

        <!-- mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>
        <!-- mysql 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>

        <!-- 添加slf4j日志api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.20</version>
        </dependency>
        <!-- 添加logback-classic依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <!-- 添加logback-core依赖 -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>	

    </dependencies>
3.编写配置文件

在这里插入图片描述

<?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>

    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
        <mapper resource="com/itheima/mapper/UserMapper.xml"/>



    </mappers>


</configuration>
4.编写sql映射文件

https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Auto-mapping
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectBlog" resultType="Blog">
        select * from Blog where id = #{id}
    </select>
</mapper>
5.编码

定义pojo类(对象类),编写用户类
在这里插入图片描述
在这里插入图片描述

public class User {
    private Integer id;
    private String username;
    private String password;
    private String gender;
    private String addr;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getAddr() {
        return addr;
    }

    public void setAddr(String addr) {
        this.addr = addr;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", gender='" + gender + '\'' +
                ", addr='" + addr + '\'' +
                '}';
    }
}

查询操作

SqlSessionFactory接口:
用于创建 SqlSession 对象,是 MyBatis 的关键组件之一。它是一个线程安全的对象,可以在整个应用程序的生命周期中重复使用

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!--
namespace:名称空间
-->
<mapper namespace="test">
    <select id="selectAll" resultType="user">
        select * from tb_user;
    </select>
</mapper>
import com.itheima.pojo.User;
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;
import java.util.List;

//快速入门代码
public class MyBatisDemo {
    public static void main(String[] args) throws IOException {
        //1.加载核心文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取对应的SqlSession对象,用来执行ssql
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        List<User> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

        //4.释放资源
        sqlSession.close();




    }
}

在这里插入图片描述

3.Mapper代理开发

Mapper 代理开发是 MyBatis 框架中一种简化数据库操作的方式,通过动态代理技术将 SQL 语句与 Java接口进行绑定,实现数据库操作的简洁、灵活和类型安全。

  • 解决原生方式中的硬编码
  • 简化后期执行SQL

Mapper代理入门案例

  1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下
  2. 设置SQL映射文件的namespace属性为Mapper接口全限定名
  3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值 类型一致
  4. 编码
  • 通过SqISession的 getMapper方法获取Mapper接口的代理对象
  • 调用对应方法完成sql的执行

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

package com.itheima.pojo;


import com.itheima.mapper.UserMapper;
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;
import java.util.List;

public class UserDemo {
    public static void main(String[] args) throws IOException {

        //1.加载mybatis的核心配置文件,获取sqlSessionFactory
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2.获取SqlSession对象,用它来执行对象
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //3.执行sql
        //3.1 获取用户接口的代理对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = userMapper.selectAll();
        System.out.println(users);

        //4.释放资源
        sqlSession.close();

    }
}

在这里插入图片描述

4.MyBatis核心配置文件

在这里插入图片描述

<?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>

    <typeAliases>
        <package name="com.itheima.pojo"/>
    </typeAliases>

    <!--
    environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment
    -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库连接信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///mybatis_test?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

    </environments>
    <mappers>
        <!--加载sql映射文件-->
        <!-- <mapper resource="com/itheima/mapper/UserMapper.xml"/>-->
        <mapper resource="com/itheima/mapper/UserMapper.xml"/>

        <package name = "com.itheima.mapper"/>



    </mappers>


</configuration>
<configurationMyBatis核心配置文件的根元素,包含了整个配置信息。
<typeAliases类型别名的配置,用于给 Java 类型起别名,简化 XML 配置和映射文件中的类型引用。
.<package name=“com.itheima.pojo”/:指定一个包名,将该包下的类都注册为类型别名。
<environments:配置数据库连接环境信息,可以配置多个环境
<mappers:映射器的配置,用于加载 SQL 映射文件或注册映射器接口。

5.商品增删改查案例(重点)

案例完成品牌数据的增删改查;

JDBC操作如下:https://blog.csdn.net/meini32/article/details/131981238

Mybatis操作:https://blog.csdn.net/meini32/article/details/132095237

注解操作:

//查询操作
public interface BrandMapper {
    @Select("select * from tb_brand")
    List<Brand> selectAll();

6.参数传递

6.2 多个参数

定义接口

  • 使用@Param来标记参数名称,然后再映射文件中写出对应的;
  • 使用对象来指定参数
  • 使用map来指定参数
public interface BrandMapper {

    //使用 @Param 注解来指定参数的名称
    List<Brand> selectByMutiCondition(@Param("status")int status,@Param("companyName")String companyName,@Param("brandName")String brandName);
    
    //使用对象来指定参数
    List<Brand> selectByMutiCondition(Brand brand);  

   //使用map来指定参数
    List<Brand> selectByMutiCondition(HashMap map);
    

}

<!--
namespace:名称空间
-->

<mapper namespace="com.itheima.mapper.BrandMapper">

    <resultMap id="brandResultMap" type="brand">
        <result column="brand_name" property="brandName"/>
        <result column="company_name" property="companyName"/>
    </resultMap>

<!--    多条件查询-->
    <select id="selectByMutiCondition" resultMap="brandResultMap">
        SELECT * FROM tb_brand
        WHERE status = #{status} AND company_name LIKE #{companyName} AND brand_name LIKE #{brandName};
    </select>

</mapper>

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

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

相关文章

【构建卷积神经网络】

构建卷积神经网络 卷积网络中的输入和层与传统神经网络有些区别&#xff0c;需重新设计&#xff0c;训练模块基本一致 全连接层&#xff1a;batch784&#xff0c;各个像素点之间都是没有联系的。 卷积层&#xff1a;batch12828&#xff0c;各个像素点之间是有联系的。 impor…

LaTex使用技巧21:设置中文环境、字体、行间距和页边距

我在Overleaf上编写我的中文LaTex&#xff0c;设置了中文环境&#xff0c;字体、行间距以及页间距&#xff0c;记录一下方便以后查询。 使用中文环境命令为&#xff1a; \usepackage{xeCJK}可以使用Overleaf上支持的中文字体Fonts for CJK Chinese&#xff0c;设置字体的命令…

探究使用HTTP爬虫ip后无法访问网站的原因与解决方案

在今天的文章中&#xff0c;我们要一起来解决一个常见问题&#xff1a;使用HTTP爬虫ip后无法访问网站的原因是什么&#xff0c;以及如何解决这个问题。我们将提供一些实际的例子和操作经验&#xff0c;帮助大家解决HTTP爬虫ip无法访问网站的困扰。 1、代理服务器不可用 使用HT…

Debian 12.1 正式发布

导读Debian 12.1 现已发布&#xff0c;这是对稳定发行版 Debian 12&#xff08;代号 Bookworm &#xff09;的首次更新。本次发布主要增加了安全问题的修正&#xff0c;并对严重问题进行了一些调整。 一些更新内容包括&#xff1a; 妥善处理系统用户的创建&#xff1b;修复 eq…

ChatGLM-RLHF(五)-PPO(Proximal Policy Optimization)原理实现代码逐行注释

一&#xff0c;前言 从open AI 的论文可以看到&#xff0c;大语言模型的优化&#xff0c;分下面三个步骤&#xff0c;SFT&#xff0c;RM&#xff0c;PPO&#xff0c;我们跟随大神的步伐&#xff0c;来学习一下这三个步骤和代码实现&#xff0c;本章介绍PPO代码实现。 上章我们…

Java编程实践:实现Java接口的方法也建议加上@Override注解

说明 作为一个Java编程实践&#xff0c;实现接口的方法也强烈建议加上Override注解。这样做的好处&#xff1a; 阅读代码的时候&#xff0c;一眼就能看出来是新增的函数&#xff0c;还是实现接口的函数。加上Override注解&#xff0c;如果拼写错误&#xff0c;编译器马上就能…

电视盒子哪款好?内行整理超值网络电视盒子推荐

从事电视盒子这行已经五年了&#xff0c;很多朋友在挑选电视盒子时会咨询我的意见&#xff0c;我耗费半个月时间整理了超值网络电视盒子推荐&#xff0c;盘点目前最值得入手的五款电视盒子机型&#xff0c;想买电视盒子不知道电视盒子哪款好可以从下面五款中挑选&#xff1a; 榜…

VIM 编辑器: Bram Moolenaar

VIM 用了很长时间&#xff0c; 个人的 VIM 配置文件差不多10年没有更新了。以前写程序的时候&#xff0c; 编辑都用这个。 linux kernel&#xff0c; boost规模的代码都不在话下。现在虽然代码写的少了&#xff0c;依然是我打开文件的首选。 现在用手机了&#xff0c;配个蓝牙键…

idea中如何处理飘红提示

idea中如何处理飘红提示 在写sql时&#xff0c;总是会提示各种错误 查找资料&#xff0c;大部分都是说关提示&#xff0c;这里把错误提示选择为None即可 关掉以后&#xff0c;也确实不显示任何提示了&#xff0c;但总有一种掩耳盗铃的感觉 这个sms表明明存在&#xff0c;但是还…

android studio安卓真机调试

把usb 手机开启到usb调试模式,然后用usb线连接手机 安装adb 如果下载速度很慢,请使用vpn 终端需要先安装brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"使用brew安装adb brew install android-platfor…

面试遇到登录功能测试用例设计,你回答对了吗

给你一个登录功能&#xff0c;如何设计测试用例 哪怕是最常用最小的一个登录功能&#xff0c;其实涉及到的测试用例也是非常多的&#xff0c;这个题目通常会通过面试来考察求职者的综合能力&#xff0c;尤其是测试用例的设计思维&#xff0c;因为你即使你背了各种测试用例设计…

开发一款保护程序检测进程假死,精准打开保护的程序

网上很多保护程序都收费, 有免费的,可以将一般程序改成windows服务,我没用,应该很强大 功能点: 1,首先要有能加入保护程序的功能 2,不断的轮询检测程序是否已经运行 3,不断的轮询检测程序是否假死 4,一些其他检测 将保护的程序存入文件列表 保护程序运行时加载…

嵌入式开发学习(STC51-9-led点阵)

内容 点亮一个点&#xff1b; 显示数字&#xff1b; 显示图像&#xff1b; LED点阵简介 LED 点阵是由发光二极管排列组成的显示器件 通常应用较多的是8 * 8点阵&#xff0c;然后使用多个8 * 8点阵可组成不同分辨率的LED点阵显示屏&#xff0c;比如16 * 16点阵可以使用4个8 *…

恒盛策略:医药股反弹,掀涨停潮!

今天上午A股商场涨跌互现&#xff0c;上证指数一度显着跌落&#xff0c;但临近上午收盘时翻红。 作为行情风向标&#xff0c;券商板块盘中一度大幅跌落&#xff0c;但随后快速收窄跌幅&#xff0c;板块内分解较为显着&#xff0c;其中市值超越1000亿元的龙头券商之一的中金公司…

OPENCV C++(八)HOG的实现

hog适合做行人的识别和车辆识别 对一定区域的形状描述方法 可以表示较大的形状 把图像分成一个一个小的区域的直方图 用cell做单位做直方图 计算各个像素的梯度强度和方向 用3*3的像素组成一个cell 3*3的cell组成一个block来归一化 提高亮度不变性 常用SVM分类器一起使用…

HTML Emoji和Emoji 参考手册

HTML表情可以用来在网页中插入各种表情符号图标&#xff0c;丰富了网页表现形式和视觉效果。下面是一些常用HTML表情代码大全&#x1f4dc; Emoji 参考手册 HTML Emoji 扩展&#xff1a;&#x1f4cc; HTML 自定义实现emoji - (freesion.com)

native vlan tag设置错误,导致交换机无法访问

一同事找来&#xff0c;说他的一个测试交换机&#xff0c;下挂一些测试设备&#xff0c;能正常访问&#xff0c;但交换机的ip192.168.100.128却无法telnet访问&#xff0c;ping过去显示无法访问目的主机&#xff0c;让给看一下原因&#xff1f; 已知组网这个交换机接在交换机的…

用于实体对齐的联合学习实体和关系表示2019 AAAI 8.7+8.8

用于实体对齐的联合学习实体和关系表示 摘要介绍相关工作实体对齐图卷积网络 问题公式我们的方法整体架构初步实体对齐图卷积层对齐训练 近似关系表示联合实体和关系对齐 实验总结 摘要 实体对齐是在不同知识图之间集成异构知识的一种可行方法。该领域的最新发展通常采用基于嵌…

端口映射软件可以做什么?快解析如何设置端口映射?

说到端口映射&#xff0c;首先说说nat。简单地说&#xff0c;nat就是在局域网内部网络中使用内部地址&#xff0c;而当内部节点要与外部网络进行通讯时&#xff0c;就在网关处&#xff0c;将内部地址替换成公用地址&#xff0c;从而在外部公网&#xff08;internet&#xff09;…

网络系统观察之道

什么是“可观察性”&#xff1f; 当然&#xff0c;“可观察性”这个术语并不是我们发明的。我们最开始从用户那里听到这个概念&#xff0c;这些用户主要来自网站可靠性工程 (SRE) 社区。有些信息来源认为&#xff0c;这个术语起源于硅谷巨头&#xff08;如 Twitter&#xff09…