【狂神】MyBatis(第一个Mybatis程序)

news2025/1/17 21:13:51

今天学了一点大概,但大概只是整个mybatis学习的1/10,我之所以想要重学一遍的原因是,我忘了。哈哈哈,但是以现在的角度去学习,我会更能够理解它的底层知识。希望这篇文章能够帮助你更好的入门。

趁着年轻多多投资自己的大脑总归是不会错滴(这是狂神老师说的,我觉得很有道理),我们一起加油呀~

               __________________________  
              /                           \
             |I hope you happy,always!
             \__   __ __ __ __ __ __ __ __/
                | /                        
         __w    |/                         
 (\{\  ,%%%%            .-.   __           
 { { \.%%%_/   ,_*   _ /   \ /  \          
 { {  \%%/(___//    / \|   |/   |          
 { {\,%%%|[))-'    :   \   /  _/_          
 {/{/\,%%)\(       _\_  \_|_.'   '.        
       '%]\\      :   '-(  )_____.'        
         ((']       '.__/'--\   \          
          \yI\         /  |  \   )         
         (/  (\       /   /  |'-:          
         7    k\      '--'\__/ \ \         
        J'    `L_               \ \        
                                 \ \       

MyBatis-9.28

SSM框架:配置文件的。查看官网

1、简介

1.1、什么是Mybatis

如何获得:

1.去github里面搜索

2.Maven 仓库

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>

3.中文文档mybatis – MyBatis 3 | 入门

1.2、持久化

1.3、持久层

1.4、为什么需要Mybatis?

2、第一个Mybatis程序

大部分框架的学习都是按照下面的思路来走的。

搭建环境->导入依赖->创建工程->测试

2.1、搭建数据库:

CREATE DATABASE `mybatis`
use `mybatis`

CREATE TABLE `user`(
    `id` int(20) not null PRIMARY KEY,
    `name` VARCHAR(30) DEFAULT null,
    `pwd` VARCHAR(30) DEFAULT null
)ENGINE=INNODB DEFAULT charset=utf8;

insert into `user`(`id`,`name`,`pwd`) VALUES(1,'张三','123456'),(2,'张四','1234567'),(3,'张五','12345678')

2.2、创建项目:(Maven类型的就行-普通版)

2.3、删掉src包

这样做得好处是,在父工程中导入得依赖可以直接在子工程中使用,比较方便

2.4导入依赖

这里导入的主要是mysql,mybatis,junit。

 <!--导入依赖-->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

2.5、创建一个模块

给他命名为Mybatis01。然后建立三个包,分别是mapper,pojo,utils包,并分别建立几个类和核心依赖配置文件。如下图所示:

2.6、连接数据库

这里连接数据库的时候,需要注意的是下面图片箭头所指的方向不要填,后面再选数据库名就可以了。

2.7、编写mybatis工具类

为了方便使用,代码如下:

这个代码的主要目的是为了得到SqlSession,方便测试类。

package com.zhang.utils;

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;

//sqlSession-->sqlSession
public class MybatisUtils {
    //放在static静态代码块里面,起到一个首先加载的作用
    public static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory= new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

2.8、建立mapper文件,里面是接口及相关得xml配置

主要是Usermapper,和UserMapper.xml。前者里面是接口方法,后者的话就相当于是它的一个实现类,但是是通过配置文件来完成的。二者之间的联系通过namespace=" 全限命名",下面是狂神老师的截图,但是我的代码会和它有些出入。

 代码如下:

UserMapper

package com.zhang.mapper;

import com.zhang.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> getUser();
}

UserMapper.xml

<?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">
<!--resultType返回的是一个集合类型,这里就是User-->
<mapper namespace="com.zhang.mapper.UserMapper">
    <select id="getUser" resultType="com.zhang.pojo.User">
        select * from mybatis.user
    </select>
</mapper>

2.9、实体类pojo

这个比较简单,就直接上代码了。但是需要注意的是,里面的变量名必须和数据库中表的名称保持一致。不一致也行,还是得改。

package com.zhang.pojo;

public class User {
    private int id;
    private String name;
    private String pwd;
    public User(){

    }
    public User(int id, String name, String pwd) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
    }
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

2.10、测试类:

当所有的步骤都完成以后,我们就可以新建一个测试类了,在这里测试类是放在maven项目的test包下的。为了方便测试,我们需要新建和mapper文件下差不多的包,保证其一个规范性。如图所示:

然后就是编写测试类,首先我们先拿到SqlSession这个对象,先调用Mybatis里面的getSqkSession()方法,然后调用它的getMapper(接口类),注意这里是接口,所以我们也需要返回其相对应的类型。代码图片如下:

 

代码:

package com.zhang.mapper;

import com.zhang.pojo.User;
import com.zhang.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class test {

    @Test
    public void test1() {
        SqlSession session= MybatisUtils.getSqlSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        List<User> userList=mapper.getUser();
        for (User user : userList) {
            System.out.println(user);
        }
        session.close();
    }

}

然后就开始点击测试了。不出意外的话,会出现下面的结果。

但是如果运气不太好的话,就会出现下面的两个错误,或者其他。

2.11、两个错误:

1、配置文件mapper没有在Mybatis-config.xml中注册

这个的问题就是在Mybatis-config.xml中,没有下面这一行代码,又或者是写错了

<mappers>
        <mapper resource="com/zhang/mapper/UserMapper.xml"/>
    </mappers>

需要注意的是,resource中 的不能用点 . 来代替,用了之后就会出现我这里写的第二个问题,也就是资源过滤问题。

2、资源过滤问题

Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource com.zhang.mapper.UserMapper.xml

这里的话,如果不是 / 写错了,那就是真的资源配置有问题了,我们可以查看target包,看其下对应的mapper包对应的两个文件是否都在,不在的话那就需要下面的代码进行配置了。如果你的IDEA上面没有target包的话,请先将该项目打包一下,如果还是没有,那就说明你的target包被隐藏了,请按下面的步骤图片进行操作。

最好是子与父的pom.xml都配置一下。

代码:

 <!--解决资源过滤问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

 下面是狂神老师总结的我们会碰到的问题,那么你中标了吗?

 这个是SqlSessionFactoryBuilder和SqlSessionFactory以及SqlSession的作用及内涵(嗯,应该是可以这么说的)

 

用try-catch 只是个建议(下面)

 Ok,今日份的笔记分享就先到这了,希望大家能有个愉快的学习过程,加油呀!

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

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

相关文章

Android学习之路(12) setContentView详解

一、简介 setContentView我们在Activity中经常见到&#xff0c;它的作用就是把我们的布局文件放在Activity中显示&#xff0c;下面我们根据源码分析setContentView是如何做到的 二、源码分析 1.两种setContentView 注意Activity的setContentView和AppCompatActivity的setCo…

云端笔记系统-自动化测试

文章目录 1. 思维导图编写 Web 自动化测试用例2. 创建测试项目3. 根据思维导图设计【云端笔记】自动化测试用例3.1. 准备工具类3.2. 测试注册页面3.3. 测试登陆页面3.4. 测试添加博客页3.5. 测试我的博客列表页3.6. 测试修改博客页3.7. 测试博客列表页3.8. 测试博客详情页3.9. …

IIS perl python cbrother php脚本语言配置及简单测试样例程序

上篇笔记写了 IIS 配置 CGI&#xff0c; IIS CGI配置和CGI程序FreeBasic, VB6, VC 简单样例_Mongnewer的博客-CSDN博客 这篇在IIS上配置一些脚本语言。为了操作方便&#xff0c;每种语言在站点下分设文件夹。 1. IIS perl配置 Perl CGI方式是曾经流行的做法。先下载一个开源…

[管理与领导-65]:IT基层管理者 - 辅助技能 - 4- 职业发展规划 - 乌卡时代(VUCA )

前言&#xff1a; 大多数IT人&#xff0c;很勤奋&#xff0c;但都没有职业规划&#xff0c;被工作驱动着前行&#xff0c;然而&#xff0c;作为管理者&#xff0c;你就不能没有职业规划思维&#xff0c;因为你代表一个团队&#xff0c;你的思维决定了一个团队的思维。本文探讨…

【强化学习】贝尔曼公式 - bellman equation

return作用 还是用这个迷宫游戏说。 首先明确&#xff0c;不撞墙到终点比撞墙到终点好。路径越短到终点越好。 不撞墙到终点比撞墙到终点好。你可以把撞墙这个reward设置成负数&#xff0c;不撞墙设置成0。那么在最终return进行累加的时候&#xff0c;不撞墙的return就会大。路…

生信分析Python实战练习 4 | 视频22

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

打包个七夕exe玩玩

前段时间七夕 当别的哥们都在酒店不要不要的时候 身为程序员的我 还在单位群收到收到 正好后来看到大佬些的这个 https://www.52pojie.cn/thread-1823963-1-1.html 这个贱 我必须要犯&#xff0c;可是我也不能直接给他装个python吧 多麻烦 就这几个弹窗 好low 加上bgm 再打包成…

雪花算法生成id分析与实践

目录 1 什么是雪花算法&#xff1f; 结构 优点 缺点 2 在java中使用 使用注意&#xff1a; 测试代码 效果 1 什么是雪花算法&#xff1f; witter的雪花算法&#xff08;Snowflake Algorithm&#xff09;。雪花ID是一种分布式唯一ID生成算法&#xff0c;旨在解决分布式…

【C++历险记】面向对象|菱形继承及菱形虚拟继承

个人主页&#xff1a;兜里有颗棉花糖&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

《多线程编程实战指南》总结

Java 并发和多线程编程推荐《Java 并发编程实战》和《多线程编程实战指南》&#xff0c;前者是外国非常受欢迎的书籍的翻译本&#xff0c;后者是国人写的书&#xff0c;符合国人的思维模式。 进程、线程与任务 在操作系统中会运行多个程序&#xff0c;一个运行中的程序就是一个…

msvcp120.dll丢失的解决方法?全面解决方法推荐

msvcp120.dll是Windows操作系统中的一个关键组件&#xff0c;如果丢失或损坏&#xff0c;可能会导致系统崩溃或无法正常运行。本文将介绍三种解决msvcp120.dll丢失问题的方法。 随着计算机应用的广泛普及&#xff0c;越来越多的人开始遇到各种电脑问题。其中&#xff0c;msvcp…

淘宝商品销量接口API更新(总销+精准月销API)

不少客户有获取淘宝商品销量的需求&#xff0c;淘宝商品销量接口主要用于以下业务场景。有不齐全的欢迎大家补充。 库存管理&#xff1a;商家可以通过接口获取到实时的销量信息&#xff0c;更好地进行库存管理。供应链计划&#xff1a;商家可以通过接口了解到商品的销售趋势&a…

一篇文章教会你什么是二叉搜索树

二叉搜索树 二叉搜索树概念二叉搜索树操作1.二叉搜索树的查找2.二叉搜索树的插入3.二叉搜索树的删除4.二叉搜索树的遍历 二叉搜索树的实现1.二叉搜索树节点结构2.二叉搜索树类3.二叉搜索树的构造及析构4.二叉搜索树的拷贝构造及赋值重载5.二叉搜索树插入6.二叉搜索树查找7.二叉…

Mybatis学习|日志工厂、分页

1.日志工厂 如果一个数据库操作&#xff0c;出现了异常&#xff0c;我们需要排错。日志就是最好的助手! 曾经: sout、debug 现在:日志工厂! 我们主要掌握STDOUT_LOGGING 和LOG4j 在Mybatis中具体使用哪个一日志实现&#xff0c;在设置中设定! 在mybatis核心配置文件中&#…

使用 ElasticSearch 作为知识库,存储向量及相似性搜索

一、ElasticSearch 向量存储及相似性搜索 在当今大数据时代&#xff0c;快速有效地搜索和分析海量数据成为了许多企业和组织的重要需求。Elasticsearch 作为一款功能强大的分布式搜索和分析引擎&#xff0c;为我们提供了一种优秀的解决方案。除了传统的文本搜索&#xff0c;El…

技术绕路─个人物品遗失情况说明

昨晚上&#xff0c;2023年9月2日晚21点多&#xff0c;中汤村311国道&#xff0c;个人钥匙串丢失&#xff0c;包括私人印章、私家车钥匙一把&#x1f511;&#x1f511;&#xff0c;还有其他私人物品。 私家车钥匙如下图&#xff1a; 特意在这个技术社区留一份声明。

【Apollo学习笔记】——规划模块TASK之SPEED_DECIDER

文章目录 前言SPEED_DECIDER功能简介SPEED_DECIDER相关配置SPEED_DECIDER流程MakeObjectDecisionGetSTLocationCheck类函数CheckKeepClearCrossableCheckStopForPedestrianCheckIsFollowCheckKeepClearBlocked Create类函数 前言 在Apollo星火计划学习笔记——Apollo路径规划算…

使用Sumo以及traci实现交叉口信号灯自适应控制

使用Sumo以及traci实现交叉口信号灯自适应控制 文章目录 使用Sumo以及traci实现交叉口信号灯自适应控制 使用Sumo以及traci实现交叉口信号灯感应控制一、什么是交叉口感应控制二、Traci中的感应控制实现流程1.感应控制逻辑2.仿真过程 使用Sumo以及traci实现交叉口信号灯感应控制…

无涯教程-JavaScript - WEIBULL函数

WEIBULL函数取代了Excel 2010中的WEIBULL.DIST函数。 描述 该函数返回威布尔分布。在可靠性分析中使用此分布,如计算设备的平均故障时间。 语法 WEIBULL(x,alpha,beta,cumulative)争论 Argument描述Required/OptionalXThe value at which to evaluate the function.Requir…

二进制转换16进制 快速心算

1111 1110 ---> 0xFE 1111 为 8 4 2 1 ---> 8 4 2 1 15 --> 16进制表示为F1110 为 8 4 2 0 ---> 8 4 2 0 14 --> 16进制表示为E