【Mybatis学习总结七】调用存储过程

    xiaoxiao2023-03-24  3

    今天这节课本来可以一小时结束的,我却从三点半搞到了九点。我觉得我是世界上最S13的人!!!没有之一!!!!一个小错害我花了一个晚上的时间去寻找,真是够无语的。好了,言归正传,还是先总结下今天学习的内容吧。

    七、Mybatis调用存储过程

    1  需求: 创建数据表和存储过程,查询得到男性或女性的数量, 如果传入的是0就女性否则是男性

    2 (1) 建表:

    create table p_user( id int primary key auto_increment, name varchar(10), sex char(12) ); insert into p_user(name,sex) values('A',"Male"); insert into p_user(name,sex) values('B',"Female"); insert into p_user(name,sex) values('C',"Male") 看见了这里的Male,Female了吗?本来是“男”“女”,因为我之前的Sqlyog插入中文后无法获取所以在这里我就把改成了中文。就是从这里,我开始走向了S13之路!!!!!!!!!!!!!!!!!!!!

     (2)创建存储过程:

    #创建存储过程( 查询得到男性或女性的数量, 如果传入的是 0 就女性否则是男性) DELIMITER $ CREATE PROCEDURE mybatis.ges_user_count(IN sex_id INT, OUT user_count INT) BEGIN IF sex_id=0 THEN SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='<span style="color:#ff0000;">女</span>' INTO user_count; ELSE SELECT COUNT(*) FROM mybatis.p_user WHERE p_user.sex='<span style="color:#ff0000;">男</span>' INTO user_count; END IF; END $ 看见这里了吗???“男”“女”,就是没把这个改成对应的英文字符‘M’‘F’,这就是错误的源泉,已经默默在厕所哭了两个小时零三分钟。

    (3)调用存储过程

    DELIMITER ; SET @user_count = 0; CALL mybatis.ges_user_count(1, @user_count); SELECT @user_count;

    3 创建表的实体类PUser.java

    package com.mybatis.entities; public class PUSER { private String id; private String name; private String sex; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public PUSER(String id, String name, String sex) { super(); this.id = id; this.name = name; this.sex = sex; } public PUSER() { super(); } @Override public String toString() { return "PUSER [id=" + id + ", name=" + name + ", sex=" + sex + "]"; } }

    4  sql映射文件:puserMapper3.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"> <!-- 6 调用存储过程 查询得到的男性或女性数量:传入0>女性,传入1>>男性 调用存储过程的SQL语句: CALL mybatis.ges_user_count(sexid,@useraccount); --> <!--定义操作 PUser 表的sql 映射文件:userMapper3.xml --> <mapper namespace="com.mybatis.test7.puserMapper3"> <!-- 查询得到男性或女性的数量, 如果传入的是0就女性否则是男性 --> <select id="getUserCount" parameterMap="getUserSexCount" statementType="CALLABLE"> CALL mybatis.ges_user_count(?,?) </select> <!-- Map<String,Integer> paramMap = new HashMap<>(); paramMap.put("sexid", 1); paramMap.put("usercount", -1); --> <parameterMap type="java.util.Map" id="getUserSexCount"> <parameter property="sexid" mode="IN" jdbcType="INTEGER"/> <parameter property="usercount" mode="OUT" jdbcType="INTEGER"/> </parameterMap> </mapper>

    5 注册conf.xml 6 测试类Test7.java

    package com.mybatis.test7; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import com.mybatis.entities.User; public class Test7 { @Test public void test() { SqlSession session= MybatisUtils.getSqlSessionFactory().openSession(); String statement = "com.mybatis.test7.puserMapper3.getUserCount"; Map<String,Integer> paramMap = new HashMap<>(); paramMap.put("sexid", 0); paramMap.put("usercount", -1); session.selectOne(statement, paramMap); //返回查询值 Integer result = paramMap.get("usercount"); System.out.println(result); session.close(); } }

    这里报的错【java.sql.SQLException: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

    稍后会详细讲解下这个错误的解决办法。

    转载请注明原文地址: https://ju.6miu.com/read-1201001.html
    最新回复(0)