springboot+mybatis+mysql项目中遇到的问题:mybatis中文件如何正确传递字符串参数的问题。

关于mybatis中如何正确传递字符串参数的问题
问题描述:
在用mybatis时想写一个功能,通过用户名查找到相应的用户,但是失败了很多次,研究了很久,终于解决,这里贴出解决方案。

详细解决步骤:
在学习mybatis的时候,参照网上的例子写了一个小demo,根据id从mysql里面查找用户信息。当时是利用一个与User应的接口IUser描述查询语句的参数类型和返回值,这种类型相比于用User.xml写一个mapper的方式简单一些。

package com.xiao.dao;
 
import com.xiao.bean.User;
import org.apache.ibatis.annotations.Select;
public interface IUser {
 
 @Select("select * from user where id = #{id}")
 public User getUserByID(int id);
}

这里是我的表的结构

在这里插入图片描述

Main方法里的语句

IUser iUser = session.getMapper(IUser.class);
User user = iUser.getUserByID(3);
System.out.println("名字:"+user.getName());
System.out.println("年龄:"+user.getAge());
System.out.println("性别:"+user.getSex());
System.out.println("学校:"+user.getSchool());

可以很容易查出ID为3的用户信息。

在这里插入图片描述

但是当我想将查询的条件换成姓名的时候,于是我顺理成章的在上面的代码加上了

package com.xiao.dao;
 
import com.xiao.bean.User;
import org.apache.ibatis.annotations.Select;
public interface IUser {
 
 @Select("select * from user where id = #{id}")
 public User getUserByID(int id);
 @Select("select * from user where name = #{name}")
 public User getUserByName(String name);
}

结果查询不到用户。

上网百度了很久,加上用log4J打印了日志(关于如何用log4J打印sql执行语句请参考这篇文章http://843977358.iteye.com/blog/2259796 )。

发现执行的sql语句虽然是对的,但是还是查询不到结果。之后我添加了一个叫peter的用户发现能查到该用户的信息。于是知道是编码问题。

需要在mybatis配置文件mybatis-config.xml中加上一句

<property name="url" value="jdbc:mysql://127.0.0.1/test?useUnicode=true&characterEncoding=UTF-8"/>

设置编码格式为“utf8”即可用中文进行查询。

mybatis参数为字符型的查询总结
众所周知,用mybatis查询有两种方式,一种是写xml映射文件,一种是写接口映射文件,这两种方式都可以进行字符串参数的查询。参数的填写以也有两种方式#{name}和${name}。这两种方式是有区别的,具体区别请自行百度。
如果用的是 #{name} 这种方式

<select id="GetUserByName" parameterType="java.lang.String" resultType="User">
         SELECT * FROM user WHERE name = #{name}
    </select>

或者

 @Select("select * from user where name =#{name}")
 public User getUserByName(String name);

参数都可以直接传递该字符串,即

	IUser iUser = session.getMapper(IUser.class);
    User user = iUser.getUserByName("孙尚香");
   System.out.println("名字:"+user.getName());
   System.out.println("年龄:"+user.getAge());
   System.out.println("性别:"+user.getSex());
   System.out.println("学校:"+user.getSchool());

如果用的是nsme{nsme}这种方式,注意要将{name}写成${_parameter},并且向其中传递字符串的时候要在前后加上单引号

<select id="GetUserByName" resultType="User" parameterType="java.lang.String">
        SELECT * FROM user WHERE name = ${_parameter}
 
    </select>

@Select("select * from user where name =${_parameter}")
 public User getUserByName(String name);

传参时要在前后加上单引号

User user = (User) session.selectOne(
                    "com.xiao.bean.xml.UserMapper.GetUserByName","'孙尚香'");
            if (user != null) {
                String userInfo = "名字:" + user.getName() + ", 年龄:" + user.getAge() + ", 性别" + user.getSex() + ",学校" + user.getSchool();
                System.out.println(userInfo);
            }

然后就可以愉快的查询啦

http://www.tofacebook.com/jinjiezhimei.html
发布了19 篇原创文章 · 获赞 11 · 访问量 2965
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览