首页/新闻资讯/正文详情

Mybatis注解开发

发布时间:2026/9/25 20:05:27 来源:云帆数科 栏目:资讯中心
Mybatis注解开发
一、Mybatis的常用注解package com.ithiema.Dao; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Date; Data AllArgsConstructor NoArgsConstructor Builder public class User { private int id; private String username; private String password; private String perms; }package com.ithiema.Mapper; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import java.util.List; public interface UserMapper { Insert(INSERT INTO user(username,password,perms) VALUES(#{username},#{password},#{perms})) public void save(User user); Select(SELECT * FROM user) public ListUser findAll(); Select(SELECT id,username,password,perms FROM user WHERE id #{id}) public User findById(int id); Delete(DELETE FROM user WHERE id#{id}) public void delete(int id); Update(UPDATE user SET username#{username},password#{password},perms#{perms} WHERE id#{id}) public void update(User user); }drivercom.mysql.cj.jdbc.Driver usernameroot passwordadmin urljdbc:mysql://localhost:3306/dbstudy?useSSLfalseserverTimezoneAsia/ShanghaiallowPublicKeyRetrievaltrue?xml version1.0 encodingUTF-8? !DOCTYPE configuration PUBLIC -//mybatis.org//DTD Config 3.0//EN http://mybatis.org/dtd/mybatis-3-config.dtd configuration !-- 顺序不能乱properties - settings - typeAliases - typeHandlers - environments - mappers -- !-- 1.加载外部properties数据库配置文件 -- properties resourcejdbc.properties !-- 也可以直接写property -- /properties !-- 2.全局设置 -- settings setting namelogImpl valueSLF4J/ setting namemapUnderscoreToCamelCase valuetrue/ /settings !-- 3.起别名简化mapper中实体类全限定名 -- typeAliases typeAlias typecom.ithiema.Dao.User aliasuser/typeAlias /typeAliases !-- 4.多环境配置default指定使用哪个环境 -- environments defaultdevelopment environment iddevelopment transactionManager typeJDBC/ dataSource typePOOLED property namedriver value${driver}/ property nameurl value${url}/ property nameusername value${username}/ property namepassword value${password}/ /dataSource /environment /environments !-- 5.注册Mapper映射文件核心 -- mappers !-- 方式1resource加载xml -- !-- mapper resourcecom.ithiema.mapper/UserMapper.xml/-- !-- 方式2扫描整个包接口名和xml同名同路径 -- package namecom.ithiema.Mapper/ /mappers /configurationpackage com.ithiema; import com.ithiema.Dao.User; import com.ithiema.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.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class test { private UserMapper mapper; Before public void before() throws IOException { InputStream resourceAsStream Resources.getResourceAsStream(sqlMapConfig.xml); SqlSessionFactory build new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession build.openSession(true); mapper sqlSession.getMapper(UserMapper.class); } Test public void testSave(){ User user new User(); user.setUsername(tom); user.setPerms(user:add); mapper.save(user); } Test public void testUpdate(){ User user new User(); user.setId(7); user.setUsername(zavier); user.setPassword(123456); user.setPerms(user:update); mapper.update(user); } Test public void testDelete(){ User user new User(); mapper.delete(6); } Test public void testFindById(){ User user mapper.findById(2); System.out.println(user user); } Test public void testFindAll(){ ListUser all mapper.findAll(); for(User u:all){ System.out.println(u); } } }二、注解实现复杂映射开发一对一查询的两种方式package com.ithiema.Mapper; import com.ithiema.Dao.Order; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface OrderMapper { Select(select *,o.id oid from orders o,user u where o.uidu.id) // Results({ // Result(column oid, property id), // Result(column total, property total), // Result(column uid, property user.id), // Result(column username, property user.username), // Result(column password, property user.password), // }) Results({ Result(column oid, property id), Result(column total, property total), Result( property user,//要封装的属性的名称 column uid,//根据哪个字段去查询user表的数据 javaType User.class,//要封装的实体类型 //select属性代表 查询 的哪个接口的方法获得数据 one One(select com.ithiema.Mapper.UserMapper.findById) ) }) public ListOrder findAll(); }一对多查询package com.ithiema.Mapper; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface UserMapper { Insert(INSERT INTO user(username,password,perms) VALUES(#{username},#{password},#{perms})) public void save(User user); Select(SELECT * FROM user) public ListUser findAll(); Select(SELECT id,username,password,perms FROM user WHERE id #{id}) public User findById(int id); Delete(DELETE FROM user WHERE id#{id}) public void delete(int id); Update(UPDATE user SET username#{username},password#{password},perms#{perms} WHERE id#{id}) public void update(User user); Select(select * from user) Results({ Result( idtrue, property id, column id),//idtrue表明是主键id Result(column username,property username), Result(column password, property password), Result( property orderList, column id, javaType List.class, many Many(select com.ithiema.Mapper.OrderMapper.findByUid) ) }) public ListUser findUserAndOrder(String username); }OrderMapper加一句 以供调用Select(select * from orders where uid#{uid})public ListOrder findByUid(int uid);package com.ithiema.Mapper; import com.ithiema.Dao.Order; import com.ithiema.Dao.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface OrderMapper { Select(select *,o.id oid from orders o,user u where o.uidu.id) // Results({ // Result(column oid, property id), // Result(column total, property total), // Result(column uid, property user.id), // Result(column username, property user.username), // Result(column password, property user.password), // }) Results({ Result(column oid, property id), Result(column total, property total), Result( property user,//要封装的属性的名称 column uid,//根据哪个字段去查询user表的数据 javaType User.class,//要封装的实体类型 //select属性代表 查询 的哪个接口的方法获得数据 one One(select com.ithiema.Mapper.UserMapper.findById) ) }) public ListOrder findAll(); Select(select * from orders where uid#{uid}) public ListOrder findByUid(int uid); }一对多多对多查询的数据库表请看这条链接Mybatis的多表操作问题-CSDN博客Select(select * from user) Results({ Result(id true,column id,property id), Result(column username,property username), Result(column password,property password), Result( property roleList, column id, javaType List.class, many Many(select com.ithiema.Mapper.RoleMapper.findByUid) ) }) public ListUser findUserAndRoleAll();还需引用package com.ithiema.Mapper; import org.apache.ibatis.annotations.Select; public interface RoleMapper { Select(select * from sys_user_role ur,sys_role r where ur.roleIdr.id AND ur.userId#{uid}) public ListRole findByUid(); }相对于一对多一对一的查询一对多查询多了一张中间表即将userid 与 roleid 对应的中间表。先将中间表和职能表进行链接得出内容再与user表进行链接。

相关推荐

【Jetpack Compose娓娓道来】 第16课:性能优化进阶与最佳实践——把“能跑”变成“丝滑”
【Jetpack Compose娓娓道来】 第16课:性能优化进阶与最佳实践——把“能跑”变成“丝滑”

一、回顾与引入 前十五课我们走完了Compose开发的完整旅程:从基础概念、布局、状态、列表、导航、主题、动画手势、自定义绘制,到View互操作、测试调试、架构分层、协程深度结合、Compose Multiplatform,最后用一个生产级项目把知识全部串了起… · 2026/9/25 20:05:21

【Jetpack Compose 娓娓道来】第14课:Compose Multiplatform与生态——从Android走向多端
【Jetpack Compose 娓娓道来】第14课:Compose Multiplatform与生态——从Android走向多端

一、回顾与引入 前十三课我们一路走来,从Compose的基本概念、布局、状态、列表、导航、主题、动画手势、自定义绘制,到与View互操作、性能优化、测试调试、架构分层,再到协程的深度结合,基本上把Android平台上的Compose开发从头到… · 2026/9/25 20:04:50

图像数据集扩充增广工具 AI图像数据增强工具
图像数据集扩充增广工具 AI图像数据增强工具

数据集扩充增广工具(分割/OBB 标签同步) 工具概述 数据集扩充增广工具,面向 YOLO 系列分割与旋转目标检测数据集,支持在图像增广的同时同步更新标注文件,避免增广后重新手工标注。工具适用于 YOLOv5 至 v12 的实例分割… · 2026/9/25 20:04:07

静态+动态分析闭环:Ghidra MCP 集成调试器的断点、单步与ASLR地址转换详解
静态+动态分析闭环:Ghidra MCP 集成调试器的断点、单步与ASLR地址转换详解

静态动态分析闭环:Ghidra MCP 集成调试器的断点、单步与ASLR地址转换详解 【免费下载链接】ghidra-mcp Ghidra MCP Server — 200 MCP tools for AI-powered reverse engineering. GUI plugin headless server, lazy tool loading, convention enforcement, batch … · 2026/9/25 21:48:35

260923-report
260923-report

260923-report 🧑🏻‍💻Author: Zenos 📝Overview: 本文档主要记录26年9月第三周学习内容以及后续学习计划。 文章目录260923-report[toc]一、研究背景1.1 微小目标检测1.1.1 微小目标检测面临的挑战1.1.2… · 2026/9/25 21:48:29

Windows 11非分页池泄漏排查实战:PoolMon+RAMMap精解
Windows 11非分页池泄漏排查实战:PoolMon+RAMMap精解

1. 这不是蓝屏前的幻觉:Windows 11里“吃内存”的幽灵真存在你有没有遇到过这种情况:刚重启完系统,任务管理器显示已用内存才2GB,可两小时后,它就悄无声息地涨到6GB、7GB,甚至8GB以上?打开的任务… · 2026/9/25 21:48:22

perl踩坑系列之foreach
perl踩坑系列之foreach

先上代码:#!/usr/bin/perl -w use strict; use Cwd realpath; use File::Basename; use FindBin qw($Bin $Script); use Getopt::Long; use Storable; use lib /mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab; use Common;my $common Common ->… · 2026/9/25 21:48:22

Hermes 客户端部署加载失败排查:TaoToken 统一 Key 接入 settings.json 配置骨架与验证动作(含安装包)
Hermes 客户端部署加载失败排查:TaoToken 统一 Key 接入 settings.json 配置骨架与验证动作(含安装包)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 21:47:45

图像拼接技术实战:从SIFT配准到最佳缝合查找的完整配置指南
图像拼接技术实战:从SIFT配准到最佳缝合查找的完整配置指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 21:47:39

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码