通过简单的案例入门Mybatis~

news2024/9/22 21:34:00

目录

一.概述

二.JDBC的缺点

三.案例

1.创建测试类

2.加载Mybatis核心配置文件获取SqlSessionFactory

3.获取SqlSession对象

4.执行sql

5.释放资源


 

一.概述

        Mybatis是一款持久层框架,用于简化JDBC开发。所谓框架,就是一个半成品软件,是一套可重用的、通用的、软件基础代码模型。在框架的基础之上构建软件编写将更加高效、规范、通用、可扩展。

JavaEE3层架构:

  • 表现层(用户界面)
  • 业务层(逻辑处理)
  • 持久层(数据存储)

二.JDBC的缺点

1.硬编码

  • 注册驱动、获取连接
  • SQL语句

2.操作繁琐

  • 手动设置参数
  • 手动封装结果集

Mybatis免除了几乎所有的JDBC代码,以及设置参数和获取结果集的工作。硬编码的部分书写在配置文件中,而繁琐的操作则是自动完成。

三.案例

已有数据库中的表如上,写出查询全部数据的代码~

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.5</version>
        </dependency>

创建Maven项目,添加上述依赖。

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</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>	

如上还有一些单元测试类的依赖,也全部导入~

在resources文件夹中创建logback.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--
        CONSOLE :表示当前的日志信息是可以输出到控制台的。
    -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%level] %blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
        </encoder>
    </appender>
    <logger name="com.itheima" level="DEBUG" additivity="false">
        <appender-ref ref="Console"/>
    </logger>
    <!--
      level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
     , 默认debug
      <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
      -->
    <root level="DEBUG">
        <appender-ref ref="Console"/>
    </root>
</configuration>

粘贴如上代码~ 

 

创建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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///BS?useSSL=false&amp;useServerPrepStmts=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--扫描mapper-->
        <package name="mapper"/>
    </mappers>
</configuration>

书写上述内容,把密码改成你自己的~ 

                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///peng?useSSL=false"/>
                <property name="username" value="root"/>
                <property name="password" value="219744"/>

注意,因为8版本后的mysql总是容易犯500的错误,如上是正规的写法,大家一定注意!(其中peng是博主数据库的名字~)

通过上述方式也可以用Idea测试与数据库的连接~

package pojo;

public class club {
    private Integer id;
    private String mingzi;
    private Integer power;

    public Integer getId() {
        return id;
    }

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

    public String getMingzi() {
        return mingzi;
    }

    public void setMingzi(String mingzi) {
        this.mingzi = mingzi;
    }

    public Integer getPower() {
        return power;
    }

    public void setPower(Integer power) {
        this.power = power;
    }

    @Override
    public String toString() {
        return "club{" +
                "id=" + id +
                ", mingzi='" + mingzi + '\'' +
                ", power=" + power +
                '}';
    }
}

创建pojo目录,及对应的实体类club。

<?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="F1">
<!--    名称空间很重要-->
    <select id="selectClub" resultType="pojo.club">
--     id是查询的名字,可以自定义
--     resultType即返回类型
        select  * from fc;
    </select>
</mapper>

创建sql映射文件如上:名字一般为表名Mapper.xml

    <mappers>
        <mapper resource="fcMapper.xml"/>
    </mappers>

在Mybatis-config.xml中加载sql映射文件。

准备工作已完成~


1.创建测试类

2.加载Mybatis核心配置文件获取SqlSessionFactory

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

3.获取SqlSession对象

SqlSession sqlSession= sqlSessionFactory.openSession();

4.执行sql

        List<club> cl= sqlSession.selectList("F1.selectClub");
        System.out.println(cl);

5.释放资源

sqlSession.close();

完整的测试类代码如下:

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 pojo.club;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestMain {
    public static void main(String[] args) throws IOException {
//      1.加载Mybatis核心配置文件,获取SqlSessionFactory
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        //2.获取SqlSession对象
        SqlSession sqlSession= sqlSessionFactory.openSession();
        //3.执行sql
        List<club> cl= sqlSession.selectList("F1.selectClub");
        System.out.println(cl);

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

    }
}

查询成功!

 

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

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

相关文章

Redis管道和发布订阅

解决思路 类似mset打包批量处理 定义&#xff1a;Pipeline是为了解决RTT往返时延&#xff0c;仅仅将命令打包一次性发送&#xff0c;对Redis的执行不造成其他影响 需要把批量执行的命令都放到文件里面 命令解释 上一条命令的结果作为参数 通过Linux命令的管道 传输给管道后面…

Java代码基础算法练习---2024.3.14

其实这就是从我学校的资源&#xff0c;都比较基础的算法题&#xff0c;先尽量每天都做1-2题&#xff0c;练手感。毕竟离我真正去尝试入职好的公司&#xff08;我指的就是中大厂&#xff0c;但是任重道远啊&#xff09;&#xff0c;仍有一定的时间&#xff0c;至少要等我升本之后…

OCR文字识别训练数据整理的关键步骤和注意事项

在开发OCR文字识别产品时&#xff0c;为了确保准确性和可靠性&#xff0c;需要精心整理训练数据。特别是针对合同、证件、票据等文档类型&#xff0c;更需要有针对性地准备文字语料库。以下是针对OCR文字识别训练数据整理的一些建议&#xff1a; ### 整理训练数据的步骤&#…

使用kill()函数向进程发送信号

本片文章的学习记录总结来源于&#xff1a;https://www.bilibili.com/cheese/play/ep182660?csourcecommon_hp_history_null&t11&spm_id_from333.1007.top_right_bar_window_history.content.click 通常在Linux系统中&#xff0c;可以使用 kill or killall 命令向指定…

如何保证Redis和数据库数据一致性

缓存可以提升性能&#xff0c;减轻数据库压力&#xff0c;在获取这部分好处的同时&#xff0c;它却带来了一些新的问题&#xff0c;缓存和数据库之间的数据一致性问题。 想必大家在工作中只要用了咱们缓存势必就会遇到过此类问题 首先我们来看看一致性&#xff1a; 强一致性…

使用SpaceDesk实现iPad成为电脑拓展屏(保姆级教程)

使用SpaceDesk实现iPad成为电脑拓展屏 SpaceDesk是一个开源的软件, 所以说对学生和平民用户非常的友好, 连接后的画质也非常不错, 而且具有无线和有线两种连接方式. 接下来就开始教程: 1. 安装SpaceDesk电脑版 首先我们要下载SpaceDesk电脑版安装好: SpaceDesk官网 注意: …

IBM:《2024年消费者调研:无处不在的人工智能彻底变革零售业》

1月17日&#xff0c;IBM商业价值研究院最近发布了第三份两年一度的消费者调研报告。 这项名为《无处不在的人工智能彻底改变零售业&#xff1a;客户不会等待》的报告&#xff0c;对包含中国在内的全球近20000名消费者进行了调研&#xff0c;相关结果反映了消费者对零售体验的普…

C语言从入门到实战————数组和指针的深入理解

前言 在C语言中&#xff0c;数组和指针有的密切得联系&#xff0c;因为数组名本身就相当于一个指针常量。指针是一个变量&#xff0c;专门用来存储另一个变量的内存地址&#xff0c;通过这个地址可以访问和操作该变量的值&#xff0c;同时也包括数组。数组是一组连续存储的同类…

three.js 入门四:THREE.BoxGeometry 解析

环境&#xff1a; three.js 0.159.0 问题&#xff1a;如何理解BoxGeometry? BoxGeometry在创建的时候, 内部划分成了6个小组, 每个小组就是一个面有4个点, 假设长宽深的segments都是1的话(默认是1), 那么每个小组拥有2个三角面, 如下面创建的代码: var geometry new THRE…

AI智能分析网关V4烟火识别技术在沿街商铺消防安全管理中的应用

一、背景需求 2024年3月13日&#xff0c;廊坊三河市燕郊镇一炸鸡店发生疑似燃气泄漏引发的爆燃事故&#xff0c;应急、消防、卫健等有关部门第一时间赶赴现场全力救援处置。目前现场搜救工作已经结束&#xff0c;事故善后处置、原因调查等工作正在进行中。本次事故也引发了社会…

AI-逻辑回归模型

&#x1f606;&#x1f606;&#x1f606;感谢大家的支持~&#x1f606;&#x1f606;&#x1f606; 逻辑回归的应用场景 逻辑回归&#xff08;Logistic Regression&#xff09;是机器学习中的 一种分类模型 &#xff0c;逻辑回归是一种分类算法&#xff0c;虽然名字中带有回…

家具销售电商平台|基于springboot框架+ Mysql+Java+Tomcat的家具销售电商平台设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 用户功能模块 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen…

CXL-Enabled Enhanced Memory Functions——论文阅读

IEEE Micro 2023 Paper CXL论文阅读笔记整理 问题 计算快速链路&#xff08;CXL&#xff09;协议是系统社区的一个重要里程碑。CXL提供了标准化的缓存一致性内存协议&#xff0c;可用于将设备和内存连接到系统&#xff0c;同时保持与主机处理器的内存一致性。CXL使加速器&…

瑞_23种设计模式_策略模式

文章目录 1 策略模式&#xff08;Strategy Pattern&#xff09;★1.1 介绍1.2 概述1.3 策略模式的结构1.4 策略模式的优缺点1.5 策略模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代码实现 4 JDK源码解析&#xff08;Comparator&#xff09; &#x1f64a…

Flutter学习笔记---flutter环境搭建以及dart语法的学习

Flutter笔记 Flutter环境搭建 获取 Dart SDK | Dart dart-pub | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror Flutter、Dart SDK镜像资源 - 掘金 (juejin.cn) Index of /flutter/dart-archive/channels/stable/release/3.2.6/sdk/ | 清华大学…

优思学院|质量管理方面的证书有哪些?

在这个迅速变化的时代&#xff0c;每个行业都在寻找方法来提高效率、质量和生产力。 对于那些刚踏入或有兴趣深入探索质量管理领域的朋友们来说&#xff0c;一个常见的疑问浮现&#xff1a;为了提升自己的专业技能和职业前景&#xff0c;应该考取哪些证书&#xff1f; 在这方…

OS---python中OS模块的相关学习总结

介绍 在Python中&#xff0c;os模块是一个与操作系统交互的标准库&#xff0c;提供了许多用于文件和目录操作、进程管理、环境变量等功能。下面是os模块中一些常用的功能和方法&#xff1a; 用法 1.查看os模块内容(import os print(dir(os)) ) 结果如下&#xff1a; [Dir…

Windows客户端漏洞挖掘(红队角度)

0x01 前言 周五的时候看了key佬的演讲受益良多呀&#xff0c;来水水&#xff0c;写下目前针对Windows客户端类程序的部分挖掘入口吧&#xff0c;然后分享一下随手挖的很简单很简单的案例。 传统客户端 监听类的: 这里说的监听类的&#xff0c;指的就是安装客户端后启动的端口…

爬虫练习:获取某招聘网站Python岗位信息

一、相关网站 二、相关代码 import requests from lxml import etree import csv with open(拉钩Python岗位数据.csv, w, newline, encodingutf-8) as csvfile:fieldnames [公司, 规模,岗位,地区,薪资,经验要求]writer csv.DictWriter(csvfile, fieldnamesfieldnames)writer…

Halcon绘制图形

1、ROI是Halcon中的一个很重要的概念&#xff0c;为了减少计算量&#xff0c;只关注待检测物体或该物体周围的一片区域即可(类似于图片裁剪) * ROI是Halcon中的一个很重要的概念&#xff0c;为了减少计算量&#xff0c;只关注待检测物体或该物体周围的一片区域即可&#xff0c…