当前位置: 首页 > news >正文

java-mybatis01

对象/关系映射ORM

ORM完成面向对象的编程语言DAO关系数据库的映射后,开发人员可以利用面向对象设计语言的建议易用性,也可利用关系数据库的技术优势。
ORM把关系数据库包装成面向对象的模型,采用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的方式来操作持久化对象,而ORM框架则将这些面向对象的操作转换成底层SQL。
把持久化对象的保存、修改、删除等操作转换为对数据库等操作。

工作机制(CRUD)

  • 增(create):将一个对象插入到数据库表这种。
  • 删(delete):删除对象,并从数据库中移除对应的记录。
  • 改(update):修改对象的属性,并更新数据库中的记录。
  • 查(read):根据查询条件查询数据库,返回对应的对象。

ORM的映射关系

  • 一对一:一个对象对应数据库表中的一行。
  • 一对多:一个对象对应数据库表的多条记录。
  • 多对多:多个对象之间有多个关系,通常需要用中间表来进行关联。

常用ORM框架-mybatis

mybatis不完全采用对象映射方式,允许编写sql语句,并使用映射文件来进行对象映射。
MyBatis 是一款优秀的 基于 ORM 的半自动轻量级持久层框架,它支持定制化的 SQL、存储过程以及高级映射,MyBatis 避免了几乎所有 JDBC 代码和手动设置参数以及获取结果集。
MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库记录。

mybatis优势

mybatis是一个半自动化持久层框架。优势有:

  1. 灵活性高,支持原生SQL:可以中映射文件中编写sql。
  2. 避免了ORM的性能开销:mybatis提供对sql的手写控制,减少了开销。
  3. 支持动态SQL:能够根据条件动态的生成sql语句,通过等标签,灵活的构建。
  4. 简洁的映射机制
  5. 支持复杂的查询:可以多表连接,子查询,嵌套查询等。避免了ORM框架中复杂查询等性能损失。
  6. 简化了数据库事务处理:结合spring等框架的事务处理,轻松实现对数据库事务的控制,可以自动开启、提交和回滚事务,确保数据一致性和可靠性。
  7. 跨数据库支持

应用

  1. 平常开发大部分都是结合spring来使用的 引入mybatis的pom文件
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql驱动坐标--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version><scope>runtime</scope></dependency>

2.常用的标签为:

  • select:查询语句
  • insert:插入语句
  • update:更新语句
  • delete:删除语句

3.xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="mapper.BasicSysUserMapper"><!-- 查询单个用户信息 --><select id="selectOne" parameterType="java.lang.String" resultType="model.BasicSysUser">SELECT*FROMuser_infoWHEREusername = #{username}</select><!-- 查询所有用户信息 --><select id="selectList" resultType="model.BasicSysUser">SELECT*FROMuser_info</select><insert id="insertBasicSysUser"parameterType="model.BasicSysUser">insert intobasic_sys_user(<trim prefix="" suffixOverrides=","><if test="id != null">id,</if><if test="userName != null">user_name,</if><if test="realName != null">real_name,</if></trim>)values(<trim prefix="" suffixOverrides=","><if test="id != null">#{id},</if><if test="userName != null">#{userName},</if><if test="realName != null">#{realName},</if></trim>)</insert><update id="updateBasicSysUser"parameterType="model.BasicSysUser">updatebasic_sys_user<set><if test="id != null">id=#{id},</if><if test="userName != null">user_name=#{userName},</if><if test="realName != null">real_name=#{realName},</if></set><where><if test="userName != null">and user_name=#{userName}</if><if test="id != null">and id=#{id}</if></where></update><!-- 删除 --><delete id="deleteBasicSysUser"parameterType="model.BasicSysUser">deletefrombasic_sys_user<where><if test="userName != null">and user_name=#{userName}</if><if test="id != null">and id=#{id}</if></where></delete>
</mapper>

4.对应的mapper文件

// 查询列表List<BasicSysUser> selectList(BasicSysUser basicSysUser);// 新增int insertBasicSysUser(BasicSysUser basicSysUser);// 更新int updateBasicSysUser(BasicSysUser basicSysUser);// 删除int deleteBasicSysUser(BasicSysUser basicSysUser);

相关文章:

  • 大模型时代的具身智能:从虚拟到现实的智能体进化革命
  • 用Python做有趣的AI项目 2:用 Python 和 NLTK 构建一个聊天机器人
  • 深度解析如何将图像帧和音频片段特征高效存储到向量数据库 Milvus
  • 深入浅出JVM - Java架构师面试实战
  • 有源晶振输出匹配电阻选择与作用详解
  • Spring security详细上手教学(三)密码管理
  • 如何把握邮件发送的黄金时间?
  • 北京工业大学25计专上岸经验分享
  • Qt 中 QSQLITE 和 QODBC 数据库连接的区别
  • Java 构造器
  • 基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解
  • 稳扎稳打,25西电生命科学技术学院(考研录取情况)
  • Git命令(Gitee)
  • 10 DPSK原始对话记录
  • spring项目rabbitmq es项目启动命令
  • Node.js 应用部署:镜像体积优化与安全的多阶段构建探索
  • 神经编译革命:如何用脑机接口直接编程量子计算机?
  • Java求职者面试:从Spring Boot到微服务的技术深度探索
  • TypeScript 入门到进阶全讲解(超全版)
  • 【计算机网络】Linux网络的几个常用命令
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 伊朗最大港口爆炸:26公里外都能听到,超七百人受伤,原因指向化学品储存
  • 我驻阿巴斯总领馆:将持续跟踪港口爆炸事件进展,全力确保中方人员安全
  • 新华时评·首季中国经济观察丨用好用足更加积极的财政政策
  • 体坛联播|皇马上演罢赛闹剧,杨瀚森宣布参加NBA选秀
  • 广州多条BRT相关线路将停运,全市BRT客运量较高峰时大幅下降