首页 > 其他分享 >mybatis获取参数值

mybatis获取参数值

时间:2022-08-20 13:02:08浏览次数:92  
标签:username mapper 获取 sqlSession 参数 user mybatis password 参数值

封装SqlSessionUtils

    /**
     * 获取SqlSession
     * @param b 是否自动管理事务
     * @return 返回sqlsession
     */
    public static SqlSession getSqlSession(boolean b){
        SqlSession sqlSession = null;
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            sqlSession = sqlSessionFactory.openSession(b);
        } catch (IOException exception) {
            exception.printStackTrace();
        }
        return sqlSession;
    }

获取参数值的两种方式

  • ${} 字符串拼接 注意单引号问题

  • #{} 占位符赋值 能用占位符就用,不嫩用采用拼接

mapper接口方法的参数为单个字面量

#{}和${}都可以,以任意名称(建议和形参写一样的)获取参数值,但是需要注意${}的单引号问题

User getUserById(String userId);
<select id="getUserById" resultType="User"> 
    select * from t_user where id = #{userId}
    select * from t_user where id = "${userId}"
</select>

mapper接口方法的参数为多个

自动将参数放入map

此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

  • 以arg0,arg1...为键,以参数为值

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

因此只需要通过#{}和${}为键的方式访问值即可,但是需要注意${}的单引号问题

User checkUser(String username, String password);
   <!--User checkUser(String username, String password); 参数有多个-->
    <select id="checkUser" resultType="User">
        <!--select * from t_user where id = '${arg0/para1}' and password = '${arg1/param2}'-->
        select * from t_user where id = #{arg0} and password = #{arg1}
    </select>

手动将参数放入map集合

只需要通过#{key}和${key}以键的方式访问值即可,但是需要注意${}的单引号问题

    @Test
    public void testByMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
        stringObjectHashMap.put("username","asd");
        stringObjectHashMap.put("password","123");
        User user = mapper.checkUserByMap(stringObjectHashMap);
        System.out.println(user);
    }
User checkUserByMap(Map<String, Object> map);
    <select id="checkUser" resultType="User">
        <!--select * from t_user where id = '${username}' and password = '${password}'-->
        select * from t_user where id = #{username} and password = #{password}
    </select>

**接口方法的参数是实体类类型的参数

只需要通过#{属性名}和${属性名}以键的方式访问值即可,但是需要注意${}的单引号问题

public void testByBean(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession(true);
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.insertUserByBean(new User(null, "ert", "789", 56, 'f', "[email protected]"));
        System.out.println(i);
    }
int insertUserByBean();
 <!--int insertUserByBean(); 插入用户-->
    <insert id="insertUserByBean">
        insert into t_user values(null, #{username}, #{password}, #{age}, #{sex}, #{email})
    </insert>

**使用@Param注解命名参数

建议除了实体类都用这个方法

此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储

  • @Param注解的value为键,以参数为值

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

User checkUserByAnnotation(@Param("username")String username, @Param("password")String password);
<select id="checkUserByAnnotation" resultType="User">
        <!-- select * from t_user where username = #{param1} and password = #{param2} -->
        select * from t_user where username = #{username} and password = #{password}
    </select>

标签:username,mapper,获取,sqlSession,参数,user,mybatis,password,参数值
From: https://www.cnblogs.com/phonk/p/16607541.html

相关文章

  • mybatis特殊sql的执行
    特殊sql的执行模糊查询根据用户名模糊查询List<User>selectLikeUserById(@Param("id")Integerid);建议使用:直接用"%"#{value}"%"拼接<selectid="selectLikeUserByI......
  • mybatis自定义参数
    首先我们先定义两个表t_emp/t_dept由于我们的pojo中,使用了驼峰命名法,而数据表中使用的是下划线命名法解决字段名和属性名不一致为字段起别名,保持与属性名一致select......
  • mybatis缓存
    MyBatis缓存只对查询功能有效一级缓存一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会从数据库重新访......
  • mybatisplus使用xml
    一、配置xml路径mybatis-plus:mapper-locations:classpath:mapper/*.xml二、编写Mapper里面的方法publicinterfaceUserMapperextendsBaseMapper{ListfindAll()......
  • js时间戳获取和转换
    js时间戳获取和转换1.js获取当前时间戳1.1获取的时间戳是把毫秒改成000显示vartimestamp=Date.parse(newDate());1.2获取了当前毫秒的时间戳vartimestamp=(ne......
  • MybatisPlus分页 假性失效
    背景:前端告诉我,页面只能显示1000条数据,实际上有4701条数据,为什么其他数据不能显示,后端返回的total就是1000。我看了后端分页插件配置也没有发现不正确的地方,使用了page()方......
  • CTF_攻击目标主机获取root权限及flag全流程分析详解
    一、主机发现 1、nmap-sP192.168.178.1/24   //ping扫描C段   2、arp-scan-l             //感觉快一点 3、netdiscover-p......
  • MybatisPlus——全网配置最全的代码生成器
    MybatisPlus代码生成器这里讲解的是新版(mybatis-plus3.5.1+版本),旧版不兼容官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)配置这里的配置......
  • 爬虫-获取豆瓣Top250信息
    importtimeimportrequestsfromlxmlimportetreei=0foriteminrange(0,275,25):url=f'https://movie.douban.com/top250?start={item}&filter='......
  • 学习javaweb第2天(MyBatis快速入门)
    Mybatis几乎免除所有的JDBC代码以及设置参数和获取结果集的工作演示mybatis快速入门1、创建user表,添加数据:在sqlyog中输入一下代码,生成mybatis数据库,并且生成tb_user表......