#{}和${}的区别
${}是变量占位符,用于xml的标签属性中和sql内部,用于字符串替换,也就是用户传入非法参数进来也会原样拼接到sql,所以sql内部会造成sql注入,非常不安全不建议使用于sql内部
#{}是参数占位符,用于sql内部,mybatis会将#{}变成?,在执行sql之前会使用预编译会话的参数设置方法按顺序给?占位符进行设置参数,避免了sql注入
Statement与preparedStatement区别
预编译会话的效率会比普通会话效率高,因为预编译会先将语句进行编译,且编译后的语句可以重复使用
预编译可以避免sql注入比较安全
什么是sql注入
用户输入非法参数,服务端在构造sql语句的时候也能构造成功,会让数据泄露等问题
一级缓存和二级缓存
一级缓存:当我们执行查询操作的时候,会将查询结果放到sqlsession中并且是用Map结构来保存的,当下一次执行查询操作的时候会先去sqlsession查询是否有,如果有的话就会直接拿来用,没有的话就去数据库查.当sqlsession消失是一级缓存一会随之消失,sqlsession调用增加修改删除close()commit()方法后就会清空缓存
二级缓存是在
网友评论