首页 > 其他分享 >day111 - mybatis中的参数问题

day111 - mybatis中的参数问题

时间:2023-06-21 18:11:25浏览次数:35  
标签:username mapper day111 map 参数 user mybatis password User

mybatis中的参数问题

样例:根据用户名查询用户信息

mybatis中获取参数值的方式有两种#{}和${}

1. 若mapper接口方法的参数为单个的字面量类型

User getUserByUsername(String username);

 

<!--User getUserByUsername(String username);-->
<select id="getUserByUsername" resultType="User">
    <!--  select * from t_user where username = #{username}  -->
    select * from t_user where username = '${username}'
</select>

 

@Test
public void testGetUserByUsername(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.getUserByUsername("admin");
    System.out.println(user);
}

 

此时用#{}和${}任意内容获取参数值,注意${}的单引号问题

#{}的本质是占位符 ${}的本质是sql语句拼接

2.若mapper接口方法的参数为多个的字面量类型

/**
 * 验证登录
 * @param username
 * @param password
 * @return
 */
User checkLogin(String username, String password);

 

<!--  User checkLogin(String username, String password);  -->
<select id="checkLogin" resultType="User">
    <!--select * from t_user where username =#{arg0} and password =#{arg1}-->
    select * from t_user where username ='${arg0}' and password ='${arg1}'
</select>

 

@Test
public void testCheckLogin(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.checkLogin("admin","123456");
    System.out.println(user);
}

 

此时mabatis会将参数放在map集合中,一两种方式进行存储

a> arg0,arg1....
b> param1,param2...

 

需要通过#{}和${}获取mapper中的值

3.若mapper接口的参数为map集合时

/**
 * 验证登录 以map集合作为参数方式
 * @param map
 * @return
 */
User checkLoginByMap(Map<String, Object> map);

 

<!--User checkLoginByMap(Map<String, Object> map);-->
<select id="checkLoginByMap" resultType="com.gu.mybatis.pojo.User">
    select * from t_user where username =#{username} and password =#{password}
</select>

 

@Test
public void testCheckLoginByMap(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    Map< String, Object> map = new HashMap<>();
    map.put("username", "admin");
    map.put("password","123456");
    User user = mapper.checkLoginByMap(map);
    System.out.println(user);
}

 

需要通过#{}和${}获取mapper中的值

键值要与map集合中的键值一致

4. 若mapper接口方法的参数为实体类类型的参数

/**
 * 添加用户
 * @param user
 */
void insertUser(User user);
<!--  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);
    User user = new User(null,"root","123456",33,"女","hahahaha");
    mapper.insertUser(user);
}

 

只需要通过#{}和${}访问实体类中的属性名,可以获取相应的属性值

5. 在mapper接口的参数上设置@Param注解

/**
 * 验证登录,使用param注解
 * @param username
 * @param password
 * @return
 */
User checkLoginByParam(@Param("username") String  username,@Param("password") String password);

 

<!--User checkLoginByParam(@Param("username") String  username,@Param("password") String password);-->
<select id="checkLoginByParam" resultType="com.gu.mybatis.pojo.User">
    select * from t_user where username=#{username} and password = #{password}
</select>

 

@Test
public void testCheckLoginByParam(){
    SqlSession sqlSession = SqlSessionUtil.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.checkLoginByParam("admin","123456");
    System.out.println(user);
}

 

mybatis会将这些参数放在map中,以两种方式存储
* a>以注解的value属性为键,以参数为值
* b>以param1,param2为键,以参数值只需要通过#{}和${}访问map的属性名,可以获取相应的属性值
 

标签:username,mapper,day111,map,参数,user,mybatis,password,User
From: https://www.cnblogs.com/GUGUZIZI/p/17496859.html

相关文章

  • MyBatis-Plus 实现动态字段排序
    场景虽然前端能根据返回的数组进行对字段的排序,但也仅局限于实现当前页的排序,无法满足全部数据的排序,所以需要走接口的查询进行排序,获取最全的排序数据。业务需求思路前端需传递排序的字段,该字段是正序还是倒叙。可能存在多个,所以字段为字符串数组,可以通过逗号分开。后端拿......
  • Mybatis Plus 批量插入方法效率低问题优化方案 BatchExcutor
    1、问题描述项目用的是MybatisPlus框架操作数据库,在使用batchSave批量插入方法的时候发现效率极低,插入2w数据花了6分钟,太恐怖了。看了源码发现,项目的批量插入方法调用的是MybatisPlus的BatchExcutor,用这个本意是将多次更新sql语句集合为一条更新语句,复用同一个sql连接更新数据。......
  • mysql超时参数详解
    1.mysql超时参数详解目录1.mysql超时参数详解1.1.分类1.1.1.连接、网络类超时1.1.2.connect_timeout:默认为10S1.1.3.wait_timeout:默认是8小时,即28800秒1.1.4.interactive_timeout:默认是8小时,即28800秒1.2.net_read_timeout:默认是30S1.2.1.net_write_timeout:默认是60S1.2......
  • MYSQL 8 一个实例打开的表被那些参数和资源限制 分析
    再开始这个问题之前,我们先的准备一下环境,mysql8.0278G内存 SSD磁盘4核心CPU。同时通过sysbench来对系统进行测试数据的填充。首先安装sysbench并通过下面的命令来对mysqltest数据库产生10000万张表。sudosysbench/usr/share/sysbench/oltp_common.lua--mysql-host=......
  • Springboot api的controller如何接口一个List<Object>参数
    1.正常情况下,你可能会这样写:@PostMapping("/delete")@ApiOperation("Deletelistdata")@ResponseStatus(HttpStatus.OK)@ResponseBodypublicDBUpdateStatusdeleteTestCaseDatas(List<TestCaseInfo>testCaseInfoList){......
  • 解决IDEA中注释@param 参数名称不存在时提示报错
    File->Settings->Editor->Inspections搜索Javadoc,找到DeclarationhasproblemsinJavadocreferences将提示级别修改为Warning  ......
  • 前端Vue自定义列表表格信息展示可用于商品规格参数展示
    前端Vue自定义列表表格信息展示可用于商品规格参数展示 ,下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13131效果图如下:使用方法<!--table-list:表格数组数组里对象可自定义字段 --><cc-defineTable:table-list="tableArr"></cc-defin......
  • java-http携带json参数访问接口
    一个接收map的接口@RequestMapping("kkw")publicStringkkw(@RequestBodyMap<String,Object>map){if(map!=null){System.out.println(JSONObject.toJSONString(map));;}return"success";}pac......
  • 量产HLW8032串口通讯芯片的三相电参数采集系统项目资料 1主芯片采用STM32F407
    量产HLW8032串口通讯芯片的三相电参数采集系统项目资料1主芯片采用STM32F4072嵌入式软件使用UCOS2操作系统3通过3个独立串口实时采集三路三相电参数数据(通过HLW8032)4具备TFT液晶显示接口,实时显示三相电参数数据5为了采集电参数更加精确,系统具备红外解码芯片(HS0038),可在线标定电压......
  • 三菱运动控制电子凸轮应用 三菱Q173系列的电子凸轮使用,包括凸轮参数设置,电子齿轮比等
    三菱运动控制电子凸轮应用三菱Q173系列的电子凸轮使用,包括凸轮参数设置,电子齿轮比等的理解,简单应用不是问题,原理才是关键ID:9930606510923534......