MyBatis ---- 搭建MyBatis

news2025/1/31 8:04:40

MyBatis ---- 搭建MyBatis

  • 1. 开发环境
  • 2. 创建maven工程
    • a>打包方式:jar
    • b>引入依赖
  • 3. 创建MyBatis的核心配置文件
  • 4. 创建mapper接口
  • 5. 创建MyBatis的映射文件
  • 6. 通过junit测试功能
  • 7. 加入log4j日志功能
    • a>加入依赖
    • b>加入log4j的配置文件

1. 开发环境

IDE:idea 2022.1
构建工具:maven 3.8.1
MySql 版本:MySql 8
MyBatis 版本:MyBatis 3.5.11

2. 创建maven工程

a>打包方式:jar

    <groupId>org.example</groupId>
    <artifactId>MyBatis_demo1</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

b>引入依赖

    <dependencies>
        <!-- Mybatis核心 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.3</version>
        </dependency>
    </dependencies>

在这里插入图片描述

3. 创建MyBatis的核心配置文件

MyBatis的核心配置文件习惯是命名为 mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合 Spring 之后,这个配置文件可以省略,所以大家操作时可以直接复制、黏贴。
核心配置文件主要用于配置连接数据库的环境以及 MyBatis 的全局配置信息
核心配置文件存放的位置是 src/main/resources 目录下

<?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/mybatis?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=UTC&amp;useSSL=false&amp;rewriteBatchedStatements=true"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    <!--引入映射文件-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

4. 创建mapper接口

MyBatis 中的 mapper 接口相当于以前的 dao。但是区别在于,mapper 仅仅是接口,我们不需要提供实现类。

  1. 在数据库中创建 t_user
    在这里插入图片描述
  2. 在 项目中创建对应数据库 t_user 表的实体类
package com.fickler.mybatis.pojo;

/**
 * @author dell
 * @version 1.0
 */
public class User {

    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String sex;
    private String email;

    public User() {
    }

    public User(Integer id, String username, String password, Integer age, String sex, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
        this.sex = sex;
        this.email = email;
    }

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password=(排除文章风险提示)'" + password + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

  1. 创建 mapper 接口
package com.fickler.mybatis.mapper;

/**
 * @author dell
 * @version 1.0
 */
public interface UserMapper {

    /**
     * MyBatis面向接口编程的两个一致:
     * 1.映射文件的namespace要和mapper接口的全类名保持一致
     * 2.映射文件中的SQL语句的id要和mapper接口中的方法名保持一致
     * 表--实体类--mapper接口--映射文件
     */

    /**
     * 添加用户信息
     */
    int insertUser();

}

5. 创建MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。
对象:Java 的实体类对象
关系:关系型数据库
映射:二者之间的对应关系

Java概念数据库概念
属性字段/列
对象记录/行
  1. 映射文件的命名规则:
    表所对应的实体类的类名 + Mapper.xml
    例如:表 t_user,映射的实体类为 User,所对应的映射文件为 UserMapper.xml
    因此一个映射文件对应一个实体类,对应一张表的操作
    MyBatis 映射文件用于编写 SQL,访问以及操作表中的数据
    MyBatis 映射文件存放的位置是 src/main/resources/mappers 目录下
  2. MyBatis 中可以面向接口操作数据,要保持两个一致:
    a> mapper 接口的全类名和映射文件的命名空间(namespace)保持一致
    b> mapper 接口中方法的方法名和映射文件中编写 SQL 的标签的 id 属性保持一致
<?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.fickler.mybatis.mapper.UserMapper">

    <!--int insertUser();-->
    <insert id="insertUser">
        insert into t_user values(null,'张三','123',23,'女','123456@qq.com')
    </insert>

</mapper>

6. 通过junit测试功能

package com.fickler.mybatis.test;

import com.fickler.mybatis.mapper.UserMapper;
import com.fickler.mybatis.pojo.User;
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 org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author dell
 * @version 1.0
 */
public class MyBatisTest {

    /**
     * SqlSession默认不自动提交事务,若需要自动提交事务
     * 可以使用sqlSessionFactory.openSession(true);
     * @throws IOException
     */

    @Test
    public void testMyBatis() throws IOException {

        //加载核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(resourceAsStream);
        //获取SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession(true);    //自动提交
        //获取mapper接口对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //测试功能
        int result = userMapper.insertUser();
        //提交事务
//        sqlSession.commit();
        System.out.println("result: " + result);

    }

}

SqlSession:代表 Java 程序和数据库之间的会话。(HttpSession 是 Java 程序和浏览器之间的会话)
SqlSessionFactory:是“生产” SqlSession 的“工厂”。
工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

7. 加入log4j日志功能

a>加入依赖

        <!-- log4j日志 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

b>加入log4j的配置文件

log4j 的配置文件名为 log4j.xml,存放的位置是 src/main/resources 目录下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

日志级别
FATAL(致命)>ERROR(错误)>WARN(警告)>INFO(信息)>DEBUG(调试)
从左到右打印的内容越来越详细

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

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

相关文章

Linus 文件处理(四)

目录 一、前言 二、高级主题: fcntl和mmap 1、fcntl 2、mmap 3、Using mmap 一、前言 本文将简单介绍Linux文件和目录&#xff0c;以及如何操作它们&#xff08;如何创建文件、打开、读、写和关闭&#xff0c;程序如何操作目录&#xff0c;如创建、扫描和删除目录等&…

池风水利用工具

引用 这篇文章的目的是介绍一种基于内核态内存的越界写入通用利用技术和相关工具复现. 文章目录引用简介分析调试分析漏洞利用工具使用方法工具使用效果相关引用参与贡献简介 笔者的在原作者池风水利用工具(以下简称工具)基础上进行二次开发,新增了全自动获取内核调试模块符号…

QT-QTableWidget中的cell和item的区别

文章目录QTableWidget中单击一个单元格响应不同的函数&#xff1a;cell和item的区别&#xff1a;单击单元格响应自定义函数我的错误思路&#xff1a;已剪辑自: https://blog.csdn.net/CCLasdfg/article/details/114691478 QTableWidget中单击一个单元格响应不同的函数&#xf…

【服务器搭建】教程三:怎样购买域名并怎样进行域名解析 来啦

前言 购买一台服务器&#xff0c;再来个域名&#xff0c;搭建一个自己的个人博客网站&#xff0c;把一些教程、源码、想要分享的好玩的放到网站上&#xff0c;供小伙伴学习玩耍使用。我把这个过程记录下来&#xff0c;想要尝试的小伙伴&#xff0c;可以按照步骤&#xff0c;自己…

多云加速云原生数仓生态,华为与 HashData 联合打造方案

多云的兴起&#xff0c;源于用户应用对于基础设施、云服务功能、安全性等的差异化需求&#xff0c;用户希望根据需求将应用、数据因“云”制宜&#xff0c;实现业务的高度灵活性和高效性。这也直接驱动着云原生数据仓库等一批云原生应用的流行&#xff0c;以及存储等基础设施加…

为什么用公钥加密却不能用公钥解密?

一直以来我都在逃避写HTTPS。 毕竟。 HTTPS里名词太多。概念又巨繁琐。 实在是太难解释了&#xff0c;能不写我尽量不写。。。。 但为了让图解网络的知识体系尽量完整些。 今天&#xff0c;大家忍一忍。 我们就从对称加密和非对称加密聊起吧。 对称加密和非对称加密 小学…

Python学习笔记-语言基础

1.基础语法特点 1.1 注释 注释&#xff0c;是用于在代码中添加的标注性的文字&#xff0c;程序中并不会执行&#xff0c;知识用于告知程序员&#xff0c;该代码是干什么的&#xff0c;怎么用的等。 注释主要用于防止别人阅读代码是可以识别到代码的意图或者一段时间之后我们…

教程五 在Go中使用Energy创建跨平台GUI - 执行开发者工具方法

教程-示例-文档 介绍 本文介绍在Energy中如何执行开发者工具方法 开发者工具方法&#xff0c;可以设置浏览器头&#xff0c;模拟仿真设备等. 使用方式 字典对象创建 cef.NewCefDictionaryValue() 字典对象是keyvalue方式, chromium定义的字典名称和对应的值&#xff0c;通…

APOLLO UDACITY自动驾驶课程笔记——感知、预测

1、计算机视觉 无人驾驶车有四个感知世界的核心任务&#xff1a;检测——指找出物体在环境中的位置&#xff1b;分类——指明确对象是什么&#xff1b;跟踪——指随时间的推移观察移动物体&#xff1b;语义分割——将图像中的每个像素与语义类别进行匹配如道路、汽车、天空。 …

Adb找不到设备解决方法

有时候使用adb devices 却找不到设备&#xff0c;而用一些第三方的软件却可以找的到&#xff0c; 除了没有打开USB调试模式&#xff0c;或者没装驱动&#xff0c;数据线有问题&#xff0c;操作系统是精简版系统外&#xff0c; 一般是因为设备的安卓版本太高&#xff0c;导致a…

操作系统内存管理-01分段

前言 本文讲述本文博主在学习80386下 window下段式内存管理。 内存管理往往需要软硬件结合进行管理&#xff0c;CPU定制一套官方规范&#xff0c;要求操作系统按要求实现某些操作即可。本文所述的CPU 分段规范 在intel 第三卷 第三章。 分段概述 我们知道每一个程序会被赋予…

可自定义评教系统(教学质量评估系统)设计与实现(SSM)毕业论文+设计源码+mysql文件

目 录 摘要 I Abstract II 第1章 绪论 1 1.1 课题背景 1 1.2 研究意义 1 1.3 国内外研究现状分析 2 1.3.1 评教指标的过于简单化 2 1.3.2 评教指标的权重过于平均 2 1.3.3 评教结果的可信度和缺乏科学的数据分析 2 1.4 系统开发的主要目标和内容 3 1.4.1 开发目标 3 1.4.2 开发…

C++ 内存模型

1、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的&#xff08;所有代码包含中文注释&#xff09;全局区&#xff1a;存放全局变量和静态变量以及常量栈区&#xff1a;由编译器自…

使用 Clion (cmake) 运行FreeRTOS

这里使用的是 f4071. 先用STM32CubeMX 建立一个可以运行的stm32项目&#xff0c;toolchain选择 SW4STM322. 官网下载源码www.freertos.org我这里下载的是FreeRTOSv202112.00.zip 解压缩后得到需要以下几个文件夹或档案FreeRTOS/Source下的所有的 .c 档案FreeRTOS/Source/includ…

【附源码】计算机毕业设计JAVA在线图书超市

【附源码】计算机毕业设计JAVA在线图书超市 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA mybati…

算法刷题打卡第28天:省份数量---广度优先搜索

省份数量 难度&#xff1a;中等 有 n 个城市&#xff0c;其中一些彼此相连&#xff0c;另一些没有相连。如果城市 a 与城市 b 直接相连&#xff0c;且城市 b 与城市 c 直接相连&#xff0c;那么城市 a 与城市 c 间接相连。 省份 是一组直接或间接相连的城市&#xff0c;组内不…

BP神经网络PID控制从Simulink仿真到PLC控制实现(含博途PLC完整SCL源代码)

单神经元自适应PID控制博途PLC完整源代码,请参看下面的文章链接: 博途PLC单神经元自适应PID控制_RXXW_Dor的博客-CSDN博客_单神经元pid控制1、单神经元作为构成神经网络的基本单位,具有自学习和自适应能力,且结构简单易于计算,传统的PID具有结构简单、调整方便和参数整定…

数据结构 | 树和二叉树的基本概念和性质【考点精析】

树和二叉树&#x1f333;树&#x1f343;树的概念&#x1f343;树的相关概念&#x1f343;树的性质和常用公式总结 ⭐⭐⭐⭐⭐&#x1f343;树的表示&#x1f343;树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09;&#x1f333;二叉树&#x1f343;二叉树的概…

我与世界杯足球那些事——世界杯征文

征文活动链接&#xff1a; https://bbs.csdn.net/topics/609601920 目录 第一次了解世界杯 第一次观看世界杯 世界杯主题曲 我最热爱的球员 今年世界杯 预测冠军 第一次了解世界杯 提起世界杯&#xff0c;我可能了解的比较晚一些&#xff0c;是在2014年的巴西世界杯的时…

浏览器扩展课程Manifest V3升级版

大家好&#xff0c;经过一段时间的整理&#xff0c;我的《浏览器扩展插件开发》视频课程做了全新的升级。之前的课程也收到了很多反馈。因为Chrome浏览器扩展发布了最新的Manifest V3标准&#xff0c;简写MV3&#xff0c;也发布了新的路线图。2022年1月份开始不接受新的MV2版本…