参考: https://blog.youkuaiyun.com/eaphyy/article/details/71190441
https://blog.youkuaiyun.com/a745233700/article/details/80977133
-
#{}和KaTeX parse error: Expected 'EOF', got '#' at position 15: {}的区别是什么? 答: #̲{}是预编译处理,{}是字符串替换,
Mybatis处理#{}会将sql中的#{}替换为?号,处理 时 会 把 {}时会把 时会把{}替换成变量值,
使用#{}可以有效的防止SQL注入 -
实体类中的属性名和表中字段不一样怎么办?
答①:在sql语句中定义字段名别名,让字段名的别名和实体类的属性名一致
②:通过映射字段名和实体类属性名 -
Mybatis与Hibernate有哪些不同?
①:Mybatis不是一个完全的ORM框架,需要自己编写sql语句
②:Hibernate对象/关系映射能力强,数据库无关性好,Mybais与数据库相关不能随意切换数据库
③:Mybatis直接编写原生态sql,灵活性比较高 -
如何在Mapper中传入多个参数
①:使用 #{0},#{1} ----#{0}代表接收的是Mapper中的第一个参数,#{1}代表Mapper中第二参数
②:使用 @param 注解 — selectuser(@param(“username”) string username)
③:多个参数封装成map -
在Xml文件中,常用标签有那些?
select| insert|updae|delete|resultMap|parameterMap|sql|include|selectKey 动态sql的9个 -
什么是动态sql?
① Mybatis动态sql而一再Xml文件内,以标签的方式编写动态sql,执行原理:根据表达式的值,完成逻辑判断,并动态拼接sql的功能
② 常用的标签: trim | where | set | foreach | if | choose | when | otherwise | bind。 -
ResultMap和ResultType的差别?
两者都是表示查询结果集与java对象之间的一种关系,处理查询结果集,映射到java对象。
resultMap:表示将查询结果集中的列一一映射到bean对象的各个属性。
ResultType:表示的是bean中的对象类,此时可以省略掉resultMap标签的映射,但是必须保证查询结果集中的属性 和 bean对象类中的属性是一一对应的,此时大小写不敏感,但是有限制。 -
Mybatis的一级缓存和二级缓存?
①:Mybatis一级缓存是指SQLSession,一级缓存的作用域是SQlSession, Mabits默认开启一级缓存。
同一个SQLSession执行相同的查询语句时,第一次会去查数据库,并写在缓存中,第二次直接冲缓存中读取
SqlSession执行insert、update、delete等操作commit后会清空该SQLSession缓存
②: 二级缓存是mapper级别的,Mybatis默认是没有开启二级缓存的。
第一次调用mapper下的SQL去查询用户的信息,查询到的信息会存放代该mapper对应的二级缓存区域。 第二次调用namespace下的mapper映射文件中,相同的sql去查询用户信息,会去对应的二级缓存内取结果。 -
mapper接口的工作原理是什么?Dao接口里的方法,参数不同时,方法能重载吗?
工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Mapperi接口生成proxy对象
代理对象会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回
Dao接口里的方法,是不能重载的,因为是全限名+方法名的保存和寻找策略。 -
Mybatis使用的数据库连接池?
默认使用 PooledDataSource 常用阿里的druid连接池 -
JDBC工作流程
JDBC操作步骤: (1)加载驱动 (2)建立连接 (3)创建SQL语句并执行 (4)释放资源
其他参考: https://blog.youkuaiyun.com/xy3233/article/details/86661704