首页 > 其他分享 >6_代理模式下开发各种功能-1_多种参数传递问题

6_代理模式下开发各种功能-1_多种参数传递问题

时间:2023-02-25 11:01:54浏览次数:42  
标签:mapper sal -- List 代理 模式 参数传递 Emp Param


 1单个基本数据类型

2多个基本数据类型

3单个引用数据类型

4map集合数据类型

5多个引用数据类型

接口

package com.msb.mapper;
import com.msb.pojo.Emp;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @Author: Ma HaiYang
* @Description: MircoMessage:Mark_7001
*/
public interface EmpMapper {
/**
* 该方法用于查询全部的员工信息
* @return 全部员工信息封装的Emp对象的List集合
*/
List<Emp> findAll();
/**
* 根据员工编号查询单个员工信息的方法
* @param empno 员工编号
* @return 如果找到了返回Emp对象,找不到返回null
*/
Emp findByEmpno(int empno);
/**
* 根据员工编号和薪资下限去查询员工信息
* @param empno 员工编号
* @param sal 薪资下限
* @return 多个Emp对象的List集合
*/
List<Emp> findByDeptnoAndSal(@Param("deptno") int deptno,@Param("sal") double sal);
List<Emp> findByDeptnoAndSal2(Map<String,Object> map);
List<Emp> findByDeptnoAndSal3(Emp emp);
List<Emp> findByDeptnoAndSal4(@Param("empa") Emp empa,@Param("empb") Emp empb);
}

6_代理模式下开发各种功能-1_多种参数传递问题_List

6_代理模式下开发各种功能-1_多种参数传递问题_基本数据类型_02

 

mapper映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.msb.mapper.EmpMapper">
<!--
1 接口的名字和Mapper映射为文件名字必须保持一致(不包含拓展名)
2 Mapper映射文件的namespace必须是接口的全路径名
3 sql语句的id必须是对应方法的名
4 DeptMapper映射文件应该和接口编译之后放在同一个目录下
-->
<!--List<Emp> findAll();-->
<select id="findAll" resultType="emp" >
select * from emp
</select>
<!--
单个基本数据类型作为方法参数
#{}中可以随便写,遵循见名知意
Emp findByEmpno(int empno);
-->
<select id="findByEmpno" resultType="emp" >
select * from emp where empno =#{empno}
</select>
<!--
多个基本数据类型作为方法参数
List<Emp> findByDeptnoAndSal(@Param("detpno") int deptno,@Param("sal") double sal);
方式1 arg* arg0 arg1 arg2 数字是索引,从0开始
方式2 param* param1 param2 param3 数字是编号,从1开始
使用别名
List<Emp> findByDeptnoAndSal(@Param("detpno") int deptno,@Param("sal") double sal);
通过@Param注解使用别名之后,就不能再使用arg* 但是可以继续使用param*
-->
<select id="findByDeptnoAndSal" resultType="emp">
<!--select * from emp where deptno =#{arg0} and sal >= #{arg1}-->
<!-- select * from emp where deptno =#{param1} and sal >= #{param2}-->
<!-- select * from emp where deptno =#{deptno} and sal >= #{sal}-->
</select>
<!--
参数是map,{}写键的名字
-->
<select id="findByDeptnoAndSal2" resultType="emp" parameterType="map" >
<!--select * from emp where deptno =#{arg0} and sal >= #{arg1}-->
<!-- select * from emp where deptno =#{param1} and sal >= #{param2}-->
select * from emp where deptno =#{deptno} and sal >= #{sal}
</select>
<!--单个引用类型,{}中写的使用对象的属性名-->
<select id="findByDeptnoAndSal3" resultType="emp" parameterType="emp" >
select * from emp where deptno =#{deptno} and sal >= #{sal}
</select>
<!--
多个引用类型作为方法参数
List<Emp> findByDeptnoAndSal4(@Param("empa") Emp empa,@Param("empb") Emp empb);
如果用@Param定义了别名,那么就不能使用arg*.属性名,但是可以使用param*.属性名和别名.属性名
-->
<select id="findByDeptnoAndSal4" resultType="emp" >
<!-- select * from emp where deptno =#{arg0.deptno} and sal >= #{arg1.sal} -->
select * from emp where deptno =#{param1.deptno} and sal >= #{param2.sal}
<!-- select * from emp where deptno =#{empa.deptno} and sal >= #{empb.sal}-->
</select>
</mapper>

6_代理模式下开发各种功能-1_多种参数传递问题_基本数据类型_03

6_代理模式下开发各种功能-1_多种参数传递问题_方法参数_04

测试 代码

package com.msb.testDemo;
import com.msb.mapper.EmpMapper;
import com.msb.pojo.Emp;
import com.msb.util.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class Test1 {
public static void main(String[] args) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession(true);
/*
* 帮助我们生成一个接口下的实现类对象的
*
* */
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> emps = mapper.getAllEmp();
for(Emp emp:emps) {
System.out.println(emp);
}
// 1单个基本数据类型作为方法参数
Emp emp = mapper.getByEmpno(7902);
System.out.println(emp);
// 2多个基本数据类型作为方法参数
List<Emp> emps2 = mapper.getByDeptnoAndSal(10, 1500);
for(Emp em:emps2) {
System.out.println(em);
}
// 3单个引用类型作为方法参数
Emp condition=new Emp();
condition.setDeptno(10);
condition.setSal(1500.0);
List<Emp> emps3 = mapper.getByDeptnoAndSal2(condition);
for(Emp em:emps3) {
System.out.println(em);
}
// 4多个引用类型作为方法参数
Emp condition1=new Emp();
condition1.setDeptno(10);
Emp condition2=new Emp();
condition2.setSal(1500.0);
List<Emp> emps4 = mapper.getByDeptnoAndSal3(condition1,condition2);
for(Emp em:emps4) {
System.out.println(em);
}
sqlSession.close();
}
}

6_代理模式下开发各种功能-1_多种参数传递问题_基本数据类型_05

6_代理模式下开发各种功能-1_多种参数传递问题_List_06

 


标签:mapper,sal,--,List,代理,模式,参数传递,Emp,Param
From: https://blog.51cto.com/u_15975228/6084963

相关文章

  • 18-桥接器模式
    18-桥接器模式概念桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立的变化,实现指的是抽象类和它的派生类用来实现自己的对象。实现系统可能有多角度分类,......
  • 6_代理模式下开发各种功能-1_多种参数传递问题
    ​ 1单个基本数据类型2多个基本数据类型3单个引用数据类型4map集合数据类型5多个引用数据类型接口packagecom.msb.mapper;importcom.msb.pojo.Emp;importorg......
  • 6_代理模式下开发各种功能-1_多种参数传递问题
    ​ 1单个基本数据类型2多个基本数据类型3单个引用数据类型4map集合数据类型5多个引用数据类型接口packagecom.msb.mapper;importcom.msb.pojo.Emp;importorg......
  • 学习中设计模式的总结
    首先要了解什么是设计模式呢?设计模式:可以简单的理解为两个字“经验”,就是码农们在各种需求中间,总结出来的一种最优的解法称之为设计模式;1,单例模式......
  • 设计模式-适配器与门面模式
    1.适配器模式#include<iostream>usingnamespacestd;classThreePhasePlug{public: voiddoThreePhasePlug(){ cout<<"threephase"<<endl; }};c......
  • Redis:六、哨兵模式
    @目录一、哨兵模式简介二、哨兵的搭建三、哨兵工作原理一、哨兵模式简介哨兵(Sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机......
  • vue——更改路由模式为history后,刷新页面显示Cannot Get/空白/404,本地icon图标不显示
    参考:https://blog.csdn.net/william_jzy/article/details/106526339   https://www.bbsmax.com/A/A7zgKEVkz4/      https://router.vuejs.org/zh/gu......
  • Day 22 22.3:生产者和消费者模式
    生产者消费者模式认识生产者和消费者模式生产者和消费者是异步爬虫中很常见的一个问题。产生数据的模块,我们称之为生产者,而处理数据的模块,就称为消费者。例如:​ 图片数......
  • 设计模式之(13)--模板方法模式
    今天我们来学习下模板方法设计模式。模板方法(TemplateMethodPattern):抽象的父类中定义一个操作中算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一......
  • mapper动态代理
    Dao接口的实现类仅仅是通过sqlsession的相关api定位到映射文件mapper中的相应id的sql语句,真正对DB进行操作的工作是由框架通过mapper中的sql完成的。mybatis框架抛开dao的......