spring boot整合mybatis plus使用小结

使用的mysql数据库

一.如何在xml里写create语句

<select id="createTable" >
    CREATE TABLE ${name} AS SELECT * FROM TB_HISTORY WHERE 1=2
</select>

上面这个语句的意思就是,查询TB_HISTORY表字段,并以该表字段创建一个新表,表名为传进来的table变量的值,所以xml可以通过select标签写create语句

二.如何在xml里以表名作为变量

<select id="createTable" >
    CREATE TABLE ${name} AS SELECT * FROM TB_HISTORY WHERE 1=2
</select>

在mybatis plus的xm文件中,我们一般都是使用#{}来传递变量值,但若是以表明作为变量名,应该使用${}传递变量名

三.#{}与${}传值的区别

 a.#{} 解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符;而${}仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。

b. #{} 解析之后会将String类型的数据自动加上引号,其他数据类型不会;而${} 解析之后是什么就是什么,他不会当做字符串处理。

c. #{} 很大程度上可以防止SQL注入(SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作);而${} 主要用于SQL拼接的时候,有很大的SQL注入隐患。

<select id="getTeacher" resultType="Teacher">
        SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
</select>

#{id}传值为1的话,则最终发送的sql为:select t_id id,t_name name from teacher where t_id=1

又比如  

 select * from table where name = #{name} ,

这时sql语句解析是会加上'',若传入的name为小李,那么最后打印出来的就是    select * from table where name = ‘小李’,

而用${}传值                   

select * from table where name = ${name}

传入的值也为小李,那么解析出来的sql就是       select * from table where name = 小李

四.in查询的两种写法

有两种方式一种是用#{}传值,一种使用${}传值

1.方式1

 <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
  </foreach>

使用这种方式需要注意的是,传入进来的id的值是以数组的形式传递,而不是1,2,3以逗号分割的字符串分割的这种形式

2.方式2

这种方式的传值就可以直接用1,2,3以逗号分割的字符串的形式

五、xml中<号的写法

xml中<号需要转义,需要用&lt;来代替

>好可以用&gt;来代替

六、事务的实现

在方法上加上@Transactional注解即可

事务失效的几种原因

1.方法未用public修饰

2.同一个类中方法调用,如A方法调用B方法,注解@Transactional在B上,导致@Transactional失效

3.注解的方法捕捉了异常

4.数据库引擎不支持事务,这种情况出现的概率并不高,事务能否生效数据库引擎是否支持事务是关键。常用的MySQL数据库默认使用支持事务的innodb引擎。一旦数据库引擎切换成不支持事务的myisam,那事务就从根本上失效了。

七、mybatis  plus 打印SQL语句到日志文件或控制台

需要打印日志到控制台加上以下配置

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

需要打印到日志文件里加上以下配置

logging.level.com.montnets.db.dao=debug

logging.level.com.montnets.db.dao为mapper接口所造的包路径

八、mybatis  plus 调用存储过程的写法

   <select id="createTableByP" >
        call CREATE_TABLE_BACKHIS(#{name})
    </select>

    <select id="createTableByP2" >
        {call CREATE_TABLE_BACKHIS(#{name})}
    </select>

如上sql所示,直接用select标签包裹,然后通过call调用存储过程名即可,整个sql可以用{}包裹起来,也不不用包裹,区别读者可自行去研究

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值