【SSM框架】MyBatis获取参数值的方式

简介: 1.单个字面量类型的参数 2.多个字面量类型的参数3.map集合类型的参数4.实体类类型的参数5.使用@Param标识参数

MyBatis获取参数值的两种方式: ${}和#{}


${}的本质就是字符串拼接,#{}的本质就是占位符赋值


${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;


但是#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时, 可以自动添加单引号


1.单个字面量类型的参数


若mapper接口中的方法参数为单个的字面量类型 ,此时可以使用${}和#{}以任意的名称获取参数的值, 注意${}需要手动加单引号

#{}方式


测试类:

public class MybatisTest {
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.getUserByUsername("root");
        System.out.println(user);
    }
}

SQL:

  </select>
    <select id="getUserByUsername" resultType="User">
        select * from t_user where username=#{username}
    </select>

数据库中的信息:



查询结果:


${}方式


错误示范:


 <select id="getUserByUsername" resultType="User">
        select * from t_user where username=${username}
    </select>

运行结果:


 

root 是字符类型 少了单引号,所以查询不到。所以我们 应该在此字符两边添加单引号:


正确示范:


    <select id="getUserByUsername" resultType="User">
        select * from t_user where username='${username}'
    </select>

2.多个字面量类型的参数


若mapper接口中的方法参数为多个时


此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1...为键,以参数为值;以


param1,param2...为键,以参数为值;


因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值, 注意${}需要手动加单引号


接口:

public interface UserMapper {
    User checkLogin(String username,String password);
}

测试类:

public class MybatisTest {
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.checkLogin("张三", "123");
        System.out.println(user);
    }
}

UserMapper.xml:(错误示范)

    <select id="checkLogin" resultType="User">
        select * from t_user where username=#{username} and password=#{password};
    </select>


Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'username' not found. Available parameters are [arg1, arg0, param1, param2]


翻译:


查询数据库时出错。原因:org.apache.ibatis.binding。绑定异常:未找到参数“用户名”。可用参数为[arg1、arg0、第1段、第2段]


UserMapper.xml:(换为这个)


    <select id="checkLogin" resultType="User">
        select * from t_user where username=#{arg0} and password=#{arg1};
    </select>

数据库中的表:


运行结果:


3.map集合类型的参数


若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在


map中 只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号


接口:

public interface UserMapper {
    User checkLoginByMap(Map<String,Object> map);
}

测试类:

public class MybatisTest {
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, Object> map = new HashMap<>();
        map.put("username","张三");
        map.put("password","123");
        User user = userMapper.checkLoginByMap(map);
        System.out.println(user);
    }
}

UserMapper.xml:

    <select id="checkLoginByMap" resultType="com.atguigu.mybatis.pojo.User">
select * from t_user where username='${username} 'and password='${password}';
    </select>


4.实体类类型的参数


若mapper接口中的方法参数为实体类对象时


此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号

接口:

public interface UserMapper {
    int insertUser(User user);
}

测试类:

public class MybatisTest {
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(null, "小王", "789123", 28, "女", "9090889@qq.com");
        int i = userMapper.insertUser(user);
    }
}

UserMapper.xml:

 <insert id="insertUser">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>



5.使用@Param标识参数


可以通过@Param注解标识mapper接口中的方法参数


此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以


param1,param2...为键,以参数为值;只需要通过${}和#{}访问map集合的键就可以获取相对应的值, 注意${}需要手动加单引号


之前的:

User checkLogin(String username,String password);

通过@Param注解标识:

User checkLogin(@Param("username") String username, @Param("password") String password);

测试类:

public class MybatisTest {
    @Test
    public void test() {
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.checkLogin("小王", "789123");
        System.out.println(user);
    }
}

UserMapper.xml:

    <select id="checkLogin" resultType="User">
        select * from t_user where username='${username} 'and password='${password}';
    </select>




运行结果:

相关文章
|
3月前
|
Java 数据库连接 Maven
手把手教你如何搭建SSM框架、图书商城系统案例
这篇文章是关于如何搭建SSM框架以及实现一个图书商城系统的详细教程,包括了项目的配置文件整合、依赖管理、项目结构和运行效果展示,并提供了GitHub源码链接。
手把手教你如何搭建SSM框架、图书商城系统案例
|
2天前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
持久层框架MyBatisPlus
持久层框架MyBatisPlus
|
3天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
26天前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
16天前
|
缓存 Cloud Native 安全
探索阿里巴巴新型ORM框架:超越MybatisPlus?
【10月更文挑战第9天】在Java开发领域,Mybatis及其增强工具MybatisPlus长期占据着ORM(对象关系映射)技术的主导地位。然而,随着技术的发展,阿里巴巴集团推出了一种新型ORM框架,旨在提供更高效、更简洁的开发体验。本文将对这一新型ORM框架进行探索,分析其特性,并与MybatisPlus进行比较。
22 0
|
3月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
XML Java 数据库连接
如何搭建SSM框架、图书商城系统
这是一份详尽的《Spring + SpringMVC + Mybatis 整合指南》,作者耗时良久整理出约五万字的内容,现已经全部笔记公开。此文档详细地介绍了如何搭建与整合SSM框架,具体步骤包括创建Maven项目、添加web骨架、配置pom文件以及整合Spring、SpringMVC和Mybatis等。无论是对初学者还是有一定基础的开发者来说,都是很好的学习资源。此外,作者还提供了项目源码的GitHub链接,方便读者实践。虽然当前主流推荐学习SpringBoot,但了解SSM框架仍然是不可或缺的基础。
34 0
|
3月前
|
SQL Java 数据库连接
【Java 第十三篇章】MyBatis 框架介绍
MyBatis 原名 iBATIS,2001 年由 Clinton Begin 创建,以其简易灵活著称。2010 年更名以重塑品牌形象。MyBatis 通过 SQL 映射文件将 SQL 语句与 Java 代码分离,支持编写原生 SQL 并与方法映射。具备对象关系映射功能,简化数据库记录处理。支持动态 SQL 构建,灵活应对不同查询条件。内置缓存机制,提升查询效率。相比全功能 ORM,MyBatis 提供更高 SQL 控制度和更好的维护性,并易于与 Spring 等框架集成,广泛应用于 Java 数据访问层。
34 0
|
27天前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
81 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。