Mybatis小结

Mybatis小结

实体类属性名和数据库的列表名不一致,不能自动封装数据
起别名: 在SQL语句中,对不一样的列名器别名,别名和实体类属性名一样

  • 可以定义片段,提升复用性,但是不便于开发,当新增列名时,要改动代码较多
    普通版的起别名:
<select id="selectAll" resultType="brand">
    select
    id, brand_name as brandName, company_name as companyName, ordered, description, status
    from tb_brand;
</select>

进阶版的起别名(提取共同的sql片段):

<sql id="brand_column">
	id, brand_name as brandName, company_name as companyName, ordered, description, status
</sql>

在原sql语句中进行引用,如下:
使用include标签引用上述的sql片段,而refid指定上述sql片段的id值,如下:

<select id="selectAll" resultType="brand">
    select
    <include refid="brand_column" />
    from tb_brand;
</select>

其次还可以通过resultMap来解决上述问题
resultMap:定义完成不一致的属性名和列名的映射
我们在查询映射配置文件mapper.xml中书写如下:

resultMap id="brandResultMap" type="brand">
    <!--
            id:完成主键字段的映射
                column:表的列名
                property:实体类的属性名
            result:完成一般字段的映射
                column:表的列名
                property:实体类的属性名
        -->
    <result column="brand_name" property="brandName"/>
    <result column="company_name" property="companyName"/>
</resultMap>

我们只需要配置不同类名和属性名的映射关系,相同名的则不需要配置
参数占位符的解释(#{},${}):
mybatis提供了两种参数占位符:

  • #{} :执行SQL时,会将 #{} 占位符替换为?,将来自动设置参数值。从上述例子可以看出使用#{} 底层使用的是 PreparedStatement

  • ${} :拼接SQL。底层使用的是 Statement,会存在SQL注入问题。如下图将 映射配置文件中的 #{} 替换成 ${} 来看效果

  • 参数占位符:
    1. #{}:会将其替换为 ?,为了防止SQL注入
    2. KaTeX parse error: Expected 'EOF', got '#' at position 63: … * 参数传递的时候:#̲{} …{} 会存在SQL注入问题

       * 参数类型:parameterType:可以省略
       * 特殊字符处理:
          1. 转义字符:当表示id<3时书写为id &lt; #{id};(不然直接使用<号会报错)
          2. CDATA区:<![CDATA[内容]]>  这里就可以直接在内容区添加<号。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈毓辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值