MyBatis增删改查
发布日期:2021-05-08 13:39:51 浏览次数:22 分类:精选文章

本文共 2751 字,大约阅读时间需要 9 分钟。

MyBatis增删改查详解

全局定义的SqlSession配置

在MyBatis应用中,增删改查的重复代码通常作为全局定义的静态代码块加载。这种方式可以避免每次请求都重新初始化SqlSession,从而提升性能。以下是常见的实现方式:

private static SqlSession session = null;static {    try {        // 读取mybaits核心配置文件(mybatis-config.xml)        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");        // 通过配置获取一个SqlSessionFactory        SqlSessionFactory fac = new SqlSessionFactoryBuilder().build(in);        // 通过工厂获取一个SqlSession对象(Connection)        session = fac.openSession();    } catch (Exception e) {        // TODO: handle exception    }}

数据库结构

系统使用两个主要表:deptemp。每个表的结构如下:

  • **emp 表:

    • id (主键,自动递增)
    • name
    • dept_id(外键,引用dept表的id)
    • salary
    • created_at
    • updated_at
  • **dept 表:

    • id (主键,自动递增)
    • dept_name
    • manager_id
    • created_at
    • updated_at

POJO实体类

在MyBatis中,POJO类通常使用JavaBean风格,包含以下核心字段:

  • id(主键)
  • name
  • dept_id(外键)
  • salary
  • created_atupdated_at(时间戳字段)

此外,POJO类需要定义以下重要方法:

  • getterssetters(用于属性的读写)
  • toString 方法(用于对象的字符串表示)
  • 可选的 equalshashCode 方法(用于集合中的唯一性)

查询操作

1. 查询所有员工

查询所有员工的SQL语句如下:

2. 动态查询

通过动态SQL占位符#{}实现查询:

占位符的使用

1. #{} 占位符

  • #{} 占位符类似于JDBC中的PreparedStatement占位符,用于参数值的占位。
  • 它可以防止SQL注入,适用于基本数据类型。
  • 使用时,MyBatis会自动为占位符添加必要的单引号。

2. ${} 占位符

  • ${} 占位符用于SQL片段的占位,适用于字符串或复杂数据类型。
  • 需要手动管理单引号,存在一定的SQL注入风险。

动态SQL标签

MyBatis支持多种动态SQL标签,常用的有 ifwheresetforeach。以下是它们的作用和示例:

1. if 标签

  • 用于条件判断,支持布尔表达式。
  • 如果条件为true,执行指定的SQL片段;否则不执行。

2. where 标签

  • 用于生成WHERE子句,自动处理连接词。
  • 适用于动态条件的生成。

3. set 标签

  • 用于生成SET子句,自动处理字段名的拼接。
  • 适用于动态字段的更新操作。

4. foreach 标签

  • 用于遍历数组或集合,生成IN子句。
  • 支持多种集合类型和分隔符。

动态查询示例

查询工资范围内的数据

动态更新员工信息

update emp set
dept_id = #{dept_id},
name = #{name},
salary = #{salary}
where id = #{id}

批量操作

update emp set salary = salary + #{sal} where id in (
#{id}
)

模糊查询

模糊查询员工信息

使用#{}占位符进行模糊查询

总结

通过合理使用MyBatis的增删改查功能,可以显著提升数据操作的效率和安全性。动态SQL标签的应用使代码更加灵活,而全局定义的SqlSession则能有效管理数据库连接,提升系统性能。

上一篇:对象的去重
下一篇:IOC、DI

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月29日 01时28分33秒