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文件
java 复制代码
<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文件

java 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//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
            *
        FROM
            user_info
        WHERE
            username = #{username}
    </select>
    <!-- 查询所有用户信息 -->
    <select id="selectList" resultType="model.BasicSysUser">
        SELECT
            *
        FROM
            user_info
    </select>
     <insert id="insertBasicSysUser"
            parameterType="model.BasicSysUser">
        insert into
        basic_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">
        update
        basic_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">
        delete
        from
        basic_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文件

java 复制代码
// 查询列表
    List<BasicSysUser> selectList(BasicSysUser basicSysUser);
    // 新增
      int insertBasicSysUser(BasicSysUser basicSysUser);
      // 更新
          int updateBasicSysUser(BasicSysUser basicSysUser);
      // 删除
         int deleteBasicSysUser(BasicSysUser basicSysUser);
相关推荐
淡笑沐白12 分钟前
SQL Server 与 Oracle 常用函数对照表
数据库·oracle·sqlserver
悄悄地努力24 分钟前
IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
java·spring boot·intellij-idea
PWRJOY1 小时前
Flask-SQLAlchemy_数据库配置
数据库·python·flask
檀越剑指大厂1 小时前
【PostgreSQL系列】PostgreSQL 复制参数详解
数据库·postgresql
L耀早睡1 小时前
Spark缓存
大数据·数据库·spark
救救孩子把1 小时前
Mac 环境下 JDK 版本切换全指南
java·开发语言·macos
路飞雪吖~1 小时前
【Linux】共享内存
java·linux·服务器
kngines1 小时前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】1.4 数据库与表的基本操作(DDL/DML语句)
数据库·postgresql·数据分析·cte·age
caihuayuan41 小时前
鸿蒙AI开发:10-多模态大模型与原子化服务的集成
java·大数据·sql·spring·课程设计
沉到海底去吧Go2 小时前
软件工具:批量图片区域识别+重命名文件的方法,发票识别和区域选择方法参考,基于阿里云实现
数据库·阿里云·云计算