Mybatis教程: https://blog.csdn.net/hellozpc/article/details/80878563
sql语句的参数类型
parameterType有简单类型(8个基本类型和String)以及对象类型。有两种获取参数值的方法
#{字段名}:若参数类型为对象类型时,字段名必须与对象的属性名一致,若为简单类型则不用。String类型的参数会给参数值加上单引号;
${字段名}:若参数类型为简单类型时,必须用${value}获取参数值。${}直接替换占位符,String类型的参数不会给参数值加上单引号。sql语句动态生成的时候,使用${};
<select id="queryUserByName" parameterType="String" reusltType="com.sa.User>
select * from user where name = #{name} or name like ‘%${name}%‘
and address_code = #{adderss.code}
order by ${name}
</select>
sql语句的返回类型
1. resultType
1.1 类的全路径
<select id="queryAllUsers" resultType="com.sa.User">
select * from user
</select>
1.2使用类的别名
在mybatis配置文件中指定别名,然后mapper中可以直接使用别名 resultType="User"
<typeAliases> <typeAlias type="com.sa.User" alias="User"/> </typeAliases>
2.resultMap
2.1 解决实体类和表字段名称不一致问题
autoMapping默认完成映射,需要开启驼峰匹配
<resultMap id="userResult" type="com.sa.User" autoMapping="true">
<id property="id" column="user_no">
<result property="name" column="user_name">
</resultMap>
也可以使用如下方法解决字段名称不一致的问题
<select id="queryAllUsers" resultType="HashMap">
select user_no "id", user_name "name" from user
</select>
2.2 解决实体类和表字段类型不一致问题
需要用到类型转换器
调用存储过程
a. 编写存储过程
create or replace procedure procQueryCountByName (name in varchar, count out number)
as begin
select count(*) from user where name = name;
end;
b. 定义Mapper接口
int queryCountByAgeWithProc(HashMap params);
c. 编写Mapper.xml sql
存储过程的入参必须为对象类型
<select id="queryCountByNameWithProc" statementType="CALLABLE" parameterType="HashMap">
{ CALL procQueryCountByName(
#{name, jdbcType=VARCHAR, mode=IN},
#{count, jdbcType=INTEGER, mode=OUT},
)}
</select>
d. 调用接口
Map<String, Object> params = new HashMap<>();
params.put("name", "lily");
userMapper.queryCountByAgeWithProc(params);
Object count = params.get("count"); // 获取输出参数
原文:https://www.cnblogs.com/anxiao/p/12283345.html