当前位置: 首页 > news >正文

【JavaWeb】 Mybatis-02-Mybatis的快速入门

文章目录

  • 写在前言
    • mybatis里面的配置文件是如何联系的
    • Mybatis连接数据库与JDBC连接数据库
      • JDBC的工作原理
      • Mybaties连接数据库的原理
  • 1、新建一个Maven项目
  • 2、配置pom.xml
  • 3、Xml配置文件
    • 1)写一个**mybatis-config.xml文件**
    • 2)编写一个Mapper.xml配置文件
      • 命名空间
      • 什么是全限定名
    • 3)编写实体类
  • 4、编写启动类

写在前言

mybatis里面的配置文件是如何联系的

这是我第二次学习mybatis的理解,我理解的和如下图,config包含了数据库的配置,以及mappers,通过mappers可以找到各类Mapper,这样就把配置文件,联系了起来。
在这里插入图片描述

Mybatis连接数据库与JDBC连接数据库

JDBC的工作原理

在这里插入图片描述

  • DriverManager 工具类,用于管理驱动,可以获取数据库的链接
  • Connection 表示Java与数据库建立的连接对象(接口)
  • PreparedStatement 发送SQL语句的工具
  • ResultSet 结果集,用于获取查询语句的结果

Mybaties连接数据库的原理

在这里插入图片描述

1、新建一个Maven项目

要使用 MyBatis, 只需将 mybatis-x.x.x.jar 文件置于类路(classpath)中即可。或者是利用Maven导入依赖(坐标),我们选择后者,所以要新建一个Maven项目。

在这里插入图片描述

2、配置pom.xml

要使用Mybatis,需要导入Mybatis的依赖。

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

为了简便开发,我们还引入了Lombok,具体代码如下

<?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>com.you</groupId>
    <artifactId>Mybatis-demo-01</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!--导入Mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--引入Lombok依赖-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <!--引入mysql的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>
    </dependencies>

</project>

如果左侧的Maven中没有显示依赖,就点击刷新按钮,刷新一下!
在这里插入图片描述
然后就可以看到依赖被导入进来
在这里插入图片描述

3、Xml配置文件

XML 配置文件中包含了对 MyBatis 系统的核心加粗样式设置,包括获取数据库连接实例数据源(DataSource)以及决定事务作用域控制方式事务管理器(TransactionManager)。

1)写一个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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/dp83?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="200201203332"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="DeptMapper.xml"/>
    </mappers>
</configuration>

在这里插入图片描述
当然,还有很多可以在 XML 文件中配置的选项,上面的示例仅罗列了最关键的部分。 注意 XML 头部的声明,它用来验证 XML 文档的正确性。environment 元素体中包含了事务管理和连接池的配置。mappers 元素则包含了一组映射器(mapper),这些映射器的 XML 映射文件包含了 SQL 代码和映射定义信息。

2)编写一个Mapper.xml配置文件

由上可知,Mapper.xml是用来映射sql语句的文件
在这里插入图片描述

<?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="queryAll" resultType="com.you.pojo.Dept">
        select * from dept;
     </select>
</mapper>

命名空间

在之前版本的 MyBatis 中,命名空间(Namespaces)的作用并不大,是可选的。 但现在,随着命名空间越发重要,你必须指定命名空间。

命名空间的作用有两个:
一个是利用更长的全限定名来将不同的语句隔离开来,同时也实现了你上面见到的接口绑定。就算你觉得暂时用不到接口绑定,你也应该遵循这里的规定,以防哪天你改变了主意。 长远来看,只要将命名空间置于合适的 Java 包命名空间之中,你的代码会变得更加整洁,也有利于你更方便地使用 MyBatis。

命名空间也可以解决id重复的问题,比如UserMapper和DeptMapper都有一个查询全部语句的sql名叫queryAll,通过命名空间我就可以对相同的id进行区别。

什么是全限定名

  • 全限定名(比如 “com.mypackage.MyMapper.selectAllThings)将被直接用于查找及使用。
  • 短名称(比如 “selectAllThings”)如果全局唯一也可以作为一个单独的引用。 如果不唯一,有两个或两个以上的相同名称(比如
    “com.foo.selectAllThings” 和
    “com.bar.selectAllThings”),那么使用时就会产生“短名称不唯一”的错误,这种情况下就必须使用全限定名。

也就是说在接口绑定的时候,我既可以用全限定名,也可以使用短名称,但如果短名称不唯一的话,那么我只能使用全限定名,所以为了不出错,你也可以选择全部使用全限定名。

3)编写实体类

由于Mapper.xml的返回类型用到了实体类,所以需要写一个实体类Dept。新建一个实体类Dept
在这里插入图片描述

package com.you.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
    private Integer deptno;
    private  String deptname;
    private String dp_source;

}

4、编写启动类

编写一个启动类MybatisRun
在这里插入图片描述

package com.you;

import com.you.pojo.Dept;
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 MybatisRun {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException ioException) {
            ioException.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        SqlSession sqlSession = sqlSessionFactory.openSession();
        /* 执行sql语句 */
        List<Dept> list = sqlSession.selectList("test.queryAll");
        for (Dept dept : list) {
            System.out.println(dept);
        }
    }
}

相关文章:

  • 微服务项目:尚融宝(20)(后端搭建:OSS文件上传整合)
  • 【AI】PyTorch入门(二):训练与预测
  • 【网络服务数据库教程】04 Linux文件服务器 - Samba
  • 让我们谈谈密码哈希
  • 写完Numpy100道基础练习题后的错误总结和语法总结
  • 《算法导论》12.3 插入和删除
  • C++与C的区别终于说清楚了!
  • 前端面试知识查漏补缺
  • WEIXIN day_02(8.17) 小程序的组件库
  • 社区交友源码 支持聊天私聊-礼物系统-直播系统-缘分匹配+搭建教程
  • Reactor 之 手把手教你 Spring Boot 整合 Reactor
  • 【42STL-函数对象使用详情】
  • LVS-Nat模式实战
  • java毕业设计基于的测试项目管理平台Mybatis+系统+数据库+调试部署
  • 对于钾,钙,锌,铁,钠,镁金属离子荧光探针的详细知识整理如下
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • Android组件 - 收藏集 - 掘金
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript新鲜事·第5期
  • js操作时间(持续更新)
  • Leetcode 27 Remove Element
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Spring声明式事务管理之一:五大属性分析
  • 不上全站https的网站你们就等着被恶心死吧
  • 大数据与云计算学习:数据分析(二)
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 动态魔术使用DBMS_SQL
  • 漂亮刷新控件-iOS
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 以太坊客户端Geth命令参数详解
  • 鱼骨图 - 如何绘制?
  • 自定义函数
  • 7行Python代码的人脸识别
  • const的用法,特别是用在函数前面与后面的区别
  • 我们雇佣了一只大猴子...
  • ​一些不规范的GTID使用场景
  • #ifdef 的技巧用法
  • #单片机(TB6600驱动42步进电机)
  • #微信小程序(布局、渲染层基础知识)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (windows2012共享文件夹和防火墙设置
  • (超详细)语音信号处理之特征提取
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (转)Sql Server 保留几位小数的两种做法
  • (转载)OpenStack Hacker养成指南
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET 解决重复提交问题
  • .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Async注解的坑,小心
  • []我的函数库