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

MyBatis二、搭建 MyBatis

MyBatis二、搭建 MyBatis

  • 开发环境
  • MySQL 不同版本的注意事项
    • 驱动程序(Driver)
    • JDBC URL
    • 连接参数
    • MyBatis配置文件
    • 版本兼容性
    • 常见问题与解决方案
    • 示例(MySQL 8.x与MyBatis连接)
  • 创建 Maven 工程
    • 打包方式:Jar
    • 引入依赖
    • 创建数据库
    • 创建 pojo
    • 创建 MyBatis 的核心配置文件
    • 创建 Mapper 接口
    • 创建 MyBatis的映射文件
    • 通过 `junit` 单元测试
    • 加入 `log4j` 功能
      • 加入依赖
      • 加入log4j的配置文件

开发环境

  • IDE:IDEA2024.1
  • 构建工具:Maven3.8.8
  • MySQL版本:MySQL8
  • MyBatis版本:MyBatis3.5.7

MySQL 不同版本的注意事项

MySQL的不同版本与MyBatis连接的注意事项主要包括以下几个方面:

驱动程序(Driver)

  • MySQL 5.x:对于MySQL 5.x版本,MyBatis通常使用com.mysql.jdbc.Driver作为驱动程序。
  • MySQL 8.x:对于MySQL 8.x版本,由于JDBC驱动程序的更改,MyBatis应使用com.mysql.cj.jdbc.Driver作为驱动程序。

JDBC URL

  • 时区设置:在连接MySQL时,有时需要设置时区以避免时区相关的错误。这可以通过在JDBC URL中添加serverTimezone参数来实现,例如serverTimezone=UTCserverTimezone=Asia/Shanghai
  • SSL设置:根据需求,可能需要在JDBC URL中启用或禁用SSL连接。这可以通过添加useSSL=trueuseSSL=false参数来实现。

连接参数

  • 字符集:为了确保数据的一致性,通常需要在JDBC URL中指定字符集,如characterEncoding=UTF-8
  • 其他参数:根据具体需求,可能还需要在JDBC URL中添加其他参数,如useUnicode=true等。

MyBatis配置文件

  • 配置文件格式:MyBatis的配置文件(如mybatis-config.xml)需要按照MyBatis的规范进行编写,确保各项配置正确无误。
  • 数据源配置:在配置文件中正确配置数据源,包括驱动程序、JDBC URL、用户名和密码等。

版本兼容性

  • MyBatis版本:确保使用的MyBatis版本与MySQL版本兼容。虽然大多数情况下不同版本的MyBatis都能与MySQL正常工作,但最好还是使用经过验证的兼容版本组合。
  • 依赖管理:在使用Maven或Gradle等构建工具时,确保添加了正确版本的MySQL JDBC驱动依赖。

常见问题与解决方案

  • 时区问题:如果遇到时区相关的错误,检查并调整JDBC URL中的serverTimezone参数。
  • SSL问题:如果遇到SSL相关的错误或警告,检查并调整JDBC URL中的useSSL参数以及相关的SSL证书配置。
  • 驱动程序问题:如果遇到与驱动程序相关的错误,检查驱动程序是否正确添加并配置了正确的版本。

示例(MySQL 8.x与MyBatis连接)

  • 在Maven的pom.xml中添加MySQL JDBC驱动依赖(以8.0.26版本为例):
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.26</version>
</dependency>
  • 在MyBatis的配置文件中配置数据源(示例):
<dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mydatabase?useSSL=false&serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="password"/>
</dataSource>

请注意,上述示例中的数据库URL、用户名和密码需要根据实际情况进行替换。

创建 Maven 工程

打包方式:Jar

引入依赖

<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency>
</dependencies>

创建数据库

create database `ssm` character set 'utf8mb4';use `ssm`;create table if not exists `t_user`(`id` int primary key auto_increment,`username` varchar(20),`password` varchar(20),`age` int,`gender` char,`email` varchar(50)
) character set 'utf8mb4';

创建 pojo

package cn.keke.mybatis.pojo;/*** Copyright (C) 2024 - 2024 keke, Inc. All Rights Reserved** @Desc :* @Time : 2024/6/2 14:46* @Author : Code_By_keke* @Email : 2284037977@qq.com* @Class : User* @IDE : IntelliJ IDEA*/
public class User {private Integer id;private String username;private String password;private Integer age;private String gender;private String email;public User(){}public User(Integer id, String username, String password, Integer age, String gender, String email) {this.id = id;this.username = username;this.password = password;this.age = age;this.gender = gender;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 getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", age=" + age +", gender='" + gender + '\'' +", email='" + email + '\'' +'}';}
}

创建 MyBatis 的核心配置文件

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//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/ssm?serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!-- 引入 MyBatis 的映射文件 --><mappers><mapper resource=""/></mappers>
</configuration>

创建 Mapper 接口

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

package cn.keke.mybatis.mapper;/*** Copyright (C) 2024 - 2024 keke, Inc. All Rights Reserved** @Desc :* @Time : 2024/6/2 15:18* @Author : Code_By_keke* @Email : 2284037977@qq.com* @Class : UserMapper* @IDE : IntelliJ IDEA*/
public interface UserMapper {int insertUser();
}

创建 MyBatis的映射文件

相关概念:ORM(Object Relationship Mapping)对象关系映射。

  • 对象:Java的实体类对象
  • 关系:关系型数据库
  • 映射:二者之间的对应关系
Java 概念数据库概念
属性字段/列
对象记录/行
  • 映射文件的命名规则:
    表所对应的实体类的类名+Mapper.xml
    例如:表t_user,映射的实体类为User,所对应的映射文件为UserMapper.xml
    因此一个映射文件对应一个实体类,对应一张表的操作
    MyBatis映射文件用于编写SQL,访问以及操作表中的数据
    MyBatis映射文件存放的位置是src/main/resources/mappers目录下
  • MyBatis中可以面向接口操作数据,要保证两个一致:
    1. mapper接口的全类名和映射文件的命名空间(namespace)保持一致
    2. mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.keke.mybatis.mapper.UserMapper"><!--mapper 接口和映射文件要保证两个一致:1.mapper 接口中的全类名和映射文件的 namespace 一致2.mapper 接口中的方法名要和映射文件中的 SQL 的 id 保持一致--><insert id="insertUser">insert into t_user (`id`, `username`, `password`, `age`, `gender`, `email`)values (null, 'admin', '123456', 23, '男', '12345@qq.com');</insert>
</mapper>

通过 junit 单元测试

package cn.keke;import cn.keke.mybatis.mapper.UserMapper;
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;/*** Copyright (C) 2024 - 2024 keke, Inc. All Rights Reserved** @Desc :* @Time : 2024/6/2 21:49* @Author : Code_By_keke* @Email : 2284037977@qq.com* @Class : MyBatisTest* @IDE : IntelliJ IDEA*/
public class MyBatisTest {@Testpublic void testInsert() throws IOException {// 获取核心配置文件的输入流InputStream is = Resources.getResourceAsStream("mybatis-config.xml");// 获取 SqlSessionFactoryBuilder 对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();// 获取 SqlSessionFactory 对象SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);// 获取 SQL 的会话对象 SqlSession(会自动提交事务),是 MyBatis 提供的操作数据库的对象SqlSession sqlSession = sqlSessionFactory.openSession(true);// 获取 UserMapper 的代理实现类对象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 调用 mapper 中的方法,实现添加用户信息的功能int result = mapper.insertUser();System.out.println("结果:" + result);// 提交事务sqlSession.commit();// 关闭 SqlSessionsqlSession.close();}
}
  • SqlSession:代表Java程序和数据库之间的会话。(HttpSession是Java程序和浏览器之间的
    会话)
  • SqlSessionFactory:是“生产”SqlSession的“工厂”。
  • 工厂模式:如果创建某一个对象,使用的过程基本固定,那么我们就可以把创建这个对象的
    相关代码封装到一个“工厂类”中,以后都使用这个工厂类来“生产”我们需要的对象。

加入 log4j 功能

加入依赖

<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>

加入log4j的配置文件

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

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"><appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"><param name="Encoding" value="UTF-8"/><layout class="org.apache.log4j.PatternLayout"><param name="ConversionParttern" 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(调试)
从左到右打印的内容越来越详细

相关文章:

MyBatis二、搭建 MyBatis

MyBatis二、搭建 MyBatis 开发环境MySQL 不同版本的注意事项驱动程序&#xff08;Driver&#xff09;JDBC URL连接参数MyBatis配置文件版本兼容性常见问题与解决方案示例&#xff08;MySQL 8.x与MyBatis连接&#xff09; 创建 Maven 工程打包方式&#xff1a;Jar引入依赖创建数…...

昵称生成器

package mainimport ("math/rand" )// 随机昵称 形容词 var nicheng_tou []string{"迷你的", "鲜艳的", "飞快的", "真实的", "清新的", "幸福的", "可耐的", "快乐的", "冷…...

mysql仿照find_in_set写了一个replace_in_set函数,英文逗号拼接字符串指定替换

开发中使用mysql5.7版本数据库&#xff0c;对于英文逗号拼接的字符串&#xff0c;想要替换其中指定的字符串&#xff0c;找不到数据库函数支持&#xff0c;自己写了一个&#xff0c;实测好用&#xff01; /*类似find_in_set,按英文逗号拆分字段,找出指定的旧字符串,替换成新字…...

机械设计手册第一册:公差

形位公差的标注&#xff1a; 形位公差框格中&#xff0c;不仅要表达形位公差的特征项目、基准代号和其他符号&#xff0c;还要正确给出公差带的大小、形状等内容。 1.形位公差框格&#xff1a; 形位公差框格由两个框格或多个格框组成&#xff0c;框格中的主要内容从左到右按…...

如何把图片保存成16位png格式?

在进行图像处理的过程中&#xff0c;见过8位和24位的图片&#xff0c;然而还没见过16位的&#xff0c;其实也有&#xff0c;比如对于灰度图&#xff0c;就是相当于利用65535个灰度级进行灰度存储。而8位就是256个位置存储。相当于就是0-255. 今天尝试了巨久&#xff0c;用pyth…...

vue 关闭页面前释放资源

mounted() {window.addEventListener(beforeunload, e > this.handleBeforeUnload(e)) }beforeDestroy() {//监听-关闭页面的时候释放资源window.removeEventListener(beforeunload, e > this.handleBeforeUnload(e))},methods: {handleBeforeUnload(event){event.preven…...

堡垒机,日志审计系统,行为管理,漏洞扫描的作用

堡垒机 日志审计 行为管理 漏洞扫描 堡垒机和防火墙的区别主要体现在以下几个方面&#xff1a; 功能不同&#xff1a;堡垒机主要用于管理和控制服务器访问权限&#xff0c;提供安全的登录通道和权限控制&#xff0c;还可以记录并监控用户对服务器的所有操作&#xff0c;为后…...

JVM学习-自定义类加载器

为什么要自定义类加载器 隔离加载类 在某些框架内进行中间件与应用的模块隔离&#xff0c;把类加载到不同的环境&#xff0c;如Tomcat这类Web应用服务器&#xff0c;内部自定义了好几种类加载器&#xff0c;用于隔离同一个Web应用服务器上的不同应用程序 修改类加载的方式 …...

NDIS Filter开发-OID 请求

NDIS 定义对象标识符 (OID) 值来标识适配器参数&#xff0c;其中包括操作参数&#xff0c;例如设备特征、可配置的设置和统计信息。 Filter驱动程序可以查询或设置基础驱动程序的操作参数&#xff0c;或过滤/覆盖顶层驱动程序的 OID 请求。 NDIS 还为 NDIS 6.1 及更高版本的Fi…...

软考 系统架构设计师之考试感悟2

接前一篇文章&#xff1a;软考 系统架构设计师之考试感悟 今天是2024年5月25号&#xff0c;是个人第二次参加软考系统架构师考试的正日子。和上次一样&#xff0c;考了一天&#xff0c;身心俱疲。天是阴的&#xff0c;心是沉的&#xff0c;感觉比上一次更加沉重。仍然有诸多感悟…...

[学习笔记](b站视频)PyTorch深度学习快速入门教程(绝对通俗易懂!)【小土堆】(ing)

视频来源&#xff1a;PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】 前面P1-P5属于环境安装&#xff0c;略过。 5-6.Pytorch加载数据初认识 数据文件: hymenoptera_data # read_data.py文件from torch.utils.data import Dataset …...

Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量

一个Flutter页面&#xff0c;可以定义页面构造参数和State成员变量。所谓页面构造参数&#xff0c;就是当前页面构造函数里面的参数。 比如下面代码&#xff0c;a就是构造参数&#xff0c;a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…...

R语言数据分析-xgboost模型预测

XGBoost模型预测的主要大致思路&#xff1a; 1. 数据准备 首先&#xff0c;需要准备数据。这包括数据的读取、预处理和分割。数据应该包括特征和目标变量。 步骤&#xff1a; 读取数据&#xff1a;从CSV文件或其他数据源读取数据。数据清理&#xff1a;处理缺失值、异常值等…...

使用redis的setnx实现分布式锁

在Redis中&#xff0c;SETNX 是 “Set If Not Exists”&#xff08;如果不存在&#xff0c;则设置&#xff09;的缩写。这是一个原子操作&#xff0c;用于设置一个键的值&#xff0c;前提是这个键不存在。如果键已经存在,.则不会执行任何操作。 封装方法trylock&#xff0c;用…...

LangChain进行文本摘要 总结

利用LangChain进行文本摘要的详细总结 LangChain是一个强大的工具&#xff0c;可以帮助您使用大型语言模型&#xff08;LLM&#xff09;来总结多个文档的内容。以下是一个详细指南&#xff0c;介绍如何使用LangChain进行文本摘要&#xff0c;包括使用文档加载器、三种常见的摘…...

政安晨【零基础玩转各类开源AI项目】:解析开源项目的论文:Physical Non-inertial Poser (PNP)

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 零基础玩转各类开源AI项目 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 本文解析的原始论文为&#xff1a;https://arxiv.org/…...

【机器学习】基于OpenCV和TensorFlow的MobileNetV2模型的物种识别与个体相似度分析

在计算机视觉领域&#xff0c;物种识别和图像相似度比较是两个重要的研究方向。本文通过结合深度学习和图像处理技术&#xff0c;基于OpenCV和TensorFlow的MobileNetV2的预训练模型模&#xff0c;实现物种识别和个体相似度分析。本文详细介绍该实验过程并提供相关代码。 一、名…...

建模杂谈系列244 TimeTraveller

说明 所有的基于时间处理和运行的程序将以同样的节奏同步和执行 TT(TimeTraveller)是一个新的设计&#xff0c;它最初会服务与量化过程的大量任务管理&#xff1a;分散开发、协同运行。但是很显然&#xff0c;TT的功能将远不止于此&#xff0c;它将服务大量的&#xff0c;基于时…...

基于MingGW64 GCC编译Windows平台上的 libuvc

安装cmake 打开cmake官网 https://cmake.org/download/&#xff0c;下载安装包&#xff1a; 安装时选择将cmake加到系统环境变量里。安装完成后在新的CMD命令窗口执行cmake --version可看到输出&#xff1a; D:\>cmake --version cmake version 3.29.3 CMake suite mainta…...

【Linux】网络高级IO

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Linux 目录 &#x1f449;&#x1f3fb;五种IO模型&#x1f449;&#x1f3fb;消息通信的同步异步与进程线程的同步异步有什么不同&#xff1f;&#x1f449…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;使用DevEco Studio作为开发工具&#xff0c;采用Java语言实现&#xff0c;包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...