新闻详情

新闻详情

首页 / 资讯中心 / 详情

Mybatis注解开发

发布时间:2026/9/25 20:05:26来源:尧图网络
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表进行链接。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

SPEC-KIT 简介与 Codex 配置 TaoToken 实战:settings.json 骨架与验证 2026/9/25 21:17:31

SPEC-KIT 简介与 Codex 配置 TaoToken 实战:settings.json 骨架与验证

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

阅读更多 →
【八八股股 | 第二篇】Java注解原理 2026/9/25 21:16:08

【八八股股 | 第二篇】Java注解原理

Java 注解的运行原理:从定义到运行时读取 文章摘要 Java 注解用于把元数据附加到类、方法、字段等程序结构上。本文以 JDK 8 为基础,沿着一条连续的示例说明注解成员如何声明和赋值、RetentionPolicy 如何决定注解的保留范围、javac 如何把注解写入 Cl…

阅读更多 →
元器猫硬件笔记:P沟道MOSFET NCE4435沟槽工艺国产化替代与实测验证 2026/9/25 21:15:56

元器猫硬件笔记:P沟道MOSFET NCE4435沟槽工艺国产化替代与实测验证

在智能硬件、消费电子电源保护电路设计中,进口MOSFET器件普遍存在交期不稳定、价格上浮、供应链受限等问题。在智能锁电源保护电路项目迭代中,原进口SI4435DY器件采购成本持续上涨、交付周期大幅延长,亟需一款可引脚兼容、性能对等的国产替代…

阅读更多 →
没有项目管理经验可以考PMP吗 2026/9/25 21:15:30

没有项目管理经验可以考PMP吗

完全没有任何项目领导经验,不能报考 PMP;但不一定非要岗位叫 “项目经理”,只要你在项目里做过统筹、规划、协调、交付这类「领导 / 指导项目」的工作,就算有效经验。PMP 官方报考条件(国内现行)同时还需要…

阅读更多 →
docker-k8s安装实践记录 2026/9/25 21:15:24

docker-k8s安装实践记录

一、在线安装docker、harbor 在线安装docker # 安装yum工具集 yum install -y yum-utils # 安装docker源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 更新yum缓存 yum makecache fast # 安装docker yum install -y docker-ce #…

阅读更多 →
2026年国内Claude API聚合平台实测:词元之河企业级稳定调用表现领跑 2026/9/25 21:14:52

2026年国内Claude API聚合平台实测:词元之河企业级稳定调用表现领跑

2026年4月,一份覆盖国内15款主流Claude聚合平台的横向评测报告发布,从稳定可用性、数据安全、延迟性能、合规资质、成本透明五个维度展开,测试模型覆盖Claude-Opus-4.6、Sonnet-4.6、Haiku全系列,验证场景包括国内网络直连、接口兼…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉