【SSM】MyBatis(七.使用小技巧) 1.#{} 和 ${} 区别 2.拼接表名 3.批量删除 4.模糊查询 5.别名机制 6.SQL映射文件的配置方式 7.自动生成主键值

2023年3月29日

文章目录

  • 1.#{} 和 ${} 区别
    • 1.1 #{} 和 ${} 区别示例
    • 1.2.区别
    • 1.3.使用原则
  • 2.拼接表名
  • 3.批量删除
  • 4.模糊查询
  • 5.别名机制
    • 5.1 采用自己指定的
    • 5.2采用默认别名
    • 5.3 包下所有的类自动起别名
  • 6.SQL映射文件的配置方式
    • 6.1 class
    • 6.2 package
  • 7.自动生成主键值

1.#{} 和 ${} 区别

1.1 #{} 和 ${} 区别示例

当我们使用 #{}时


当我们改用${}时

1.2.区别

#{} 底层使用PreparedStatement,先进行sql语句编译,然后给sql语句的问号传值,没有注入风险。

${} 底层使用Statement,先进行sql语句拼接,然后sql语句编译,存在注入风险。

1.3.使用原则

优先使用 #{},但是如果需要sql语句的的关键字放到sql语句当中,只能使用${}

2.拼接表名

mapper namespace="com.sdnu.mybatis.mapper.LogMapper">
    select id="selectAllByTable" resultType="com.sdnu.mybatis.pojo.Log">
        select * from t_log_${date}
    select>
mapper>

3.批量删除

Mapper.xml

    delete id="deleteBatch">
        delete from t_car where id in (${ids})
    delete>

CarMapper.java

    int deleteBatch(String ids);

Test

    public void testDeleteBatch(){
        SqlSession sqlSession = SqlSessionUtil.openSession();
        CarMapper mapper = sqlSession.getMapper(CarMapper.class);
        int count = mapper.deleteBatch("23, 24, 25");
        System.out.println(count);
        sqlSession.commit();
        sqlSession.close();
    }

4.模糊查询

1  like ‘%${brand}%'
2  like concat('%', #{brand}, '%')
3  like concat('%', '${brand}', '%')
4  like "%"#{brand}"%"

5.别名机制

namespace不能使用别名机制。

5.1 采用自己指定的

    typeAliases>
        typeAlias type="com.sdnu.mybatis.pojo.Car" alias="aaCar"/>
        typeAlias type="com.sdnu.mybatis.pojo.Log" alias="bbLog"/>
    typeAliases>

5.2采用默认别名

    typeAliases>
        typeAlias type="com.sdnu.mybatis.pojo.Car"/>
        typeAlias type="com.sdnu.mybatis.pojo.Log"/>
    typeAliases>

5.3 包下所有的类自动起别名

 typeAliases>
	package name="com.sdnu.mybatis.pojo"/>
 typeAliases>

6.SQL映射文件的配置方式

● resource:从类路径中加载
● url:从指定的全限定资源路径中加载
● class:使用映射器接口实现类的完全限定类名
● package:将包内的映射器接口实现全部注册为映射器

6.1 class

有两点需要注意:
(1)SQL映射文件和mapper接口放在同一个目录下。
(2)SQL映射文件的名字也必须和mapper接口名一致。

    mappers>
        mapper class="com.sdnu.mybatis.mapper.CarMapper"/>
    mappers>

6.2 package

如果class较多,可以使用这种package的方式,但前提条件和上一种方式一样。

7.自动生成主键值

CarMapper.xml

insert id="insertUseGeneratedKeys" useGeneratedKeys="true" keyProperty="id">
  insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values(null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType})
insert>

服务器托管,北京服务器托管,服务器租用 http://www.hhisp.net

hackdl

咨询热线/微信 13051898268