Mybatis注解开发

发布时间:2026/9/25 20:05:25
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表进行链接。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询