ibatis中#和$符号的区别

1.美图

在这里插入图片描述

ibatis中#和$符号的区别

在我们使用ibatis过程中,写sqlmap配置文件时经常会用到两个特殊的传值符号#和$符合,下面根据个人的分析总结,两者的区别。

  1.  数据类型匹配
    

#:会进行预编译,而且进行类型匹配;

$:不进行数据类型匹配。

如:

变量name的类型是string, 值是"张三"的时候

          $name$ = 张三

          #name# = '张三'

那么使用 就 会 报 错 , 若 要 使 用 就会报错,若要使用 使的话,需要修改为’ n a m e name name’;

我有一次要实现

(CURRENT_DATE-INTERVAL '7D') 使用这个 (CURRENT_DATE-INTERVAL '${dayNum}D')
  1.  实现方式
    

$ 的作用实际上是字符串拼接,

     select * from users where name= $name$

     等效于

     StringBuffer sb = newStringBuffer(256);

     sb.append("select * from userswhere name=").append(name);

     sb.toString();

#用于变量替换

    select * from users  where name = #name#

    等效于

    prepareStement=stmt.createPrepareStement("select * from users where name = ?")

   prepareStement.setString(1,'张三');
  1.  #和$使用场景
    

(1)变量的传递, 必须使用#,防止sql注入;# 是用prepareStement,提示效率。

#方式一般用于传入添加/修改的值或查询/删除的where条件

(2) 只 是 简 单 的 字 符 拼 接 而 已 , 对 于 非 变 量 部 分 , 那 只 能 使 用 只是简单的字符拼接而已,对于非变量部分, 那只能使用 使, 实际上, 在很多场合,$也是有很多实际意义的

         $方式一般用于传入数据库对象.例如传入表名.

         例如:

         select  * from  $tableName$  对于不同的表执行统一的查询

         update  $tableName$ set  name = #name#  每个实体一张表,改变不用实体的状态

         特别说明, $只是字符串拼接,所以要特别小心sql注入问题。

  (3)能同时使用#和$的时候,最好用#。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
无法解析符号 'ibatis'通常是由于缺少相关依赖库或配置文件引起的。请确保您已经正确地配置了iBatis,并且所有必需的依赖项都已经添加到您的项目。如果您使用的是Maven,则可以尝试更新您的依赖项并重新构建项目。如果问题仍然存在,请检查您的配置文件是否正确,并确保您的代码没有任何拼写错误或语法错误。 以下是一些可能有用的步骤: 1.检查您的项目是否正确地包含了iBatis的依赖项。您可以在Maven使用以下依赖项: ```xml <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> ``` 2.检查您的配置文件是否正确。您需要确保您的配置文件包含正确的命名空间和标签,并且所有属性都已正确设置。以下是一个示例配置文件: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="password" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mappers/UserMapper.xml" /> </mappers> </configuration> ``` 3.检查您的代码是否正确。请确保您的代码没有任何拼写错误或语法错误,并且您已经正确地导入了所有必需的类和包。以下是一个示例代码: ```java import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; public class MyBatisExample { public static void main(String[] args) { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); try { UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.getUserById(1); System.out.println(user); } finally { session.close(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值