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);
相关推荐
北漂IT民工_程序员_ZG24 分钟前
SpringBean生命周期,动态代理
java·spring boot·spring
ActionTech25 分钟前
SCALE | SQLFlash 在 SQL 优化维度上的表现评估
数据库·sql
老华带你飞1 小时前
建筑材料管理|基于springboot 建筑材料管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
木心爱编程1 小时前
【Qt 5.14.2 新手实战】QTC++入门筑基——按钮与标签联动:QPushButton + QLabel 实现图片切换器
java·c++·qt
椰羊~王小美1 小时前
setScale没传roudingmode,为什么会报错
java
WizLC2 小时前
【JAVA】JVM类加载器知识笔记
java·jvm·笔记
喝汽水的猫^2 小时前
Java实现Excel 导出(多 Sheet、复杂格式)
java·excel
毕设源码-朱学姐2 小时前
【开题答辩全过程】以 基于JavaWeb的疾病查询系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
NaiLuo_452 小时前
MySQL基本查询
数据库·mysql
刺客xs2 小时前
MYSQL数据库------多表查询
数据库·mysql