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);
相关推荐
极客智谷20 分钟前
深入理解Java线程池:从原理到实战的完整指南
java·后端
代码不行的搬运工28 分钟前
HTML快速入门-4:HTML <meta> 标签属性详解
java·前端·html
Databend1 小时前
大数据是不是凉了?
数据库
mask哥1 小时前
详解最新链路追踪skywalking框架介绍、架构、环境本地部署&配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等
java·spring cloud·架构·gateway·springboot·skywalking·链路追踪
XU磊2601 小时前
javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
java·idea
学也不会1 小时前
雪花算法
java·数据库·oracle
晓华-warm1 小时前
国产免费工作流引擎star 5.9k,Warm-Flow版本升级1.7.0(新增大量好用功能)
java·中间件·流程图·开源软件·flowable·工作流·activities
凭君语未可1 小时前
介绍 IntelliJ IDEA 快捷键操作
java·ide·intellij-idea
码上飞扬2 小时前
Java大师成长计划之第5天:Java中的集合框架
java·开发语言
24k小善2 小时前
FlinkUpsertKafka深度解析
java·大数据·flink·云计算