1、MyBatis框架适用场合:
- (1)MyBatis专注于SQL本身,是一个足够灵活的DAO层解决方案。
- (2)对性能的要求很高,或者需求变化较多的项目,如互联网项目,MyBatis将是不错的选择。
2、#{}和${}的区别
- #{}是预编译处理,${}是字符串替换。
- Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
- Mybatis在处理${}时,就是把${}替换成变量的值。
- 使用#{}可以有效的防止SQL注入,提高系统安全性。
3、当实体类中的属性名和表中的字段名不一样 处理方案
- )数据库别名。通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致。
- )<resultMap>。通过<resultMap>来映射字段名和实体类属性名的一一对应的关系。
4、通常一个Xml映射文件,都会写一个Dao接口与之对。在mapper映射文件中的namespace指向该Dao接口的全限定性类名,映射文件中的每一个<select>、<insert>、<update>、<delete>标签,都会被解析为一个MappedStatement对象。Dao接口中方法名就是就是对应的MappedStatement 的id值。接口方法内的参数,就是传递给sql的参数。
5、在Dao接口中的方法是不可以重载的,因为是全限名+方法名的保存和寻找策略。Dao接口的工作原理是JDK动态代理,Mybatis运行时会使用JDK动态代理为Dao接口生成代理proxy对象,代理对象proxy会拦截接口方法,转而执行MappedStatement所代表的sql,然后将sql执行结果返回。
6、Mybatis分页
- )使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页。
- )使用原生sql,带分页参数的sql,物理分页。
- )也可以用插件分页。
7、如何获取自动生成的(主)键值?
- insert 方法总是返回一个int值 - 这个值代表的是插入的行数。
- 而自动生成的键值在 insert 方法执行完后可以被设置到传入的参数对象中。