
MyBatis增删改查
1.
2.
3.
4.
发布日期: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 }}
数据库结构
系统使用两个主要表:dept
和 emp
。每个表的结构如下:
**
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_at
和updated_at
(时间戳字段)
此外,POJO类需要定义以下重要方法:
getters
和setters
(用于属性的读写)toString
方法(用于对象的字符串表示)- 可选的
equals
和hashCode
方法(用于集合中的唯一性)
查询操作
1. 查询所有员工
查询所有员工的SQL语句如下:
2. 动态查询
通过动态SQL占位符#{}实现查询:
占位符的使用
1. #{} 占位符
- #{} 占位符类似于JDBC中的PreparedStatement占位符,用于参数值的占位。
- 它可以防止SQL注入,适用于基本数据类型。
- 使用时,MyBatis会自动为占位符添加必要的单引号。
2. ${} 占位符
- ${} 占位符用于SQL片段的占位,适用于字符串或复杂数据类型。
- 需要手动管理单引号,存在一定的SQL注入风险。
动态SQL标签
MyBatis支持多种动态SQL标签,常用的有 if
、where
、set
和 foreach
。以下是它们的作用和示例:
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则能有效管理数据库连接,提升系统性能。
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月29日 01时28分33秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
第一次被黑
2019-03-15
PyCharm配置anaconda环境
2019-03-15
ERROR 总结
2019-03-15
查找最小值栈的O(1)
2019-03-15
Java面试题整理,闭关在家37天“吃透”这份345页PDF,纯干货
2019-03-15
概念唱片Plastic Beach封面高清壁纸
2019-03-15
旅游后期效果Ography Lightroom预设
2019-03-15
图片链接
2019-03-15
LINUX-WIFI无线接入的一些东西
2019-03-15
word文档手写字母总会大写问题
2019-03-15
Redis中的key
2019-03-15
juc-09-控制并发流程工具类
2019-03-15
第一节 docker安装
2019-03-15
Spring 和 DI 依赖注入
2019-03-15
中序线索二叉树的遍历
2019-03-15
laravel server error 服务器内部错误
2019-03-15
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
iJ配置Maven环境详解
2019-03-15
仿QQ登陆界面
2019-03-15