查询所有数据
步骤
- 编写接口方法:Mapper接口
是否有参数:无
结果:List<Brand>(返回的是List集合)
2.编写SQL语句:sql映射文件
3.执行方法,测试
Mybatis完成操作需要几步
三步:编写接口方法----编写sql语句-----执行方法
注意:数据库表的字段名称必须和实体类中的属性名不一致,不能自动封装数据
无法自动封装时需要手动封装
- 给数据库表中的字段名起别名,让跟实体类不一致的字段名一致(缺点:每次查询都需要定义一次别名)
- 导入sql片段(也有缺点)
<sql id="user">
id,username,password,gender,addr
</sql>
<select id="selectById" resultType="user">
select <include refid="user"/> from tb_user where id=#{id};
</select>
3.使用resultMap(完成数据库字段名和实体类中的属性名不一致的情况)
定义resultMap标签
在<select>标签中 resultMap属性替换resultType属性
注意:在上面只需要定义 字段名 和 属性名 不一样的映射,而一样的则不需要专门定义出来。
实体类属性名 和 数据库表列名 不一致,不能自动封装数据
-
==起别名:==在SQL语句中,对不一样的列名起别名,别名和实体类属性名一样
-
可以定义 <sql>片段,提升复用性
-
-
==resultMap:==定义<resultMap> 完成不一致的属性名和列名的映射
<!--id:唯一标识
type:映射类型-->
<resultMap id="userResultMap" type="user">
<!--两个标签
id:主键字段的映射
result:其他字段的映射
-->
<!--column:表的列名 property:实体类的属性名-->
<result column="" property="">
</resultMap>
<select id="selectAll" resultMap="userResultMap">
select * from tb_user;
</select>
查询--查看详情
步骤
1.编写接口方法:Mapper接口
参数:id
结果:user对象
2.编写sql语句,sql映射文件
3.执行方法,测试
参数占位符
查询到的结果很好理解就是id为1的这行数据。而这里我们需要看控制台显示的SQL语句,能看到使用?进行占位。说明我们在映射配置文件中的写的 #{id}
最终会被?进行占位。接下来我们就聊聊映射配置文件中的参数占位符。
mybatis提供了两种参数占位符:
-
#{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。从上述例子可以看出使用#{} 底层使用的是
PreparedStatement
-
${} :拼接SQL。底层使用的是
Statement
,会存在SQL注入问题。如下图将 映射配置文件中的 #{} 替换成 ${} 来看效果
<select id="selectById" resultMap="brandResultMap">
select *
from tb_brand where id = ${id};
</select>
SQL语句中特殊字段处理
以后肯定会在SQL语句中写一下特殊字符,比如某一个字段大于某个值,如下图
可以看出报错了,因为映射配置文件是xml类型的问题,而 > < 等这些字符在xml中有特殊含义,所以此时我们需要将这些符号进行转义,可以使用以下两种方式进行转义
-
转义字符
下图的
<
就是<
的转义字符。 -
<![CDATA[内容]]>