mybatis----小细节

1、起别名

在MyBatis中,<typeAliases>元素用于定义类型别名,它可以将Java类名映射为一个更简短的别名,这样在映射文件中可以直接使用别名而不需要完整的类名。

下面是一个示例:

mybatis核心配置文件中配置typeAliases标签


  
  1. <typeAliases>

  2. <typeAlias alias="Acount" type="duhong.entity.Account"/>

  3. </typeAliases>

为duhong.entity.Account类指定了别名Account。

定义了这些别名后,我们可以在映射文件中直接使用这些别名来引用对应的Java类,例如:

<resultMap id="AccountMap" type="Account">

通过使用别名,我们可以简化映射文件中的配置,并提高代码可读性和可维护性。

2、mybatis核心配置文件加载映射文件的其他方式
<package name="duhong.dao"/>

这种声明方式,会使mybatis查找duhong/dao下对应的xml文件,不过这种方式要求xml资源目录与dao层目录一致,而且xml名称要与mapper接口名称一致。

3、#{}与${}的区别

在MyBatis中,#{} 和 ${} 用于处理SQL语句中的参数,但是它们在作用和安全性方面有所不同。

  1. #{} 语法:
    在MyBatis中,当你使用 #{} 来表示一个参数占位符时,MyBatis会在运行时将其替换为一个参数的值,并且会使用预处理语句(PreparedStatement)来处理参数。也就是说,不管参数值是什么,它都会被视为一个字符串值并且正确地转义。
SELECT * FROM some_table WHERE id = #{id}
  1. ${} 语法:
    与 #{} 不同,当你使用 ${} 时,MyBatis会直接将这个位置替换为变量的字面值。也就是说,如果你的变量中包含了特定的SQL关键词或结构,它将不做任何转义直接嵌入SQL语句中。
SELECT * FROM ${tableName} WHERE column = #{value}

测试:

dao层添加接口


  
  1. //查询所有,按降序排列

  2. List<Account> selectAllByDesc(String key);

mapper中添加查询语句


  
  1. resultMap id="AccountMap" type="duhong.entity.Account">

  2. <id property="id" column="id"></id>

  3. <result property="accountNumber" column="account_number"></result>

  4. <result property="accountType" column="account_type"></result>

  5. <result property="balance" column="balance"></result>

  6. </resultMap>

  7. <select id="selectAllByDesc" resultMap="AccountMap">

  8. select * from account ORDER BY balance ${order};

  9. </select>

添加junit,测试


  
  1. SqlSession sqlSession= SqlSessionUtil.openSession();

  2. @Test

  3. public void test(){

  4. AccountDao mapper = sqlSession.getMapper(AccountDao.class);

  5. List<Account> account = mapper.selectAllByDesc("DESC");

  6. for (Account account1 : account) {

  7. System.out.println(account);

  8. }

  9. }

将${}换成#{},执行出错,原因在于DESC是sql语句的关键字,而#{}会将参数转化为字符串。

4、模糊查询

  
  1. <select id="selectLikeAll" resultMap="AccountMap">

  2. select * from account where account_number like '%${key}%';

  3. </select>


  
  1. //模糊查询

  2. List<Account> selectLikeAll(String key);


  
  1. @Test

  2. public void likeTest(){

  3. AccountDao accountDao=sqlSession.getMapper(AccountDao.class);

  4. List<Account> accounts = accountDao.selectLikeAll("1");

  5. System.out.println(accounts);

  6. }

同样直接使用#{}也会出错,#{}在' '中并不会被赋值

改进方式sql中使用concat拼接字符串


  
  1. <select id="selectLikeAll" resultMap="AccountMap">

  2. select * from account where account_number like concat('%',#{key},'%');

  3. </select>

相关推荐

  1. MyBatis细节注意

    2024-01-25 07:56:01       38 阅读
  2. Vue细节

    2024-01-25 07:56:01       40 阅读
  3. 一些深度语音预处理细节

    2024-01-25 07:56:01       59 阅读
  4. 二分查找中的细节

    2024-01-25 07:56:01       38 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 07:56:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 07:56:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 07:56:01       82 阅读
  4. Python语言-面向对象

    2024-01-25 07:56:01       91 阅读

热门阅读

  1. 基于物联网的智能植物养护系统的设计与实现

    2024-01-25 07:56:01       56 阅读
  2. springboot的服务定位模式

    2024-01-25 07:56:01       56 阅读
  3. 前端页面直接导出Excel方案

    2024-01-25 07:56:01       57 阅读
  4. arm 汇编调用C

    2024-01-25 07:56:01       53 阅读
  5. ssh: connect to host github.com port 22: Connection timed out

    2024-01-25 07:56:01       49 阅读
  6. hadoop 三种运行方式

    2024-01-25 07:56:01       55 阅读
  7. centos下安装mongo C & C++ 驱动

    2024-01-25 07:56:01       56 阅读
  8. MATLAB Fundamentals>>>Fill Missing Values

    2024-01-25 07:56:01       59 阅读
  9. 常用的gpt-4 prompt words收集6

    2024-01-25 07:56:01       42 阅读
  10. 嵌入式Linux:如何进行嵌入式Linux开发?

    2024-01-25 07:56:01       54 阅读