MyBatis 面试准备

以下内容来源自Java 面试指南 | JavaGuide(Java面试 + 学习指南)和自己的学习笔记整理,这里我整理了自己比较感兴趣的点,也有助于我自己理解~

MyBatis

什么是MyBatis

MyBatis 是一款优秀的持久层框架,免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作;可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

#{} 和 ${} 的区别是什么?

${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于静态文本替换,比如${driver}会被静态替换为com.mysql.jdbc. Driver

#{}sql 的参数占位符,MyBatis 会将 sql 中的#{}替换为? 号,在 sql 执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的? 号占位符设置参数值,比如 ps.setInt(0, parameterValue),#{item.name} 的取值方式为使用反射从参数对象中获取 item 对象的 name 属性值,相当于 param.getItem().getName()

${}具体使用:

在核心配置文件中

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
        dataSource>
    environment>
environments>

这里${}是Properties文件中的变量占位符,分别对应着db.properties文件中的变量:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT
username=root
password=123456

${driver}就会被静态替换为com.mysql.cj.jdbc.Driver;username就会被静态替换为root

#{}是sql的参数占位符,在sql执行前会使用 PreparedStatement 的参数设置方法,按序给 sql 的? 号占位符设置参数值。

xml 映射文件中,除了常见的 select、insert、update、delete 标签之外,还有哪些标签?

注:这道题是京东面试官面试我时问的。

答:还有很多其他的标签, ,加上动态 sql 的 9 个标签, trim|where|set|foreach|if|choose|when|otherwise|bind 等,其中 sql 片段标签,通过 标签引入 sql 片段, 为不支持自增的主键生成策略标签。

你可能感兴趣的:(#,数据库部分,mybatis,面试,职场和发展)