MyBatis#1(快速入门与Mapper代理)

news2024/11/19 7:45:05

一.MyBatis简介

1.MyBatis是一款优秀的持久层框架,可用于简化JDBC的开发

2.持久层:

负责将数据保存到数据库的那一层代码

JavaEE的三层架构: 表现层, 业务层, 持久层

3.框架:

框架就是一个半成品软件, 是一套可重用的, 通用的, 软件基础代码模型

优点: 高效, 规范, 通用, 可扩展

二.MyBatis快速入门

  1. 配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Demo2_12_27</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <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.46</version>
        </dependency>

        <!--junit 单元测试-->
        <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>
</project>
  1. 往resources添加xml文件

(1)AccountMapper.xml (因为我要查询的表示Account才这样起名)

<?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="selectAll" resultType="com.guaiwu.pojo.Account">
        select * from account;
    </select>
</mapper>

(2)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>

(3)mybatis-config.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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db2?useSSL=false"/><!--db2是数据库名称-->
                <property name="username" value="root"/><!--用户名-->
                <property name="password" value="1234"/><!--密码-->
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="AccountMapper.xml"/>
    </mappers>
</configuration>
  1. 创建Account类

package com.guaiwu.pojo;

public class Account {
    private Integer id;
    private String name;
    private double money;

    public Account() {
    }

    public Account(Integer id, String name, double money) {
        this.id = id;
        this.name = name;
        this.money = money;
    }

    /**
     * 获取
     * @return id
     */
    public Integer getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(Integer id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return money
     */
    public double getMoney() {
        return money;
    }

    /**
     * 设置
     * @param money
     */
    public void setMoney(double money) {
        this.money = money;
    }

    public String toString() {
        return "User{id = " + id + ", name = " + name + ", money = " + money + "}";
    }
}
  1. 编写测试代码

package com.guaiwu;

import com.guaiwu.pojo.Account;
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 MyBatisDemo1 {
    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对象 用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.执行sql
        List<Account> users = sqlSession.selectList("test.selectAll");

        System.out.println(users);

        sqlSession.close();
    }
}

Account表中数据:

运行结果:

三.Mapper代理开发

1.创建AccountMapper接口要和AccountMapper.xml要在同一个目录下

AccountMapper接口代码

package com.guaiwu.mapper;

import com.guaiwu.pojo.Account;

import java.util.List;

public interface AccountMapper {
    List<Account> selectAll();
}

AccountMapper.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="com.guaiwu.mapper.AccountMapper">
    <select id="selectAll" resultType="com.guaiwu.pojo.Account">
        select * from account;
    </select>
</mapper>

2.mybatis-config.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="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql:///db2?useSSL=false"/><!--db2是数据库名称-->
                <property name="username" value="root"/><!--用户名-->
                <property name="password" value="1234"/><!--密码-->
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/guiawu/mapper/AccountMapper.xml"/>
    </mappers>
</configuration>

3.测试代码

package com.guaiwu;

import com.guaiwu.mapper.AccountMapper;
import com.guaiwu.pojo.Account;
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 MyBatisDemo1 {
    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对象 用它来执行sql
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //3.执行sql
        //List<Account> users = sqlSession.selectList("test.selectAll");
        //获取mapper对象
        AccountMapper accountMapper = sqlSession.getMapper(AccountMapper.class);
        List<Account> accounts = accountMapper.selectAll();
        System.out.println(accounts);

        sqlSession.close();
    }
}

运行结果:

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

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

相关文章

ESP32设备驱动-BMP180气压温度传感器驱动

BMP180气压温度传感器驱动 1、BMP180介绍 BMP180 是Bosch Sensortec 新推出的数字气压传感器,性能非常高,可用于智能手机,平板电脑和运动设备等高级移动设备。它遵循BMP085并带来许多改进,如较小的尺寸和数字接口的扩展。超低功耗低至3μA,使BMP180成为移动设备节能的领…

EfficientFormer: Vision Transformers at MobileNet Speed

Paper name EfficientFormer: Vision Transformers at MobileNet Speed Paper Reading Note URL: https://arxiv.org/pdf/2206.01191.pdf TL;DR 本文目标是回答一个问题&#xff1a;transformer 是否可以在比 cnn 运行更快的时候同时精度更高&#xff1f;本文提出了 Effic…

3. R获取数据的三种途径、读入文件、写入文件、读写excel文件、读写R文件

课程视频链接&#xff1a;https://www.bilibili.com/video/BV19x411X7C6?p1 本笔记参照该视频&#xff0c;笔记顺序做了些调整【个人感觉逻辑顺畅】&#xff0c;并删掉一些不重要的内容 系列笔记目录【持续更新】&#xff1a;https://blog.csdn.net/weixin_42214698/category_…

后端人眼中的Vue(三)

五、高级 5.1、计算 5.1.1、computed ​ 在之前的购物车的案例当中&#xff0c;我们已经实现了购物车价格的计算&#xff0c;但是有些时候我们需要在其他很多地方也展示价格&#xff0c;所以每展示一次&#xff0c;我们就需要调用一次计算价格的方法&#xff0c;所以Vue给了…

OV7670 摄像头模块介绍

OV7670摄像头模块简介OV7670是OV&#xff08;OmniVision&#xff09;公司生产的一颗1/6寸的CMOSVGA图像传感器。该传感器体积小、工作电压低&#xff0c;提供单片VGA摄像头和影像处理器的所有功能。通过SCCB总线控制&#xff0c;可以输出整帧、子采样、取窗口等方式的各种分辨率…

Visio 学习笔记 —— Visio 的键盘快捷方式

Visio 学习笔记 —— Visio 的键盘快捷方式常用热键常用对话框文本操作快速访问工具栏参考资料常用热键 操作热键指针工具Ctrl 1文本工具Ctrl 2连接线Ctrl 3连接点工具Ctrl Shift 1裁剪工具Ctrl Shift 2文本块工具Ctrl Shift 4组合所选的形状Ctrl G解散组合Ctrl Sh…

Verilog语法笔记(夏宇闻第三版)-结构说明语句

目录 initial语句&#xff1a; always语句&#xff1a; task和function说明语句&#xff1a; task和function说明语句的不同点&#xff1a; task说明语句&#xff1a; function说明语句&#xff1a; Verilog语言中的任何过程模块都从属于以下四种结构的说明语句&#xff…

【GNN】图基本知识代码、nxworks包的基本使用

一个写得很好的博客&#xff1a; 图或网络中的中心性&#xff1a;点度中心性、中介中心性、接近中心性、特征向量中心性、PageRank 特征向量中心性&#xff08;eigenvector centrality&#xff09; 特征向量中心性的基本思想是&#xff0c;一个节点的中心性是相邻节点中心性的函…

Reactive思考

最近在学习响应式编程&#xff0c;由此翻看了很多资料&#xff0c;在此把思考过程记录下 目录 来由 规范 具体实现 历史 1. Servlet的尝试 1.1 Async实现demo 2. web应用层 2.1 web-flux 2.2 web-flux/web-mvc 与 spring-web架构关系 3. DBConnection层 相关可能混淆…

STL中vector怎么扩容

STL vector扩容 vector容器 vector被称为向量容器&#xff0c;该容器擅长在尾部插入或删除元素&#xff0c;时间复杂度为O(1)&#xff1b;而对于在vector容器头部或者中部插入或删除元素&#xff0c;则花费时间要长一些&#xff08;移动元素需要耗费时间&#xff09;&#xf…

十九、Kubernetes中Pod调度第一篇

1、概述 在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某些…

Gradle学习笔记之插件

文章目录插件的作用插件的分类和使用脚本插件对象插件第三方插件用户自定义插件buildSrc项目编写步骤其他项目/模块引用步骤java插件常用属性插件的作用 插件可以帮助我们促进代码的重用、项目更高程度的模块化、自动化和便捷化&#xff0c;减少功能类似代码的编写&#xff0c…

【数据结构与算法】 | 用队列实现栈

用队列实现栈 链接&#xff1a; https://leetcode.cn/problems/implement-stack-using-queues/ 1. 要求 2. 思路 栈的性质是先进后出&#xff0c;队列的性质是先进先出。 题目要求是用两个队列来完成栈的实现&#xff0c;那么大思路就是通过倒腾数据来完成。 3. 代码实现…

JAVA系列 多线程 Thread类 耦合 线程调度 如何创建线程 弱耦合 完全解耦 思维结构整理

这估计是我JAVA系列 基础知识点梳理的最后一篇文章了吧 之后一段时间 我打算去看看之前承诺更新的JAVA的一些项目了 然后我要好好玩一段时间游戏 然后跟某些好朋友见面 所以后面会忙一点 然后就是很多同学 六级还没有考 估计很多人是开学再考把 这个假期就不要玩的太厉害了 没事…

人员超员识别系统 yolov5

人员超员识别系统通过yolov5深度学习网络模型对现场画面进行实时监测&#xff0c;监测到画面中区域人数超过规定人数时&#xff0c;立即抓拍存档预警。YOLO系列算法是一类典型的one-stage目标检测算法&#xff0c;其利用anchor box将分类与目标定位的回归问题结合起来&#xff…

一篇彻底解决:Fatal error compiling: 无效的目标发行版: 11 -> [Help 1]

先在这声明,如果我的方法没有解决你的问题,那你直接私信我,我第一时间帮你解决,送佛送到西!!! 这个问题&#xff0c;主要原因就是JDK的版本问题&#xff0c;“无效的目标发行版&#xff1a;11”的意思是你在某个位置配置了JDK11&#xff0c;但是在其他位置配置的并不是11&…

靶机测试Gears of War笔记

靶机介绍Its a CTF machine that deals with the history of gears of war, where we must try to escape from prison and obtain root privileges. it has some rabbit holes, so you have to try to connect the tracks to get access.This works better with VirtualBox ra…

[ 数据结构 ] 二叉树详解--------前序、中序、后序、存储、线索化

0 前言 why?为什么需要树结构? 数组虽然查找快(通过下标访问),但无法动态扩容(拷贝到新的数组),而链表相反,树结构刚好结合两者优点 浅谈树? 树的存储和读取效率都很高,比如二叉排序树,理解树的抽象模型有助于理解递归的原理,树的模型接近于单向链表,父节点指向左右子树,而…

【因果发现】 针对时序数据的因果图学习

文章目录 一、任务二、数据集说明三、专业名词CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、任务 This track focuses on solving a causal structure learning problem in AIOps. AIOps 相关:主要目标是从事件序列数据中挖掘因果图关系,并辅助定位根因。 主要需要解…

php学习笔记-php数组的创建和使用,数组常用函数-day03

php数组的创建和使用&#xff0c;数组常用函数数组的概念一维数组的创建和使用1.直接将变量声明为数组元素2.通过array()函数来创建一维数组3.数组的元素值的访问4.数组元素的赋值方式5.数组的注意事项二维数组的创建和使用1.二维数组的创建2.二维数组的数组元素值访问3.二维元…