基于 Mybatis 框架*的完整开发流程与顺序

基于 MyBatis 框架 的完整开发流程与顺序

一、环境准备阶段

1. 新建 Maven 项目(或普通 Java 项目)
  • 作用:用 Maven 统一管理依赖,自动下载 MyBatis、MySQL 驱动等 Jar 包

  • 操作

    • IDE(如 IDEA)选 Maven Archetype(或直接建空项目),填 groupIdartifactId(如 Mybatis1

    • 若手动建项目,需自己整理目录结构

2. 配置 pom.xml(Maven 依赖)
  • 作用:引入 MyBatis 核心库、MySQL 驱动、JUnit(测试用)

  • 关键依赖

    <!-- MyBatis 核心 -->
    <dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.19</version>
    </dependency>
    <!-- MySQL 驱动 -->
    <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version>
    </dependency>
    <!-- JUnit 测试 -->
    <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version><scope>test</scope>
    </dependency>
  • 注意

    • 解决资源导出问题(如 src/main/java 里的 XML 映射文件),需在 pom.xml 里配置 <build> 资源过滤

3. 编写 MyBatis 核心配置(mybatis-config.xml
  • 作用:全局配置 MyBatis(数据源、事务、Mapper 扫描等)

  • 关键内容

    <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/mybatis?useSSL=false&amp;serverTimezone=UTC"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><!-- 注册 Mapper 映射文件 --><mappers><mapper resource="com/lyj/dao/UserMapper.xml"/></mappers>
    </configuration>
  • 注意

    • url 里的数据库名(mybatis)、用户名、密码要和实际一致

    • mappers 里的 resource 路径要和 XML 映射文件位置对应


二、业务功能开发阶段

1. 定义实体类(POJO):User.java
  • 作用:映射数据库表字段,封装查询结果

  • 示例

    public class User {private int id;private String name;private String pwd;// 构造方法、Getter/Setter、toString()
    }
  • 注意:属性名尽量和数据库字段名一致(或用 resultMap 处理映射)

2. 编写 Mapper 接口:UserDao.java
  • 作用:定义数据库操作方法(面向接口编程)

  • 示例

    public interface UserDao {List<User> getUserList(); // 查询所有用户User getUserById(int id); // 按 ID 查询int addUser(User user); // 新增用户int updateUser(User user); // 修改用户
    }
  • 注意:方法名要和 XML 映射文件里的 id 一致

3. 编写 SQL 映射文件:UserMapper.xml
  • 作用:编写具体 SQL,绑定 Mapper 接口方法

  • 示例

    <mapper namespace="com.lyj.dao.UserDao"><!-- 查询所有 --><select id="getUserList" resultType="com.lyj.pojo.User">select * from mybatis.user</select><!-- 按 ID 查询 --><select id="getUserById" parameterType="int" resultType="com.lyj.pojo.User">select * from mybatis.user where id = #{id}</select><!-- 新增 --><insert id="addUser" parameterType="com.lyj.pojo.User">insert into mybatis.user(id,name,pwd) values(#{id},#{name},#{pwd})</insert><!-- 修改 --><update id="updateUser" parameterType="com.lyj.pojo.User">update mybatis.user set name=#{name}, pwd=#{pwd} where id=#{id}</update>
    </mapper>
  • 注意

    • namespace 必须是 Mapper 接口的全限定名

    • id 必须和接口方法名一致

    • parameterTyperesultType 要和实际类型对应

4. 编写工具类:MybatisUtils.java
  • 作用:简化 SqlSession 获取,避免重复代码

  • 示例

    public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static {try {// 加载核心配置String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {e.printStackTrace();}}// 获取 SqlSession(手动提交事务)public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
    }
  • 注意openSession(true) 可开启自动提交(根据需求选)


三、测试阶段

1. 编写 JUnit 测试类:UserDaoTest.java
  • 作用:验证 Mapper 接口方法是否正确

  • 示例

    public class UserDaoTest {@Testpublic void testGetUserList() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserDao userDao = sqlSession.getMapper(UserDao.class);List<User> userList = userDao.getUserList();for (User user : userList) {System.out.println(user);}sqlSession.close();}@Testpublic void testAddUser() {SqlSession sqlSession = MybatisUtils.getSqlSession();UserDao userDao = sqlSession.getMapper(UserDao.class);int result = userDao.addUser(new User(5, "测试用户", "123456"));if (result > 0) {System.out.println("插入成功!");sqlSession.commit(); // 手动提交事务}sqlSession.close();}
    }
  • 注意

    • 增删改操作需手动提交事务(sqlSession.commit()

    • 测试完及时关闭 SqlSession


四、常见问题排查顺序

如果运行报错,按以下顺序排查:

  1. 检查依赖pom.xml 里的依赖是否下载成功(看 External Libraries 里有没有 MyBatis、MySQL 驱动)

  2. 检查配置mybatis-config.xml 的数据库连接是否正确(能连上网、用户名密码对)

  3. 检查映射UserMapper.xmlnamespaceid 是否和接口对应,SQL 语法是否正确

  4. 检查测试:测试类里的 SqlSession 是否正确获取,事务是否提交

  5. 看日志 / 报错:MyBatis 报错信息很详细(如 Invalid bound statement 就是映射没找到)


完整开发顺序总结

按这个流程走,从环境搭建到功能实现、测试,就能完整开发一个 MyBatis 项目核心是 “接口 + XML 映射” 的解耦思想,多练几遍👍

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

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

相关文章

机械学习--决策树(实战案例)

决策树分两种分类和回归&#xff0c;这篇博客我将对两种方法进行实战讲解一、分类决策树代码的核心任务是预测 “电信客户流失状态”&#xff0c;这是一个典型的分类任务数据集附在该博客上&#xff0c;可以直接下载代码整体结构整理代码主要分为以下几个部分&#xff1a;导入必…

SQL154 插入记录(一)

描述牛客后台会记录每个用户的试卷作答记录到exam_record表&#xff0c;现在有两个用户的作答记录详情如下&#xff1a;用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001&#xff0c;并在50分钟后提交&#xff0c;得了90分&#xff1b;用户1002在2021年9月4日上午7点1分…

BeanFactory 和 ApplicationContext 的区别?

口语化答案好的&#xff0c;面试官。BeanFactory和ApplicationContext都是用于管理Bean的容器接口。BeanFactory功能相对简单。提供了Bean的创建、获取和管理功能。默认采用延迟初始化&#xff0c;只有在第一次访问Bean时才会创建该Bean。因为功能较为基础&#xff0c;BeanFact…

VNC连接VirtualBox中的Ubuntu24.04 desktop图形化(GUI)界面

测试环境&#xff1a;VirtualBox 7,Ubuntu24.04 desktop,Ubuntu24.04 server(no desktop) 一、下载和安装dRealVNC viewer。 二、配置 VirtualBox 网络&#xff1a;NAT 模式 端口转发 1、打开 VirtualBox&#xff0c;选择您的 Ubuntu 虚拟机&#xff0c;点击 设置。 选择 网…

浮动路由和BFD配置

拓扑图 前期的拓扑图没有交换机配置步骤 1、配置IP地址 终端IP地址的配置 路由器IP地址的配置 配置router的对应接口的IP地址 <Huawei>sys [Huawei]sysname router [router]interface Ethernet 0/0/0 [router-Ethernet0/0/0]ip address 192.168.10.254 24 [router-Ethern…

Docker 实战 -- Nextcloud

文章目录前言1. 创建 docker-compose.yml2. 启动 Nextcloud3. 访问 Nextcloud4. 配置优化&#xff08;可选&#xff09;使用 PostgreSQL使用 redis添加 Cron 后台任务5. 常用命令6. 反向代理&#xff08;Nginx/Apache&#xff09;前言 当你迷茫的时候&#xff0c;请点击 Docke…

【计算机网络 | 第2篇】计算机网络概述(下)

文章目录七.因特网服务提供商&#x1f95d;八.接入网&#x1f95d;主流的家庭宽带接入方式介入网工作原理&#x1f9d0;DSL技术&#xff1a;铜线上的“三通道”通信DSL的速率标准呈现出显著的"不对称"特征&#x1f914;电缆互联网接入技术&#x1f34b;‍&#x1f7e…

SpringMVC 6+源码分析(四)DispatcherServlet实例化流程 3--(HandlerAdapter初始化)

一、概述 HandlerAdapter 是 Spring MVC 框架中的一个核心组件&#xff0c;它在 DispatcherServlet 和处理程序&#xff08;handler&#xff09;之间扮演适配器的角色。DispatcherServlet 接收到 HTTP 请求后&#xff0c;需要调用对应的 handler 来处理请求&#xff08;如控制器…

【lucene】FastVectorHighlighter案例

下面给出一套可直接拷贝运行的 Lucene 8.5.0 FastVectorHighlighter 完整示例&#xff08;JDK 8&#xff09;&#xff0c;演示从建索引、查询到高亮的全过程。 > 关键点&#xff1a;字段必须 1. 存储原始内容&#xff08;setStored(true)&#xff09; 2. 开启 TermVecto…

C++返回值优化(RVO):高效返回对象的艺术

在C开发中&#xff0c;按值返回对象的场景十分常见&#xff08;如运算符重载、工厂函数等&#xff09;&#xff0c;但开发者常因担忧“构造/析构的性能开销”而陷入纠结&#xff1a;该不该返回对象&#xff1f;如何避免额外成本&#xff1f;本文将剖析痛点、拆解错误思路&#…

用 PyTorch 实现一个简单的神经网络:从数据到预测

PyTorch 是目前最流行的深度学习框架之一&#xff0c;以其灵活性和易用性受到开发者的喜爱。本文将带你从零开始&#xff0c;用 PyTorch 实现一个简单的神经网络&#xff0c;用于解决经典的 MNIST 手写数字分类问题。我们将涵盖数据准备、模型构建、训练和预测的完整流程&#…

四级页表通俗讲解与实践(以 64 位 ARM Cortex-A 为例)

&#x1f4d6; &#x1f3a5; B 站博文精讲视频&#xff1a;点击链接&#xff0c;配合视频深度学习 四级页表通俗讲解与实践&#xff08;以 64 位 ARM Cortex-A 为例&#xff09; 本文面向希望彻底理解现代 64 位架构下四级页表的开发者&#xff0c;结合 ARM Cortex-A 系列处理…

AI模型整合包上线!一键部署ComfyUI,2.19TB模型全解析

最近体验了AIStarter平台上线的AI模型整合包&#xff0c;包含2.19TB ComfyUI大模型&#xff0c;整合市面主流模型&#xff0c;一键部署ComfyUI&#xff0c;省去重复下载烦恼&#xff01;以下是使用心得和部署步骤&#xff0c;适合AI开发者参考。工具亮点这款AI模型整合包由熊哥…

灰色优选模型及算法MATLAB代码

电子装备试验方案优选是一个典型的多属性决策问题&#xff0c;通常涉及指标复杂、信息不完整、数据量少且存在不确定性的特点。灰色系统理论&#xff08;Grey System Theory&#xff09;特别擅长处理“小样本、贫信息”的不确定性问题&#xff0c;因此非常适合用于此类方案的优…

AI框架工具FastRTC快速上手6——视频流案例之物体检测(下)

一 前言 上一篇,我们实现了用YOLO对图片上的物体进行检测,并在图片上框出具体的对象并打出标签。但只是应用在单张图片,且还没用上FastRTC。 本篇,我们希望结合FastRTC的能力,实现基于YOLO的实时视频流的物体检测。 本篇文字将不会太多。学习完本篇,对比前面的文章,你…

PHP常见中高面试题汇总

一、 PHP部分 1、PHP如何实现静态化 PHP的静态化分为&#xff1a;纯静态和伪静态。其中纯静态又分为&#xff1a;局部纯静态和全部纯静态。 PHP伪静态&#xff1a;利用Apache mod_rewrite实现URL重写的方法&#xff1b; PHP纯静态&#xff0c;就是生成HTML文件的方式&#xff0…

基于Java AI(人工智能)生成末日题材的实践

Java AI 生成《全球末日》文章的实例 使用Java结合AI技术生成《全球末日》题材的文章可以通过多种方式实现,包括调用预训练模型、使用自然语言处理库或结合生成式AI框架。以下是30个实例的生成方法和示例代码片段。 调用预训练模型(如GPT-3或GPT-4) 使用OpenAI API生成末日…

针对软件定义车载网络的动态服务导向机制

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Pytorch实现婴儿哭声检测和识别

Pytorch实现婴儿哭声检测和识别 目录 Pytorch实现婴儿哭声检测识别 1. 项目说明 2. 数据说明 &#xff08;1&#xff09;婴儿哭声语音数据集 &#xff08;2&#xff09;自定义数据集 3. 模型训练 &#xff08;1&#xff09;项目安装 &#xff08;2&#xff09;准备Tra…

海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL烧录包-可救砖

海信IP810N&#xff0f;海信IP811N_海思MV320处理器-安卓9主板-TTL烧录包-可救砖准备工作&#xff1a;TTL线自备跑码工具【putty跑码中文版】路径&#xff1a;【工具大全】-【putty跑码中文版】测试跑码以后将跑码窗口关闭&#xff1b;然后到下方下载烧录工具并大致看下教程烧录…