首页 > 数据库 >写sql时传入map与模糊查询

写sql时传入map与模糊查询

时间:2024-05-10 16:26:19浏览次数:18  
标签:mapper name map SQL 查询 user sql where

  1. 用map进行传参更加灵活,可以随意封装

    举例:

    //接口中的方法
    User selectByMap(Map<String,Object> map);
    

    mapper.xml中的sql语句的编写

    <!--通过map进行条件查询-->
    <select id="selectByMap" resultType="com.test.pojo.User">
        select * from User where id = #{id} and name = #{name}
    </select>
    

    测试代码编写

    //...前面有创建sqlSessionFactory对象和SQLSession对象的代码
    
    Map<String,Object> map = new HashMap<>();
    map.put("id",1);
    map.put("name","zahngsan");
    
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User user = mapper.selectByMap(map);
    System.out.println(user);
    
  2. 模糊查询

    方式一:手动添加“%”通配符

    <!--模糊查询-->
    <select id="selectByName" resultType="com.test.pojo.User">
        select * from mybatis.user where name like #{value};
    </select>
    

    编写测试代码:

    @Test
    public void testSelect(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> users = mapper.selectByName("%李%");
        for (User user : users) {
            System.out.println(user);
        }
        sqlSession.close();
    }
    

    方式二:在xml配置文件中添加"%"通配符,拼接字符串形式

    <!--模糊查询-->
    <select id="selectByName" resultType="com.test.pojo.User">
        select * from mybatis.user where name like '%${value}%';
    </select>
    

    *说明:在mapper.xml配置文件中添加"%"通配符,但是需要用单引号将其包裹住,但是用单引号裹住之后#{}就无法被识别,要改成${}这种拼接字符串的形式。虽然方式二更急简单但同时也造成了SQL安全性的问题,也就是用户可以进行SQL注入。

    方式三:在xml配置文件中添加"%"通配符,借助mysql函数

    <!--模糊查询-->
    <select id="selectByName" resultType="com.test.pojo.User">
        select * from mybatis.user where name like 
        concat('%',#{value},'%');
    </select>
    

    *说明:解决了SQL注入且能在配置文件中写"%"通配符的问题,完美实现了模糊查询

    方式四:使用是${}形式,需要用单引号包裹住

    <!--模糊查询-->
    <select id="selectByName" resultType="com.test.pojo.User">
        select * from mybatis.user where name like 
        concat('%','${value}','%');
    </select>
    

    注意:

    • '#{}'是预编译处理,mybatis在处理#{}时,会将其替换成"?",再调用PreparedStatement的set方法来赋值。
    • ${}是拼接字符串,将接收到的参数的内容不加任何修饰的拼接在SQL语句中,会引发SQL注入问题。

标签:mapper,name,map,SQL,查询,user,sql,where
From: https://www.cnblogs.com/hytip/p/18184697

相关文章

  • 用一个查询从销售订单直通供应商账单-NetSuite
    朗读全文Yourbrowserdoesnotsupporttheaudioelement.有什么用用一个查询从销售订单直通供应商账单NetSuite:从SO销售订单,到PO采购订单,到Bill供应商账单下面文章的分享仅作为演示在SuiteQLQueryToo中的展示,现实情况下的应用可以非常灵活(由于范围广泛无法此文章中......
  • 【java】【集合类】HashMap 与HashTable的区别
    1.继承的父类不同HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口HashMap继承、实现关系如下: HashTable继承、实现关系如下: Dictionary类是一个已经被废弃的类(见其源码......
  • Mysql多表连接order by优化场景
    一天,DBA突然发来一条慢SQL告警,SQL如下:SELECTs.msg,t.msg,o.msg,GROUP_CONCAT(t.tId)AStIdListFROMt_ooLEFTJOINt_ssONo.id=s.oIdLEFTJOINt_ttONt.oId=o.idWHEREo.type='B'ANDo.status='HAS_PAY'ANDt.type......
  • 记录一次sqlMap的sql注入测试
    1、首先下载sqlMap测试工具 2、此前需要安装python环境执行pythonsqlmap.py-h ,则可以验证sqlmap命令是否生效3、get请求sql注入测试命令pythonsqlmap.py-uhttp://127.0.0.1:2000/data/serverConfigure/getDataByProject?projectId=1630016701175169121--risk=3--le......
  • Mysql 查询后进行插入
    Mysql查询后进行插入,具体要求如下:1、有2张表,sys_role_user和sys_role_user_123,两张表结构相同,表字段有role_id、user_id2、role_id和user_id是唯一索引3、把sys_role_user中没有的数据从sys_role_user_123中复制到sys_role_user表中 INSERTINTOsys_role_user(role_i......
  • Kingbase+sqlsugar 携手助力医疗国产化替换 【人大金仓 .NET ORM】
     1.案例成某三甲医预约系统,该项目在2024年初进行上线测试,在正常运行了两天后,业务系统报错:Theconnectionpoolhasbeenexhausted,eitherraiseMaxPoolSize(currently800)orTimeout(currently15seconds)。金仓开发人员跟进分析,具体排查步骤如下:1.1是否是高并发......
  • dokcer-compose.yml 方式运行 mysql 8.0
    先不映射指定配置目录,./conf/mysql,docker容器开起来后,复制容器内/etc/mysql到宿主机,然后添加目录映射:-"./conf/mysql:/etc/mysql",这样就可以将配置里保存在宿主机了。version:'3.0'networks:mysql_network:name:mysql_networkexternal:trueservices:......
  • php使用mysql-text字段存取json字符串
    PHP保存时过滤掉双引号&单引号&tabfunctionformartJsonString($jsonString=''){ $jsonString=str_replace("'","",$jsonString); $jsonString=str_replace('\"',"",$jsonString); $jsonString=st......
  • SQL注入(pikachu)
    注入流程SQL注入注入点判断与注入手法介绍-FreeBuf网络安全行业门户【干货】如何判断Sql注入点_判断是否存在sql注入-CSDN博客1、是否有注入点--->第一要素-----在参数后面加上单引号,如果页面返回错误,则存在Sql注入。原因是无论是字符型还是整型都会因为单引号个数不匹......
  • selenium+mysql 爬取LEI官网数据
    importtimefromseleniumimportwebdriverfromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpected_conditions......