Java-02 深入浅出 MyBatis - MyBatis 快速入门(无 Spring) POM Mapper 核心文件 增删改查

devtools/2024/11/18 19:19:33/

点一下关注吧!!!非常感谢!!持续更新!!!

大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html

在这里插入图片描述

目前已经更新到了:

  • MyBatis(正在更新)

在这里插入图片描述

快速入门

官方地址

http://www.mybatis.org/mybatis-3/

在这里插入图片描述

开发步骤

  • 添加 MyBatis 的坐标
  • 创建 User 数据表
  • 编写 User 实体类
  • 编写映射文件 UserMapper
  • 编写核心文件 SqlMapConfig.xml
  • 编写测试类

创建数据库和表

  • 根据项目需求设计数据库表。
  • 编写 SQL 脚本创建表结构。

导入 MyBatis 依赖

如果使用 Maven 管理项目,添加 MyBatis 的依赖。
例如,常见的依赖包括 MyBatis 核心库、MyBatis-Spring(若结合 Spring 使用)和数据库驱动。

项目结构规划

在项目中,通常会按照以下结构组织代码:

  • Mapper 文件夹:存放 MyBatis 的映射接口文件。
  • Mapper XML 文件夹:存放 MyBatis 的 SQL 映射文件。
  • 实体类文件夹:对应数据库表的 Java 实体类。
  • Service 文件夹:封装业务逻辑。
  • DAO(或 Repository)文件夹:封装数据库操作。

mybatisconfigxml_39">配置主配置文件 mybatis-config.xml

  • 配置数据库连接信息(或者直接通过外部 DataSource 配置)。
  • 配置别名,简化实体类的全类名使用。
  • 指定 Mapper XML 文件的路径。

数据库连接配置

  • 配置数据库连接的 URL、用户名、密码等信息。
  • 如果结合 Spring 或 Spring Boot 使用,可以直接通过 DataSource Bean 注入。

创建实体类

  • 根据数据库表结构创建与之对应的 Java 实体类。
  • 属性名与表中的字段名保持一致(建议使用驼峰命名)。
  • 可以使用注解 @Alias 设置别名。

编写 Mapper 接口

  • 创建 Mapper 接口,用于声明操作数据库的方法。
  • 方法名与 SQL 映射文件中的 id 一一对应。
  • Mapper 接口上无需实现类,MyBatis 会动态生成实现。

编写 Mapper 映射文件

编写与 Mapper 接口方法对应的 SQL。
定义 SQL 语句的 id,以供 Mapper 接口调用。
常用标签包括:

  • select:查询语句。
  • insert:插入语句。
  • update:更新语句。
  • delete:删除语句。
    动态 SQL 功能:使用 、 等标签构建复杂查询条件。

加载配置文件

  • 使用 SqlSessionFactoryBuilder 读取 mybatis-config.xml,构建 SqlSessionFactory。
  • 通过 SqlSessionFactory 获取 SqlSession,执行 Mapper 方法。

POM

<?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>org.example</groupId><artifactId>mybatis-test</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--mybatis坐标--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动坐标--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version><scope>runtime</scope></dependency><!--单元测试坐标--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><!--日志坐标--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.12</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency></dependencies></project>

数据表

新建一个数据库,放一张测试的表进去。

CREATE TABLE `user_info` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int(11) DEFAULT NULL,`money` bigint(20) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

对应的表如下所示:
在这里插入图片描述

实体类

java">package icu.wzk.model;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {private Long id;private String username;private String password;private Integer age;
}

对应的截图如下所示:
在这里插入图片描述

Mapper

<?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="icu.wzk.mapper.UserInfoMapper"><!-- 查询单个用户信息 --><select id="selectOne" parameterType="java.lang.String" resultType="icu.wzk.model.UserInfo">SELECT*FROMuser_infoWHEREusername = #{username}</select><!-- 查询所有用户信息 --><select id="selectList" resultType="icu.wzk.model.UserInfo">SELECT*FROMuser_info</select>
</mapper>

对应的截图如下所示:
在这里插入图片描述

核心文件

<?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><properties><property name="driverClass" value="com.mysql.cj.jdbc.Driver"/><property name="jdbcUrl" value="jdbc:mysql://172.16.1.130:3306/wzk-mybatis?characterEncoding=utf-8"/><property name="user" value="hive"/><property name="password" value="hive@wzk.icu"/></properties><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="${driverClass}"/><property name="url" value="${jdbcUrl}"/><property name="username" value="${user}"/><property name="password" value="${password}"/></dataSource></environment></environments><mappers><mapper resource="mapper.xml"/></mappers>
</configuration>

对应的截图如下所示:
在这里插入图片描述

测试代码

java">package icu.wzk;import icu.wzk.model.UserInfo;
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 WzkIcu01 {public static void main(String[] args) throws IOException {InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);SqlSession sqlSession = sqlSessionFactory.openSession();List<UserInfo> dataList = sqlSession.selectList("icu.wzk.mapper.UserInfoMapper.selectList");dataList.forEach(System.out::println);sqlSession.close();}
}

控制台输出结果如下琐事:

24/11/11 15:02:49 DEBUG logging.LogFactory: Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: PooledDataSource forcefully closed/removed all connections.
24/11/11 15:02:49 DEBUG jdbc.JdbcTransaction: Opening JDBC Connection
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: Created connection 240166646.
24/11/11 15:02:49 DEBUG jdbc.JdbcTransaction: Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@e50a6f6]
24/11/11 15:02:49 DEBUG UserInfoMapper.selectList: ==>  Preparing: SELECT * FROM user_info
24/11/11 15:02:49 DEBUG UserInfoMapper.selectList: ==> Parameters: 
24/11/11 15:02:49 DEBUG UserInfoMapper.selectList: <==      Total: 1
UserInfo(id=1, username=wzk, password=icu, age=18)
24/11/11 15:02:49 DEBUG jdbc.JdbcTransaction: Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@e50a6f6]
24/11/11 15:02:49 DEBUG jdbc.JdbcTransaction: Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@e50a6f6]
24/11/11 15:02:49 DEBUG pooled.PooledDataSource: Returned connection 240166646 to pool.

执行结果如下图所示:
在这里插入图片描述


http://www.ppmy.cn/devtools/135021.html

相关文章

Java结合ElasticSearch根据查询关键字,高亮显示全文数据。

由于es高亮显示机制的问题。当全文内容过多&#xff0c;且搜索中标又少时&#xff0c;就会出现高亮结果无法覆盖全文。因此需要根据需求手动替换。 1.根据es的ik分词器获取搜索词的分词结果。 es部分&#xff1a; //中文分词解析 post /_analyze {"analyzer":"…

支持用户注册和登录、发布动态、点赞、评论、私信等功能的社交媒体平台创建!!!

需要整体源代码的可以在我的代码仓下载https://gitcode.com/speaking_me/social-media-platformTest.git 社交媒体平台 描述&#xff1a;社交媒体平台需要支持用户注册、发布动态、点赞、评论、私信等功能。 技术栈&#xff1a; 前端&#xff1a;React, Angular, Vue.js后端…

飞创直线电机模组 VS 传统丝杆模组:谁是自动化传动领域的王者?

在现代自动化技术领域&#xff0c;直线电机模组与传统丝杆模组作为两种常见的传动方式&#xff0c;各自有独特的特点和优势。然而&#xff0c;随着科学的不断进步和应用需求的日益提高&#xff0c;两者在精度、速度、寿命及可拓展性方面的差异愈发显著。本文将重点对比飞创直线…

[模板总结] - 单向链表LinkedList操作

题目汇总 Leetcode 21, 82, 160, 206, 237, 268 Leetcode 21. 合并两个有序链表 归并排序的思路&#xff0c;创建一个哨兵节点从两个链表中按大小插入即可。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(…

【机器学习】机器学习中用到的高等数学知识-4.数值分析 (Numerical Analysis)

优化方法&#xff1a;用于寻找函数的极值&#xff08;如牛顿法、随机梯度下降&#xff09;。插值和拟合&#xff1a;用于处理数据点之间的关系&#xff0c;生成模型。 数值分析&#xff08;Numerical Analysis&#xff09;是数学的一个分支&#xff0c;专注于开发用于数值近似…

一文简单了解Android中的input流程

在 Android 中&#xff0c;输入事件&#xff08;例如触摸、按键&#xff09;从硬件传递到应用程序并最终由应用层消费。整个过程涉及多个系统层次&#xff0c;包括硬件层、Linux 内核、Native 层、Framework 层和应用层。我们将深入解析这一流程&#xff0c;并结合代码逐步了解…

开源科学工程技术软件介绍 – EDA工具KLayout

link 今天向各位知友介绍的 KLayout是一款由德国团队开发的开源EDA工具。 KLayout是使用C开发的&#xff0c;用户界面基于Qt。它支持Windows、MacOS和Linux操作系统。安装程序可以从下面的网址下载&#xff1a; https://www.klayout.de/build.html KLayout图形用户界面&…

css实现斜条纹背景

最近有个模块需求采用斜条纹背景 做标头背景 记录下实现代码 <template><div class"striped-background"><span>货种</span><span>企业数</span><span>企业数</span><span>客户数</span></div> …