快速入手mybits(xml配置文件版本)

news2024/9/20 16:51:51

目录

Blue的留声机

1、快速入手

第一步:导依赖

第二步:配置mybits-config.xml文件

 第三步:编写sql映射文件BlogMapper.xml

第四步:编写运行文件,执行sql

2、Mapper代理开发(企业中最常用)

mapper开发规则

概览:

第一步:定义与sql映射文件同名的Mapper接口

第二步:将xml中的namespace属性换成Mapper接口全限名称

第三步:编码

3、问题解决大全

一、如果实体类字段和数据库字段名不同,如何解决

二、如何将xml中的参数与mapper层的参数对应(单个参数)

单个参数:

参数占位符:

特殊字符处理:

总结:

三、如何将xml中的参数与mapper层的参数对应(多个参数)

第一种:利用注解@Param

第二种:如果传递的参数来自同一个对象,直接传对象

第三种:封装成map集合

4、动态条件查询

if标签

where标签

choose标签:单条件动态查询

修改动态字段


Blue的留声机

🎀🎀Hello,各位小伙伴们,好久不见,最近一直忙碌的去学东学西,就没啥时间写文章了,今天给各位带来的是xml版本去使用mybits,我们经常使用注解的方法去开发,但是这对于企业是远远不够的,所以学会使用xml配置文件的方式去使用mybits,显得尤为重要。所以俺,就带来了一篇自己的mybits笔记,相信这篇笔记以及黑马的视频,各位上手mybits,如鱼得水!!🎀🎀

视频推荐:

黑马mybatis视频

1、快速入手

第一步:导依赖

<!--  mybits依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.14</version>
        </dependency>
     <!--mysql驱动-->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.3.0</version>
        </dependency>
    </dependencies>

引入一点其他的依赖,测试用

<!--        添加slf4j日志api-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.13</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.5.6</version>
        </dependency>

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.5.6</version>
        </dependency>

第二步:配置mybits-config.xml文件

根据mybits中文网入门教程:入门_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>
    <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://localhost:3306/itheima"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        加载sql映射文件-->
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
    </mappers>
</configuration>

 第三步:编写sql映射文件BlogMapper.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="test">
    <select id="selectBlog" resultType="Dao.Blog">
        select * from blog
    </select>
</mapper>

第四步:编写运行文件,执行sql

import Dao.Blog;
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 mybitsdemo {
    public static void main(String[] args) throws IOException {
//        1、加载mybits的核心配置文件,获取SqlsessionFactory
        String resource = "mybits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//        2、获取sqlsession对象
        SqlSession session =sqlSessionFactory.openSession();

        //3、执行sql语句
        List<Blog> Blog = session.selectList("test.selectBlog");//BlogMapper.xml中的namespace.下面的id

        System.out.println(Blog);

        //4、释放资源
        session.close();

    }
}

2、Mapper代理开发(企业中最常用)

mapper开发规则

概览:

第一步:定义与sql映射文件同名的Mapper接口

第二步:将xml中的namespace属性换成Mapper接口全限名称

第三步:编码
//mybits的代理开发
public class mybatsdemo2 {
    public static void main(String[] args) throws IOException {
//        1、加载mybits的核心配置文件,获取SqlsessionFactory
        String resource = "mybits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//        2、获取sqlsession对象
        SqlSession session =sqlSessionFactory.openSession();

        //3、执行sql语句
        BlogMapper mapper = session.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.selectBlog();
        System.out.println(blogs);

        //4、释放资源
        session.close();

    }
}

3、问题解决大全

一、如果实体类字段和数据库字段名不同,如何解决

利用resultMap标签,id自己取名字,type对应类的名称,result标签中column对应数据库的字段名,property对应java代码里面的类的字段名。然后在我们写代码的区域中在<select>代码中加resultMap后跟id名称。

当然还要id标签,<id>,这个是对主键的<result>对应平常的字段名

二、如何将xml中的参数与mapper层的参数对应(单个参数)

单个参数:

利用占位符直接写

Mapper层:

public interface BlogMapper {
   List<Blog> selectBlog(int id);
}

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="Mapper.BlogMapper">
    <select id="selectBlog" resultType="Dao.Blog">
        select * from blog where id =#{1}
    </select>
</mapper>

参数占位符:

特殊字符处理:

有时候需要>或者<或者其他特殊字符写在xml的sql语句中,但这样直接写,是不允许的,这样就提供了两种方式去写,我比较推荐第二种:CDATA区

将<号,写在CDATA区域中。

总结:

三、如何将xml中的参数与mapper层的参数对应(多个参数)

第一种:利用注解@Param

mapper层:

public interface BlogMapper {
   List<Blog> select(@Param("value1") int id,@Param("value2") String ws);
}

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="Mapper.BlogMapper">
   
    <select id="select" resultType="Dao.Blog">
        select * from blog where id=#{value1} and name =#{value2}
    </select>
</mapper>

第二种:如果传递的参数来自同一个对象,直接传对象

启动层:

//mybits的代理开发
public class mybatsdemo2 {
    public static void main(String[] args) throws IOException {
//        1、加载mybits的核心配置文件,获取SqlsessionFactory
        String resource = "mybits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//        2、获取sqlsession对象
        SqlSession session =sqlSessionFactory.openSession();
        Blog blog =new Blog(1,"苏苏");

        //3、执行sql语句
        BlogMapper mapper = session.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.select(blog);
        System.out.println(blogs);

        //4、释放资源
        session.close();

    }
}

Mapper层:

public interface BlogMapper {
   List<Blog> select(Blog blog);
}

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="Mapper.BlogMapper">

    <select id="select" resultType="Dao.Blog">
        select * from blog where id=#{id} and name =#{name}
    </select>
</mapper>

第三种:封装成map集合

启动层:

//mybits的代理开发
public class mybatsdemo2 {
    public static void main(String[] args) throws IOException {
//        1、加载mybits的核心配置文件,获取SqlsessionFactory
        String resource = "mybits-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

//        2、获取sqlsession对象
        SqlSession session =sqlSessionFactory.openSession();
        Map map =new HashMap();
        map.put("id",1);
        map.put("name","苏苏");

        //3、执行sql语句
        BlogMapper mapper = session.getMapper(BlogMapper.class);
        List<Blog> blogs = mapper.select(map);
        System.out.println(blogs);

        //4、释放资源
        session.close();

    }
}

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="Mapper.BlogMapper">

    <select id="select" resultType="Dao.Blog">
        select * from blog where id=#{id} and name =#{name}
    </select>
</mapper>

mapper:

public interface BlogMapper {
   List<Blog> select(Map map);
}

4、动态条件查询

if标签

<?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="Mapper.BlogMapper">
    <select id="select" resultType="Dao.Blog">
        select * from blog
        where
        <if test="id !=null"> id=#{id} </if>
        <if test="name!=null and name!= ''">and name=#{name}</if>
    </select>
</mapper>

where标签

解决if标签里面会出现多余and的问题

<?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="Mapper.BlogMapper">
    <select id="select" resultType="Dao.Blog">
        select * from blog
        <where>
        <if test="id !=null"> and id=#{id} </if>
        <if test="name!=null and name!= ''">and name=#{name}</if>
        </where>
    </select>
</mapper>

choose标签:单条件动态查询

修改动态字段

结语:

🎀🎀🎀MyBatis作为一个成熟且强大的持久层框架,在Java开发领域有着广泛的应用。希望本教程能够成为您学习MyBatis的起点,激发您对数据库交互技术深入探索的兴趣。记住,实践是检验真理的唯一标准,只有不断动手实践,才能真正掌握MyBatis的精髓。期待您在未来的项目中,能够灵活运用MyBatis,构建出更加高效、健壮的数据持久层解决方案。加油,未来的开发者们!🎀🎀🎀

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

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

相关文章

GraphRAG

GraphRAG 与基线 RAG RAG 检索增强生成 &#xff08;RAG&#xff09; 是一种使用真实世界信息改进 LLM 输出的技术。这种技术是大多数基于 LLM 的工具的重要组成部分&#xff0c;大多数 RAG 方法使用向量相似性作为搜索技术&#xff0c;我们称之为基线 RAG。 RAG 技术在帮助 …

立即升级你的前端技能!跟随这份Vue3项目搭建教程,从零基础到专业,一步步掌握最新Web开发技术,打造响应快速、界面优雅的现代网站。

全能开发套餐&#xff0c;轻松打造现代网站&#xff01;Vue3携手Vite带来开发新体验&#xff0c;结合Axios、Pinia、Element Plus实现功能与美观并重&#xff0c;TailwindCSS与DaisyUI提供设计灵活性&#xff0c;Router 4处理页面导航。从前端到后端&#xff0c;一站式解决&…

必看!全网最详细的仓库管理办法!

如今仓库管理的优劣直接影响着企业的运营效率和成本控制。一个高效、有序的仓库能够确保货物的及时供应&#xff0c;减少库存积压&#xff0c;提高客户满意度&#xff1b;而一个混乱、无序的仓库则可能导致货物丢失、损坏&#xff0c;延误交货&#xff0c;甚至影响企业的声誉和…

【宠粉赠书】Python数据可视化:科技图表绘制

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套数据可视化学习的必备书籍——《Python数据可视化&#xff1a;科技图表绘制》。下面我会详细给大家介绍这本书&#xff0c;文末留有领取方式。 图书介绍 《Python数据可视化&#xff1a;科技图表绘制》结合编者多年的数…

顶象文字点选模型识别

注意&#xff0c;本文只提供学习的思路&#xff0c;严禁违反法律以及破坏信息系统等行为&#xff0c;本文只提供思路 如有侵犯&#xff0c;请联系作者下架 文字点选如何训练&#xff0c;之前的文章说了很多遍了&#xff0c;这里只放现成的模型供查看&#xff0c;有需要成品联系…

datax做增量导入数据到hive:mysql>hive

为什么要做增量导入? 例如mysql表中的数据导入hive&#xff0c;如果第一天抽取了mysql中t_user表中的全部数据&#xff0c;则第二天只需要抽取新增数据即可&#xff01; 增加导入是利用where 条件查询实现的&#xff0c;查询条件一般是自增的id或者时间列 下面演示基于时间列的…

sns.regplot()用法

概念 seaborn.regplot&#xff08;&#xff09;函数可以在两个变量之间绘制一个线性回归模型&#xff0c;可以输出线性回归线以及数据的散点图。 参数解释 seaborn.regplot(dataNone, xNone, yNone, x_estimatorNone, x_binsNone, x_cici, scatterTrue, fit_regTrue, ci95, …

s7_200smart采集遇到的问题

对s7_200smart(plc设备不太熟悉)第一次使用了modbus协议来采集数据是采集不到bcd码类型的数据&#xff0c;modbus里面不支持这个数据类型。采用西门子类型来设置采集数据也遇到不少问题&#xff1f; 第一&#xff1a;采集速率不可以太高&#xff0c;最好1秒一次&#xff0c;通…

YOLOv8改进 | 主干网络 | 用EfficientNet卷积替换backbone【教程+代码 】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录 &#xff1a;《YOLOv8改进有效…

我们终究会懂得自己并非无所不能

今天参加“全民健身日”公开水域游泳比赛&#xff0c;第一次在游泳上有一种无力感。 以前以为自己游泳怎么都不会累&#xff0c;大不了踩踩水&#xff0c;或者在水上漂着。今天竟然途中可耻地抱着“跟屁虫”休息了。 是不是承认自己的无能&#xff0c;也是一种进步&#xff1f;…

【简历】苏州某大学211硕士:25届Java简历指导通过率低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份25届211硕士同学的Java简历&#xff0c;这个学历他的目标必然是冲大厂。 不过他的简历几乎没什么提问点&#xff0c;211在大厂…

1.2 C 语言环境:MinGW 与 CLion 的安装与配置

目录 1 C 语言的由来 2 安装 MinGW 编译器 3 Windows 中安装 CLion 开发环境 3.1 安装 CLion 开发环境 3.2 运行试用 30 天 3.3 新建项目​ 3.4 汉化 4 Mac 中安装 Clion 开发环境 4.1 安装 CLion 开发环境 4.2 运行试用 30 天 4.3 新建项目 ​4.4 汉化 5 向日葵的…

【Linux】系列入门摘抄笔记-6-tar打包压缩和vim编辑器

打包、压缩和解压命令 压缩文件一定要严格区分扩展名 tar 打包程序 tar [主选项+辅选项] [包名] [目标文件或目录]描述:tar命令是Linux下最常用的打包程序。使用tar命令打出来的包称为tar包,因为tar包文件的后缀通常是“.tar”。 每条tar命令只能有一个主选项,而辅助选项…

C语言实现-排序1

文章目录 &#x1f3af;引言&#x1f453;排序1.排序的概念以及运用1.1概念1.2运用1.3常见的排序算法 2.排序算法的实现2.1插入排序2.1.1直接插入排序2.1.2希尔排序 2.2选择排序2.2.1直接选择排序2.2.2堆排序 &#x1f947;结语 &#x1f3af;引言 欢迎来到HanLop博客的C语言数…

C#如何对某个词在字符串中出现的次数进⾏计数(LINQ)

文章目录 基础知识实现方法基础计数LINQ优化处理标点符号总结 LINQ&#xff08;Language-Integrated Query&#xff09;是C#和VB.NET中强大的查询语言&#xff0c;它可以用来查询集合、SQL数据库、XML文档等。在C#中&#xff0c;我们可以使用LINQ来简化对字符串中特定单词出现次…

C语言实现游戏2048(超详细!!!超易懂!!!)

2048是众所周知的一款经典游戏&#xff0c;在曾经没有智能电脑和手机的年代&#xff0c;也陪伴了我们许多年。那今天就让我们用C语言来回顾一下这款游戏吧~ 一、游戏2048的思路 2048游戏的玩法是在初始的时候&#xff0c;给玩家一个4*4格子的&#xff0c;其中内容全为空的棋盘…

基于SpringBoot+Vue的供应商管理系统(带1w+文档)

基于SpringBootVue的供应商管理系统(带1w文档) 基于SpringBootVue的供应商管理系统(带1w文档) 现今&#xff0c;互联网在我们的日常生活占据着日益重要的地位&#xff0c;我们也越来越离不开对移动设备、电脑等上网设备的使用。传统的供应商管理系统模式主要依靠管理人员纯手工…

PyQt6简易案例代码GUI界面小工具——实现二维码生成器+自定义前后背景色(练手正合适)

目录 专栏导读PyQt6的介绍PyQt6的主要特点包括&#xff1a;使用PyQt6开发应用程序的一般步骤&#xff1a; 库的安装1、初始化与界面设计2、设置前景色、背景色功能完整代码总结 专栏导读 &#x1f338; 欢迎来到Python办公自动化专栏—Python处理办公问题&#xff0c;解放您的双…

IP地址的构成

1. IPv4地址 IPv4地址是最早且目前仍然广泛使用的IP地址版本。由32位二进制数构成&#xff0c;应为32为二进制数太长了&#xff0c;所以我们通常用四个十进制数字来表示&#xff0c;每个数字之间用”.”分隔。这些数字的范围是0到255。IPv4地址的格式为&#xff1a; “A.B.C.…

2024世界机器人大会将于8月21日至25日在京举行

2024年的世界机器人大会预定于8月21日至25日&#xff0c;在北京经济技术开发区的北人亦创国际会展中心隆重举办。 本届大会以“共育新质生产力 共享智能新未来”为核心主题&#xff0c;将汇聚来自全球超过300位的机器人行业专家、国际组织代表、杰出科学家以及企业家&#xff0…