目录
1. 创建存储过程
2.UserMapper.xml文件中写sql标签
3. UserDao接口
4. 测试
5.报错
1. 创建存储过程
存储过程名为pr_BlurNameCount(),IN和OUT:
输入参数为myName,查询username=‘lyx'的用户数量,输出参数为u_count
类型为varchar和int
2.UserMapper.xml文件中写sql标签
如图,在select标签中定义
通过调用【存储过程】:call 存储过程名 实现查询,
statementType="CALLABLE"设置SQL的执行方式是存储过程
存储过程的输入参数,在mybatis用Map来场传递(HashMap)
parameterType="HashMap"
所以parameterType="HashMap"是固定写法
输入参数myName和输出参数u_count需要通过HashMap的key值来指定
call 存储过程名(输入参数,输出参数)
要指定两者的jdbcType和mode,其中输入参数的jdbcType为varchar类型,mode为IN
输入参数的jdbcType为INTEGER类型,mode为OUT
<!-- 通过调用【存储过程】实现查询,statementType="CALLABLE"设置SQL的执行方式是存储过程存储过程的输入参数,在mybatis用Map来场传递(HashMap)存储过程的输入参数myName和输出参数u_count需要通过HashMap来指定--><select id="queryCountByBlurName" statementType="CALLABLE" parameterType="HashMap">{ call pr_BlurNameCount(#{myName,jdbcType=VARCHAR,mode=IN},#{u_count,jdbcType=INTEGER,mode=OUT})}</select>
3. UserDao接口
没有返回值,存储过程的结果在HashMap中key值为u_count
4. 测试
这里演示的是查询,测试代码不需要mitI();
如果是删除和修改的存储过程,需要提交,不然会报错;
究其原因,还是mybatis配置文件中的事务管理是jdbc
import com.lyx.mybatis.dao.UserDao;import com.lyx.mybatis.entity.User;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 java.io.IOException;import java.io.InputStream;import java.io.Reader;import java.util.HashMap;import java.util.List;import java.util.Scanner;public class Test {public static void main(String[] args) throws IOException {Reader reader = Resources.getResourceAsReader("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);//这个session相当于connectionSqlSession sqlSession = sqlSessionFactory.openSession();UserDao mapper = sqlSession.getMapper(UserDao.class);HashMap<String,Object> hashMap = new HashMap<>();hashMap.put("myName","lyx");mapper.queryCountByBlurName(hashMap);System.out.println(hashMap.get("u_count"));mit();}}
5.报错
JavaType和JdbcType的对应关系
MyBatis配置Mapping,JavaType和JDBCType的对应关系,#与$区别 /zengming/p/7769219.html