mybatis语法总结、

mybatis中的#和$的区别? 

这是我在使用mybatis时候最蛋疼的问题,下面做出总结

1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

   如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111",

   如果传入的值是id,则解析成的sql为order by "id".


  
2. $将传入的数据直接显示生成在sql中。

    如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 

    如果传入的值是id,则解析成的sql为order by id.


  
3. #方式能够很大程度防止sql注入。


  
4.$方式无法防止Sql注入。

 

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


  
6.一般能用#的就别用$.

 

注入攻击 就不用我多说了吧~

 

<![CDATA[ ]]> 这个是什么?

标明是纯文本的,没有这个的话 <  >  & 字符是不能直接存入XML的,需要转义,而用这个标记则不需要转义而将这些符号存入XML文档。

可以避免未预料的特殊符号导致XML解析出错。

 

 在XML中的所有的text将被parser解析,当一个XML的元素被解析,XML tags之间的text也将别解析,之所以这样做,是因为在XML tags之间可能包含其它元素,例如:

<name><first>Bill</first><last>Gates</last></name> 。

<name>中包含<first>和<last>两个其它元素。Parser也必须对它们进行解析,并把它们解析成为<name>的两个字元素,但是如果在text中出现了“<”这种符号,例如:

<message>if salary < 1000 then</message>。

Parser将面临着一些困难,因为它需要判断:这是XML tag的开始;还是“<”小于号,这会导致解析错误。为了解决这个问题,代替符号“&”被使用,用它来代替“<”符号。

但是如果text中包含太多的“<”和“&”,例如程序中的逻辑判断。代替符号便不是一个好的办法。因此XML提供了CDATA section。

一个CDATA section 以"<![CDATA["开始,并以"]]>"结束。例如:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1
}
else
{
return 0
}
}
]]>
</script>
其中所有在CDATA section里的符号都将被忽略。

另:CDATA section中不能包含字符串“]]>”,因此CDATA section 不能嵌套。并且在“]]>”中不能有空格符或换行符。

 

1 程序代码

 

     //声明一个session管理工厂

     SqlSessionFactory factory =null;

     //声明读取器

     Reader reader =null;

     try{

         //通过读取器定位到主配置文件

         reader = Resources.getResourceAsReader ("SqlMapConfig.xml");

         //初始化工厂

         factory =newSqlSessionFactoryBuilder().build(reader);

     }catch(IOException e) {

         //TODOAuto-generated catch block

         e.printStackTrace();

     }

     //打开一个会话(类似于 jdbc 中创建数据库连接)

     SqlSession session = factory.openSession();

     Person p =newPerson();

     p.setName("张三" );

     p.setAge(11);

     p.setBirthday(newDate());

     //进行插入

     try{

         session.insert("org.leadfar.mybatis.Person.insert", p);

         //事务提交

         session.commit();

         System.out.println("保存成功!" );

     }catch(Exception e) {

         e.printStackTrace();

         //事务回滚

         session.rollback();

     }finally{

         //关闭连接

         session.close();

     }

2sql 参数传递

1. 简单参数

 

<deleteid="delete"parameterType="int">

  delete from t_person where id=#{id} <!—无所谓写什么都可以à

</delete>

 

2. 多个参数,建议采用 Map 包装

 

<selectid="selectLikeNameAndAgeBetween"parameterType="map"resultType="Person">

<includerefid="selectBasic"/>where name like #{name} and age between #{age1} and #{age2}

</select>

SqlSession session =factory.openSession();

  Mapmap =newHashMap();

  map .put("name","%%" );

  map .put("age1", 0);

  map .put("age2", 100);

  List persons=session.selectList(Person.class.getName()+".selectLikeNameAndAgeBetween",map );

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis中,可以使用case语句来进行条件判断和返回结果。Mybatis支持两种格式的case语句:简单case函数和case搜索函数。 简单case函数的语法如下: ``` case sex when '1' then '男' when '2' then '女' else '未知' end ``` 这种格式适用于在case后面直接跟随一个字段或表达式,然后根据不同的取值返回不同的结果。 case搜索函数的语法如下: ``` case when sex = '1' then '男' when sex = '2' then '女' else '未知' end ``` 这种格式适用于在case后面跟随多个条件表达式,然后根据条件的结果返回不同的结果。 在Mybatis中使用case语句时,需要注意语法的正确性。如果在命令行内运行没有问题,但在Mybatis中执行时报错,可能是因为语法错误或者参数传递的问题。请检查SQL语句的正确性,并确保参数的传递方式正确。 另外,Mybatis中还有其他常用的标签和语法,比如foreach标签的使用。如果你有关于Mybatis的其他问题,可以提供更多的信息,我会尽力帮助你解答。 #### 引用[.reference_title] - *1* *3* [11.20工作总结mybatis中SQL语法汇总)](https://blog.csdn.net/mjx715813/article/details/103161599)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [mybatis case when 报错](https://blog.csdn.net/bsegebr/article/details/123659718)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值