Mybatis连接数据库

文章目录

    • 大纲
    • 定义类、创建表
    • 添加相关依赖
    • 五件套
      • 5.1 mybatis-config.xml
      • 5.2 MybatisUtils.java
      • 5.3 \**Mapper.xml
      • 5.4 \**Mapper.java
      • 5.5 \**Dao.java
    • 测试类

大纲

  1. 在Java中定义类、在数据库汇总创建表
  2. 添加依赖
  3. 编写5件套
  4. 测试

定义类、创建表

import java.time.LocalDate;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {private int uid;             // 用户IDprivate String email;        // 邮箱private String password;     // 密码private String nickname;     // 昵称private String uname;        // 用户名private LocalDate birthday;  // 生日private String gender;       // 性别
}
CREATE TABLE User (uid INT AUTO_INCREMENT PRIMARY KEY,email VARCHAR(50) NOT NULL,password VARCHAR(100) NOT NULL,nickname VARCHAR(30),uname VARCHAR(30) NOT NULL,birthday DATE,gender CHAR(1),CONSTRAINT chk_gender CHECK (gender IN ('M', 'F', 'O'))
);-- 解释:
-- uid: 自增主键
-- email: 邮箱,最长50个字符,不允许为空
-- password: 密码,最长100个字符,不允许为空
-- nickname: 昵称,最长30个字符
-- uname: 用户名,最长30个字符,不允许为空
-- birthday: 生日,使用DATE类型
-- gender: 性别,单个字符,只能是 'M', 'F' 或 'O',分别表示男性、女性和其他

模拟数据

INSERT INTO User (email, password, nickname, uname, birthday, gender) VALUES
('john.doe@example.com', 'password123', 'John', 'johndoe', '1990-01-01', 'M'),
('jane.smith@example.com', 'securepass456', 'Jane', 'janesmith', '1985-05-15', 'F'),
('alex.jones@example.com', 'mypassword789', 'Alex', 'alexjones', '1992-07-22', 'O');

添加相关依赖

<!--lombok-->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
<!--junit-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version>
</dependency>
<!--mysql-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
</dependency>
<!--mybatis-->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.9</version>
</dependency>

五件套

5.1 mybatis-config.xml

mybatis的配置文件

有几个地方需要你做修改

  1. 数据库名称,在3306后边,请修改成你自己的数据库的名称。如果数据库不在本地,比如在云服务器上,那还需要你把localhost修改为云服务器的ip地址。
  2. 用户名和密码,修改为自己的用户名和密码。
  3. mapper映射文件的文件名。记者修改成自己的mapper的文件名。(如果想简单写,就把mybatis-config.xml 和 **mapper.xml 写在同级目录,这样在配的时候,就不用考虑文件路径的问题了。
<?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核心配置文件-->
<configuration><!-- 环境配置,定义了应用运行的环境,默认为development --><environments default="development"><!-- development环境的详细配置 --><environment id="development"><!-- 事务管理器配置,这里使用JDBC事务管理器 --><transactionManager type="JDBC"/><!-- 数据源配置,使用连接池管理数据库连接 --><dataSource type="POOLED"><!-- 数据库驱动类路径 -->防止你忘改,我特意加的中文报错<property name="driver" value="com.mysql.cj.jdbc.Driver"/><!-- 数据库连接URL,这里配置的是一个MySQL数据库的连接 --><property name="url" value="jdbc:mysql://localhost:3306/mine2024?useSSl=trur&amp;sueUnicode=true&amp;characterEncoding=UTF-8&amp;serverTimezone=Asia/Shanghai"/><!-- 数据库用户名 -->防止你忘改,我特意加的中文报错<property name="username" value="root"/><!-- 数据库密码 --><property name="password" value="123456"/></dataSource></environment></environments><!-- 定义mapper映射文件位置 --><mappers><!-- 指向具体的mapper映射文件 -->防止你忘改,我特意加的中文报错<mapper resource="TagMapper.xml"/></mappers></configuration>

5.2 MybatisUtils.java

你同样需要对这个文件做一些修改:

你需要修改将String resource = "mybatis-config4tag.xml";修改成你自己在5.1里建的配置文件的名字

package com.example.demo.tree.learn1.dao;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;//sqlSessionFactory -->sqlSession
public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;//使用mybatis第一步,获取sqlSessionFactory对象static {try {String resource = "mybatis-config4tag.xml";防止你忘改,我特意加的中文报错InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}//既然有了sqlSessionFactory,顾名思义,我们就可以从中获得sqlSession的实例了//sqlSession 完全包含了面向数据库执行SQL命令所需的所有方法public static SqlSession getSqlSession(){return sqlSessionFactory.openSession();}
}

5.3 **Mapper.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.example.demo.user.dao.mapper.UserMapper">防止忘改类名<!-- 查询所有用户信息 --><select id="getAllUsers" resultType="com.example.demo.user.pojo.User">防止忘改类名SELECT uid, email, password, nickname, uname, birthday, gender FROM User</select><insert id="insert" parameterType="com.example.demo.user.pojo.User">防止忘改类名INSERT INTO User (email, password, nickname, uname, birthday, gender)VALUES (#{email}, #{password}, #{nickname}, #{uname}, #{birthday}, #{gender})</insert></mapper>

5.4 **Mapper.java

package com.example.demo.user.dao.mapper;import com.example.demo.user.pojo.User;
import java.util.List;public interface UserMapper {List<User> getAllUsers();int insert(User user);
}

5.5 **Dao.java

package com.example.demo.user.dao;import com.example.demo.user.dao.mapper.UserMapper;
import com.example.demo.user.pojo.User;
import org.apache.ibatis.session.SqlSession;import java.util.List;public class UserDao {SqlSession sqlSession ;UserMapper userMapper;public UserDao() {sqlSession = MybatisUtils.getSqlSession();userMapper = sqlSession.getMapper(UserMapper.class);}public List<User> getAllUsers() {return userMapper.getAllUsers();}public int insert(User user) {int res=userMapper.insert(user);sqlSession.commit();return res;}}

测试类

package com.example.demo.user;import com.example.demo.user.dao.UserDao;
import com.example.demo.user.pojo.User;
import org.junit.jupiter.api.Test;import java.time.LocalDate;public class UserDaoTest {@Testvoid testGetAllUsers() {UserDao userDao = new UserDao();System.out.println(userDao.getAllUsers());}@Testvoid testInsert() {UserDao userDao = new UserDao();// 创建一个模拟的 User 对象User user = new User();user.setEmail("test.user@example.com");user.setPassword("TestPassword123");user.setNickname("TestUser");user.setUname("testuser");user.setBirthday(LocalDate.of(2000, 1, 1));user.setGender("M");userDao.insert(user);System.out.println(userDao.getAllUsers());}
}

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

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

相关文章

土壤分析仪:分析土壤中的各种养分

土壤作为地球生命的摇篮&#xff0c;承载着农作物的生长与繁衍。土壤中的养分是农作物生长的关键。 一、土壤分析仪的工作原理 土壤分析仪是一种采用先进传感技术的仪器设备&#xff0c;能够精确测量土壤中的PH值、电导率、有机质含量、养分含量以及微生物数量等参数。它利用多…

# Kafka_深入探秘者(9):kafka 集群管理

Kafka_深入探秘者&#xff08;9&#xff09;&#xff1a;kafka 集群管理 一、kafka 集群概述 1、kafka 集群概述&#xff1a; 集群是一种计算机系统&#xff0c;它通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上&#xff0c;他们可…

ffmpeg下载/配置环境/测试

一、下载 1、访问FFmpeg官方网站下载页面&#xff1a;FFmpeg Download Page&#xff1b; 2、选择适合Windows的版本&#xff08;将鼠标移动到windows端&#xff09;。通常&#xff0c;你会找到“Windows builds from gyan.dev”或者“BtbN GitHub Releases”等选项&#xff0…

研0学习Python基础4

1.数组是一种存储大量同性质数据的连续内存空间&#xff0c;只要使用相同的变量名称&#xff0c;便可以连续访问 每一组数据。由于数组元素的便利性&#xff0c;使得大多数程序中都可以看到数组的身影。数组是一 个带有多个数据且模式相同的元素集合。比如&#xff0c;数值所…

WHAT - React Immer

官方文档&#xff1a;https://immerjs.github.io/immer/example-setstate useState ImmeruseImmeruseReducer ImmeruseImmerReducerRedux Immer React 和 Immer 是两个不同的工具&#xff0c;它们在处理状态管理和状态更新时可以很好地结合使用。 React React 是一个用于…

底层软件 | 设备树、设备注册、驱动注册与驱动匹配

前面我们学习了设备如何和驱动匹配&#xff0c;也学习了设备树。 一直觉得&#xff0c;需要有一篇文章系统、项目般的结合讲解一下&#xff0c;加深一下影响&#xff0c;正当我准备动笔之时&#xff0c;发现了一篇很不错的文章&#xff01; 就分享给大家一起来看看设备树、设…

实验2 字符及字符串输入输出与分支程序设计实验

字符及字符串输入输出 从键盘输入两个一位十进制数&#xff0c;计算这两个数之和&#xff0c;并将结果在屏幕上显示出来。 分支程序设计 从键盘输入一字符&#xff0c;判断该字符是小写字母、大写字母、数字或者其他字符。若输入为小写字母&#xff0c;显示“You Input a Lo…

悼念之前的coplit

最近学MySQL七月三号还能正常卡bug使用紫色的coplit 然后今天就不行了 可惜了&#xff0c;蓝色的就是GPT3&#xff0c;紫色是4(可能比不上4但至少比蓝色的聪明点&#xff09; 原来一开始问题框上面有三个模式选择&#xff0c;去年下半年的时候这个三个模式就被隐藏掉了&#x…

备份和清理windows事件日志

echo off Set CurrentDate%date:6,4%-%date:3,2%-%date:~0,2% Set CurrentTime%time:0,2%-%time:3,2%-%time:~6,2% Set CurrentDateTime%CurrentDate% for /f "tokens1-4 delims/ " %%a in (‘date /t’) do ( set month%%a set day%%b set year%%c ) :: 确保月和日始…

成都欣丰洪泰文化传媒有限公司开网店可靠吗?

在数字化浪潮席卷全球的今天&#xff0c;电商行业无疑是这场浪潮中的佼佼者。而在这波汹涌的电商大潮中&#xff0c;成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和前瞻的市场洞察力&#xff0c;成为了业界的一匹黑马。今天&#xff0c;就让我们一起揭开这家专注于电…

python绘制领域矩形

问题描述&#xff1a; 使用python书写代码实现以下功能&#xff1a;给定四个点的坐标&#xff0c;调用一个函数&#xff0c;可以使原来的四个点分别向四周上下左右移动15距离&#xff0c;分别记录下移动后的坐标&#xff0c;然后画出内侧矩形和外侧矩形 代码&#xff1a; im…

提升学生岗位管理效率,构建智慧校园学工管理新模式

智慧校园学工管理系统中的“学生岗位”功能&#xff0c;是连接学生与实践机会的桥梁&#xff0c;它集岗位发布、申请、管理、评价于一体&#xff0c;全方位支持学生在校期间的实践锻炼与能力提升。该功能让校园内外的各类组织能轻松在线发布多样化的实践岗位&#xff0c;比如助…

SAP HCM ABAP DEBUG小技巧

导读 INTRODUCTION 调试小技巧&#xff1a;今天分享下我在处理HCM业务中&#xff0c;通过一些DEBUG技巧&#xff0c;减少DEBUG参数输入的问题&#xff0c;经过会遇到调试代码&#xff0c;有时候DEBUG太快&#xff0c;错过自己想看的代码&#xff0c;有时候不想执行某段代码&…

Python基础教程——10个可视化案例实操,一图胜千言!

让数据集改变你的思维 数据可视化是数据科学家传达洞见和讲述数据故事的关键工具。作为 Python 开发者&#xff0c;我们拥有丰富的可视化库和工具&#xff0c;能够创建各种引人入胜的图表。本文将探索一些鲜为人知但实用的可视化类型&#xff0c;如桑基图(Sankey Diagrams)、脊…

【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录 1.数据类型分类2.数值类型2.1tinyint 1字节2.2bit 0-64位2.3浮点类型float 4个字节decimal 3.字符串类型char开多少空间为多大varchar开多少是上限 存多少占多大空间日期和时间类型enum和setenum&#xff1a;枚举&#xff0c;“单选”类型&#xff1b;set&#xff1a;…

9.计算机视觉—目标检测

目录 1.物体检测边缘框目标检测数据集总结边缘框代码实现2.锚框:目标检测的一种方法IoU—交并比赋予锚框标号使用非极大值抑制(NMS)输出总结代码实现1.物体检测 边缘框 一个边缘框可以通过四个数字定义 (左上x,左上y),(右下x,右下y)(左上x,左上y,宽,高)(中间x,中间y…

docker-compose: 未找到命令

这个错误表明您在执行docker-compose up -d命令时&#xff0c;系统无法找到docker-compose命令。这通常是因为在当前的环境中&#xff0c;docker-compose命令没有被正确安装或者没有被正确配置到系统的可执行路径中。 要解决这个问题&#xff0c;您可以按照以下步骤检查和修复…

文心一言指令是什么?快速上手教程来了!

在数字化时代&#xff0c;人工智能的发展日新月异&#xff0c;其中自然语言处理技术尤为引人瞩目。文心一言作为其中的佼佼者&#xff0c;凭借其强大的语言理解和生成能力&#xff0c;为用户提供了高效、便捷的信息处理服务。本文将详细介绍如何快速上手文心一言指令&#xff0…

用网上抓取的天气的接口做了一个系统

这个接口数据太全了了&#xff0c;空气质量、雷达预报、小时预报、15天预报、实况、aqi排名&#xff0c;云量、预警、生活指数包圆了&#xff0c;数据接口如下图所示&#xff1a; 万年历 万年历接口 行政区划边界GEOJSON 国家统计局区划编码 全国城市区划编码经纬度 天气实况 …

10计算机视觉—物体检测算法

目录 1.R-CNN(区域卷积神经网络)2014兴趣区域(RoI)池化层Fast RCNN 2015Faster R-CNN 2015Mask R-CNN 2017总结2. SSD(单发多框检测)2016SSD模型总结3.YOLO(你只看一次)快!很重要4.目标检测算法性能对比5.SSD代码实现 使用很少,比不上yolo多尺度锚框实现SSD代码实现训练…