java项目中动态调用mapper接口中的方法— vue技术交流群(864583465) (此群满可加2群:111822407)
做java项目有时会遇到一个需求,即:动态调用实现类或mapper接口中的的方法,通常是基于java的反射来实现,下面举例说明如何动态调用mapper接口中的方法(用到的场景不多)
mapper文件
@Mapper
public interface YourMapper {
List<String> test1();
List<String> test2(String str);
List<String> test3(String str);
}
mapper.xml文件
<?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="路径.YourMapper">
<select id="test1" resultType="实际的返回值类型对应的实体类">
具体的sql语句 如:SELECT * FROM 表名
<select>
<select id="test2" parameterType="string" resultType="实际的返回值类型对应的实体类">
具体的sql语句 如:SELECT * FROM 表名
<select>
<select id="test3" parameterType="string" resultType="实际的返回值类型对应的实体类">
具体的sql语句 如:SELECT * FROM 表名
<select>
</mapper>
service接口
public interface YourService {
public List<?> testIt(String methodName, String param);
}
实际调用的地方,如实现类或controller里
@Service
public class YourServiceImpl implements YourService {
@Autowired
YourMapper yourMapper;
@Override
public List<?> testIt(String methodName, String param) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException{
// 下方methodName即为传入动态的方法名
Method method = YourMapper.getClass().getMethod(methodName,YourMapper.class);
// 下方的param即为调用对应的方法入参,有就传,没有就不传,返回的结果类型是实际方法返回值类型
List list = (List<?>) method.invoke(YourMapper, param);
return list;
}
}
更多问题的探讨,请加入vue技术交流群(864583465) (此群满可加2群:111822407),你的问答将是我们大家共同进步的关键!!!