MyBatis——SQL映射文件 传入普通字段参数

一、SQL映射文件实现条件查询

以下示例中返回的实体类数据类型,即resultType属性或resultMap中的type属性,都应该写成对应类的包路径,只不过博主在核心配置文件配置指向了存放实体类的包,所以直接写了实体类的名字,这样比较简便。具体配置可自行百度,或参考上一篇博文,很简单,一句话的事。

(1)传入普通字段参数

新建UserMapper.java接口,定义查询用户的方法,使用注解传入参数

package Dao;
 
import Entity.User;
import org.apache.ibatis.annotations.Param;
 
 
public interface UserMapper {
     
    public User getUserInfo(@Param("uName")String name);  //通过用户名查询用户
}

新建UserMapper.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指定了命名空间-->
<mapper namespace="Dao.UserMapper">
    <!--验证用户登录-->
    <select id="getUserInfo" resultType="User">
        SELECT * FROM UserInfo WHERE UserName=#{
     uName} 
    </select>
</mapper>

映射文件中mapper标签的namespace属性值要对应着UserMapper接口的包路径,因为我们是通过SqlSession的mapper接口的方式执行SQL语句,而且select标签的id属性值要与接口中定义的方法名一致,否则会找不到映射的SQL标签。使用注解的方式传入参数,在SQL语句中要使用这个参数的时候,通过#{参数名}获得值(注意是@Param定义的参数别名,而不是传给接口的参数名称),这里是#{uName}。指定resultType返回类型是我们的实体类User,注意此时数据库的字段名一定要跟实体类的属性名保持一致,实体类属性名最好是驼峰命名法进行命名,至于属性名跟字段名不一致的情况,接下来会介绍。传入字段参数,可以省略parameterType属性,直接在SQL语句中通过#{参数名}使用即可,此属性表明执行这个SQL映射块的时候需要传入的参数是什么类型的,如要声明,则类型一定要匹配上。参数可以是多个。

在上一篇中我们定义了专门获取SqlSession、关闭SqlSession的工具类,这里不再列出。定义服务层代码UserServiceImpl.java(其实还有服务接口,自行创建,这里不再列出,节约篇幅),如下

package ServiceImpl;
 
import BaseUtil.MyBatisUtil;
import Dao.UserMapper;
import Entity.User;
import Service.UserService;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.SqlSession;
 
 
/**
 *  用户服务接口实现类
 * */
public class UserServiceImpl implements UserService {
     
    /**
     *  查询用户信息
     * */
    @Override
    public User getUserInfo(@Param("uName") String userName) {
     
        SqlSession sqlSession=MyBatisUtil.getSqlSession();
        User user=sqlSession.getMapper(UserMapper.class).getUserInfo(userName);
        MyBatisUtil.close(sqlSession);
        return user;
    }
}

最后创建测试代码Test.java

package Servlet;
 
 
import Entity.User;
import ServiceImpl.UserServiceImpl;
 
 
public class Test {
     
    public static void main(String[] args) {
     
        User user=new UserServiceImpl().getUserInfo("张三");
        System.out.println(user.getUserName());
    }
}

运行结果是可以输出字符串“张三”的,因为数据库中的测试用户名就是张三,而我们又指定了resultType是实体类User,MyBatis会通过反射获取到User类的信息,然后将查询出来的结果集中的每一列进行映射,通过调用这些属性的set方法绑定上值。如果查询不到或者映射不上,肯定是一个null。

你可能感兴趣的:(MyBatis——SQL映射文件 传入普通字段参数)