Mybatis中常用注解
1、@MapperKey
xxxMapper.xml配置文件
1 2 3 4 5 6 7 8 9 | <!--根据ID查询出一条记录,并且使用Map集合封装结果集--> <select id= "queryEmployeeById" parameterType= "java.lang.Integer" resultType= "java.util.Map" > SELECT EMPLOYEE_ID,EMPLOYEE_NAME,EMPLOYEE_PASSWORD,EMPLOYEE_AGE,DEPARTMENT_ID FROM employee WHERE EMPLOYEE_ID=#{employeeId} </select> <!--查询出所有的记录,并且使用Map集合封装结果集--> <select id= "queryEmployees" resultType= "java.util.Map" > SELECT EMPLOYEE_ID,EMPLOYEE_NAME,EMPLOYEE_PASSWORD,EMPLOYEE_AGE,DEPARTMENT_ID FROM employee; </select> |
xxxMapper接口
1 2 3 4 5 6 7 8 | public interface EmployeeMapper { // @MapKey注解中的值对应的数据库中的列名,返回的Map集合会将EMPLOYEE_NAME作为Map集合的键 @MapKey ( "EMPLOYEE_NAME" ) public abstract Map<String,Object> queryEmployeeById(Integer id); @MapKey ( "EMPLOYEE_NAME" ) public abstract Map<String,Employee> queryEmployees(); } |
测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class TestMybatis { // 根据指定ID查询Employee @Test public void test01() throws IOException { SqlSession session = TestMybatis.openSession(); EmployeeMapper mapper = session.getMapper(EmployeeMapper. class ); Map<String, Object> map = mapper.queryEmployeeById( 3 ); System.out.println(map); } // 查询所有的Employee @Test public void test02() throws IOException { SqlSession session = TestMybatis.openSession(); EmployeeMapper mapper = session.getMapper(EmployeeMapper. class ); Map<String, Employee> maps = mapper.queryEmployees(); System.out.println(maps); } |
测试结果
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 根据ID查询出一条记录 {王五={EMPLOYEE_ID= 3 , EMPLOYEE_AGE= 25 , DEPARTMENT_ID= 2 , EMPLOYEE_NAME=王五, EMPLOYEE_PASSWORD= 123 }} // 查询出所有记录 { 李四={EMPLOYEE_ID= 2 , EMPLOYEE_AGE= 24 , DEPARTMENT_ID= 1 , EMPLOYEE_NAME=李四, EMPLOYEE_PASSWORD= 123 }, 张三={EMPLOYEE_ID= 1 , EMPLOYEE_AGE= 23 , DEPARTMENT_ID= 1 , EMPLOYEE_NAME=张三, EMPLOYEE_PASSWORD= 123 }, 王五={EMPLOYEE_ID= 3 , EMPLOYEE_AGE= 25 , DEPARTMENT_ID= 2 , EMPLOYEE_NAME=王五, EMPLOYEE_PASSWORD= 123 }, 陈九={EMPLOYEE_ID= 7 , EMPLOYEE_AGE= 41 , DEPARTMENT_ID= 1 , EMPLOYEE_NAME=陈九, EMPLOYEE_PASSWORD= 123456789 }, 沈六={EMPLOYEE_ID= 4 , EMPLOYEE_AGE= 26 , DEPARTMENT_ID= 2 , EMPLOYEE_NAME=沈六, EMPLOYEE_PASSWORD= 123 }, 林八={EMPLOYEE_ID= 6 , EMPLOYEE_AGE= 28 , DEPARTMENT_ID= 3 , EMPLOYEE_NAME=林八, EMPLOYEE_PASSWORD= 456 }, 汪十={EMPLOYEE_ID= 9 , EMPLOYEE_AGE= 30 , DEPARTMENT_ID= 30 , EMPLOYEE_NAME=汪十, EMPLOYEE_PASSWORD= 321 }, 田七={EMPLOYEE_ID= 5 , EMPLOYEE_AGE= 27 , DEPARTMENT_ID= 3 , EMPLOYEE_NAME=田七, EMPLOYEE_PASSWORD= 456 } } |
2、@Param
例如:当传入多个参数的时候我们可以通过以下方式获取值
1 | public abstract User queryUserByThreeConditions(Integer id, String userName, String password); |
1 2 3 4 5 6 7 8 9 | <select id= "queryUserByThreeConditions" resultType= "com.mybatis.entity.User" > SELECT ID,USER_NAME,PASSWORD,USER_INFORMATION FROM user WHERE ID=#{param1} AND USER_NAME=#{param2} AND PASSWORD=#{param3} </select> <select id= "queryUserByThreeConditions" resultType= "com.mybatis.entity.User" > SELECT ID,USER_NAME,PASSWORD,USER_INFORMATION FROM user WHERE ID=#{arg0} AND USER_NAME=#{arg1} AND PASSWORD=#{arg2} </select> |
但是如果在mapper.xml文件中写上arg0、arg、arg2或者是param1、param2、param3等会影响阅读性,所以我们改进为下面的方式:使用@param("key")注解,显示的指出键的值,在mapper.xml文件中通过键找值取出值即可,这样就可以很明显的表达出出入的参数的作用
1 | public abstract User queryUserByThreeConditions( @Param ( "userId" ) Integer id, @Param ( "userName" ) String name, @Param ( "password" ) String pwd); |
1 2 3 4 | <select id= "queryUserByThreeConditions" resultType= "com.mybatis.entity.User" > SELECT ID,USER_NAME,PASSWORD,USER_INFORMATION FROM user WHERE ID=#{userId} AND USER_NAME=#{userName} AND PASSWORD=#{password} </select> |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?