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

ops/2024/11/17 8:05:51/

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

大数据篇正在更新!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/ops/134367.html

相关文章

freemarker 读取template.xml ,通过response 输出文件,解决中文乱码问题

采用 try (Writer writer new OutputStreamWriter(os, “UTF-8”)) UTF-8 内容转换 public static void setResponseHeader(HttpServletResponse response, String fileName) {try {// fileName "中文.xls";try {fileName new String(fileName.getBytes(),"…

PostgreSQL中的COPY命令:高效数据导入与导出

在PostgreSQL数据库中&#xff0c;数据导入和导出是日常工作中常见的操作。传统的插入&#xff08;INSERT&#xff09;方法虽然可以实现数据的导入&#xff0c;但在处理大量数据时效率较低。而COPY命令则提供了一个快速、高效的方式来完成这一任务。COPY命令不仅可以用于将数据…

在启动 Spring Boot 项目时,报找不到 slf4j 的错误

而且 tomcat 的启动信息不知道为什么输出出来了 问 AI 得到的解决方案&#xff1a; 将 pom.xml 中的如下配置替换成这样&#xff0c;排除这个插件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring - boot - starter - …

论文阅读--supervised learning with quantum enhanced feature spaces

简略摘要 量子算法实现计算加速的核心要素是通过可控纠缠和干涉利用指数级大的量子态空间。本文在超导处理器上提出并实验实现了两种量子算法。这两种方法的一个关键组成部分是使用量子态空间作为特征空间。只有在量子计算机上才能有效访问的量子增强特征空间的使用为量子优势提…

【数字静态时序分析】复杂时钟树的时序约束SDC写法

以上图为例&#xff0c;SoC芯片上往往存在几种不同的时钟源&#xff0c;有pll时钟、环振时钟、外部的晶振时钟&#xff0c;在SoC不同的模块或者不同的运行阶段使用的时钟也往往不同&#xff0c;所以在使用的时候&#xff0c;相同的模块会出现选择不同的时钟源的情况。上图的情形…

SQL笔试题笔记(1)

下列选项中关于数据库事务的特性描述正确的是&#xff08;&#xff09; A.事务允许继续分割B.多个事务在执行事务前后对同一个数据读取的结果是不同的C.一个事务对数据库中数据的改变是暂时的D.并发访问数据库时&#xff0c;各并发事务之间数据库是独立的 答案解析&#xff1a…

基于微信小程序的校园超市购物系统设计与实现,LW+源码+讲解

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本超市购物系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

使用YOLOv9进行图像与视频检测

大家好&#xff0c;YOLOv9 与其前身v8一样&#xff0c;专注于识别和精确定位图像和视频中的对象。本文将介绍如何使用YOLOv9进行图像与视频检测&#xff0c;自动驾驶汽车、安全系统和高级图像搜索等应用在很大程度上依赖于此功能&#xff0c;YOLOv9 引入了比 YOLOv8 更令人印象…