MyBatis-获取参数值的两种方式
BS系统:
通过视图收集用户输入的数据,将数据提交到服务器中,在服务器中获取完后传输到service处理业务逻辑,然后传输到DAO,在DAO实现类中将这些数据拼接到SQL语句,最终执行SQL语句,将用户相关的数据保存到数据库。
MyBatis获取参数值的两种方式:
${}和#{}
${}的本质就是字符串拼接(会造成SQL注入),#{}的本质就是占位符赋值
${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号
#{}使用占位符赋值的方式拼接sql,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
(1)单个字面量类型的参数
若mapper接口中的方法参数为单个的字面量类型(字符串、基本数据类型以及所对应的包装类 ),
此时可以使用${}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号
usermapper.java:
package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
User getUserByName(String username);
}
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="com.mybatis.mapper.UserMapper">
<!--User getUserByName(String username);-->
<select id="getUserByName" resultType="User">
<!--select * from t_user where username = #{username}-->
select * from t_user where username = '${username}'
</select>
</mapper>
测试类:
@Test
public void getUserByNameTest(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserByName("root");
System.out.println("user = " + user);
}
(2)多个字面量类型的参数
若mapper接口中的方法参数为多个时,此时MyBatis会自动将这些参数放在一个map集合中,
1)以arg0,arg1...为键,以参数为值;
2)以param1,param2...为键,以参数为值;
因此只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号 。
usermapper.java:
package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
User check(String username,String pwd);
}
usermapper.xml:
<!-- User check(String username,String pwd);-->
<select id="check" resultType="User">
<!-- select * from t_user where username=#{arg0} and password=#{arg1}-->
select * from t_user where username=#{param1} and password=#{param2}
select * from t_user where username='${arg0}' and password='${arg1}'
</select>
测试类:
@Test
public void checkUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.check("root","123");
System.out.println("user = " + user);
}
(3)map集合类型的参数
若mapper接口中的方法需要的参数为多个时,
此时可以手动创建map集合,将这些数据放在map中只需要通过${}和#{}访问map集合的键就可以获取相对应的值,
注意${}需要手动加单引号
usermapper.java:
package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
User checkMap(Map<String,Object> map);
}
usermapper.xml:
<!--User checkMap(Map<String,Object> map);-->
<select id="checkMap" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>
测试类:
@Test
public void checkUserMap(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("username","root");
map.put("password","123");
User user = mapper.checkMap(map);
System.out.println("user = " + user);
}
(4)实体类类型的参数
若mapper接口中的方法参数为实体类对象时,
此时可以使用${}和#{},通过访问实体类对象中的属性名获取属性值,注意${}需要手动加单引号。
usermapper.java:
package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
void insertUser(User user);
}
usermapper.xml:
<!-- void insertUser(User user);-->
<insert id="insertUser">
insert into t_user values (null,#{username},#{password},#{age},#{gender},#{email})
</insert>
测试类:
@Test
public void TestInsertUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.insertUser(new User(null,"张三","123456",23,"男","123456@qq.com"));
}
(5)使用@Param标识参数
可以通过@Param注解标识mapper接口中的方法参数,此时,会将这些参数放在map集合中,
1)以@Param注解的value属性值为键,以参数为值;
2)以param1,param2...为键,以参数为值;
只需要通过${}和#{}访问map集合的键就可以获取相对应的值,注意${}需要手动加单引号
usermapper.java:
package com.mybatis.mapper;
import com.mybatis.pojo.User;
public interface UserMapper {
User checkLoginByParam(@Param("username") String username,@Param("password") String password);
}
usermapper.xml:
<!--User checkLoginByParam(@Param("username") String username,@Param("password") String password);-->
<select id="checkLoginByParam" resultType="User">
select * from t_user where username=#{username} and password=#{password}
</select>
测试类:
@Test
public void TestCheckUser(){
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.checkLoginByParam("root","123");
System.out.println("user = " + user);
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY