日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

MyBatis數(shù)據(jù)操作和動(dòng)態(tài)SQL

作者:鑄鍵為犁 更新時(shí)間: 2023-07-25 編程語言

文章目錄

  • 本篇講MyBatis數(shù)據(jù)操作和動(dòng)態(tài)SQL
  • 一、數(shù)據(jù)操作和動(dòng)態(tài)SQL的使用
    • select查詢標(biāo)簽
    • insert插入標(biāo)簽
    • update修改標(biāo)簽
    • delete刪除標(biāo)簽
  • 總結(jié)


本篇講MyBatis數(shù)據(jù)操作和動(dòng)態(tài)SQL

在使用原生的JDBC去實(shí)現(xiàn)查詢時(shí),往往需要我們進(jìn)行手動(dòng)拼接sql語句。mybatis提供了相關(guān)的動(dòng)態(tài)標(biāo)簽可以大大簡化我們的操作。


一、數(shù)據(jù)操作和動(dòng)態(tài)SQL的使用

根據(jù)業(yè)務(wù)邏輯的需要,mybatis給我們提供了四種操作數(shù)據(jù)的標(biāo)簽,首先實(shí)體類是以員工類和部門類作為演示

package com.lzl.entity;

import java.io.Serializable;

/**
 * --效率,是成功的核心關(guān)鍵--
 * --自負(fù),會(huì)讓每個(gè)人都屈膝下跪--
 *
 * @Author lzl
 * @Date 2022/9/17 09:54
 */

public class Employee implements Serializable {
    private Integer emp_no;
    private String emp_name;
    private String  emp_gender;
    private Integer emp_age;
    private Integer emp_dept_no;
    private Double emp_salary;
    private String emp_hire_time;
    private String emp_position;
    private Integer emp_status;
    private Department department;

    public Employee(Integer emp_no, String emp_name, String emp_gender, Integer emp_age, Integer emp_dept_no, Double emp_salary, String emp_hire_time, String emp_position, Integer emp_status, Department department) {
        this.emp_no = emp_no;
        this.emp_name = emp_name;
        this.emp_gender = emp_gender;
        this.emp_age = emp_age;
        this.emp_dept_no = emp_dept_no;
        this.emp_salary = emp_salary;
        this.emp_hire_time = emp_hire_time;
        this.emp_position = emp_position;
        this.emp_status = emp_status;
        this.department = department;
    }

    public Employee() {
    }

  //getter 和 setter方法略

    @Override
    public String toString() {
        return "Employee{" +
                "emp_no=" + emp_no +
                ", emp_name='" + emp_name + '\'' +
                ", emp_gender='" + emp_gender + '\'' +
                ", emp_age=" + emp_age +
                ", emp_dept_no=" + emp_dept_no +
                ", emp_salary=" + emp_salary +
                ", emp_hire_time='" + emp_hire_time + '\'' +
                ", emp_position='" + emp_position + '\'' +
                ", emp_status=" + emp_status +
                ", department=" + department +
                '}';
    }
}

package com.lzl.entity;

import java.io.Serializable;
import java.util.List;

/**
 * --效率,是成功的核心關(guān)鍵--
 * --自負(fù),會(huì)讓每個(gè)人都屈膝下跪--
 *
 * @Author lzl
 * @Date 2022/9/17 09:54
 */

public class Department implements Serializable {
    private Integer dept_no;
    private String dept_name;
    private List<Employee> list;

    public Department(Integer dept_no, String dept_name, List<Employee> list) {
        this.dept_no = dept_no;
        this.dept_name = dept_name;
        this.list = list;
    }

    public Department() {
    }

//getter和setter方法略

    @Override
    public String toString() {
        return "Department{" +
                "dept_no=" + dept_no +
                ", dept_name='" + dept_name + '\'' +
                ", list=" + list +
                '}';
    }
}

select查詢標(biāo)簽

 <!-- id是全局引用的唯一標(biāo)識(shí) type是指定的實(shí)體類名 可以是別名-->
    <resultMap id="empMap" type="employee">
        <!-- property是實(shí)體類屬性 column是數(shù)據(jù)庫列名 -->
        <!-- id標(biāo)注主鍵列 -->
        <!-- result標(biāo)注普通列-->
        <id property="emp_no" column="emp_no" jdbcType="INTEGER"/>
        <result property="emp_name" column="emp_name" jdbcType="VARCHAR"/>
        <result property="emp_gender" column="emp_gender" jdbcType="VARCHAR"/>
        <result property="emp_age" column="emp_age" jdbcType="INTEGER"/>
        <result property="emp_dept_no" column="emp_dept_no" jdbcType="INTEGER"/>
        <result property="emp_salary" column="emp_salary" jdbcType="DOUBLE"/>
        <result property="emp_hire_time" column="emp_hire_time" jdbcType="VARCHAR"/>
        <result property="emp_position" column="emp_position" jdbcType="VARCHAR"/>
        <result property="emp_status" column="emp_status" jdbcType="INTEGER"/>
        <!-- 映射多類合作 普通屬性可以不用指定jdbcType  此處指定的是javaType 必須指定-->
        <association property="department" javaType="department">
            <id column="dept_no" property="dept_no"/>
            <result column="dept_name" property="dept_name"/>
        </association>
    </resultMap>
    <!-- 注意在<select>元素中,不能同時(shí)使用 resultMap 和 resultType 屬性。-->
    <select id="getAll" resultMap="empMap">
        select e.*,d.dept_no,d.dept_name from employee e
        inner join department d on e.emp_dept_no = d.dept_no
        <where>
            <if test="emp_name !=null and emp_name !=''">
                and e.emp_name like "%"#{emp_name}"%"
            </if>
            <if test="emp_no !=null and emp_no !=''">
                and e.emp_no = #{emp_no}
            </if>
            <if test="emp_position !=null and emp_position !=''">
                and e.emp_position = #{emp_position}
            </if>
            <if test="emp_status !=null and emp_status !=''">
                and e.emp_status = #{emp_status}
            </if>
            <if test="beginTime !=null and beginTime !=''">
                and e.emp_hire_time  &gt;= #{beginTime}
            </if>
            <if test="endTime !=null and endTime !=''">
                and e.emp_hire_time &lt;= #{endTime}
            </if>
        </where>
        order by e.emp_no
        limit #{page},#{limit}
    </select>

resultMap配置一對(duì)一映射 此處不在詳細(xì)介紹
collection配置多對(duì)一映射,看下邊代碼:

<resultMap id="department" type="department">
        <id property="deptNo" column="dept_no"/>
        <result property="deptName" column="dept_name"/>
        <collection property="employeeList" ofType="com.lzl.pojo.Employee">
            <id property="empNo" column="emp_no"/>
            <result property="empName" column="emp_name"/>
            <result property="empGender" column="emp_gender"/>
            <result property="empAge" column="emp_age"/>
            <result property="empSalary" column="emp_salary"/>
            <result property="empHireTime" column="emp_hire_time"/>
            <result property="empPosition" column="emp_position"/>
            <result property="empStatus" column="emp_status"/>
        </collection>
    </resultMap>
  • where標(biāo)簽表示條件語句,搭配if標(biāo)簽即可實(shí)現(xiàn)動(dòng)態(tài)拼接sql語句
  • if標(biāo)簽表示判斷

sql片段標(biāo)簽的使用

<!--  sql片段  -->
    <sql id="user_fields">
        u.id id,
        u.username,
        u.`password`,
        u.birthday,
        u.phone,
        u.address
    </sql>

    <select id="findUserById" resultType="User" parameterType="int">
        select
           <!--  引用sql片段  -->
           <include refid="user_fields"/>
        from user u where u.id = #{id}
    </select>

insert插入標(biāo)簽

 <insert id="addNew" useGeneratedKeys="true" keyColumn="emp_no" keyProperty="emp_no">
        insert into employee(emp_name,emp_gender,emp_age,emp_dept_no,emp_salary,
            emp_hire_time,emp_position)
        values(#{emp_name},#{emp_gender},#{emp_age},#{emp_dept_no},#{emp_salary},
        #{emp_hire_time},#{emp_position});
    </insert>

如何獲取自增主鍵的值:
useGeneratedKeys=“true” 告訴mybatis獲取自增主鍵的值
keyColumn: 來自于表的對(duì)應(yīng)列
keyProperty:要存到實(shí)體類的屬性
可以把獲取的自增主鍵的值 反向存儲(chǔ)到傳入的實(shí)體類的對(duì)應(yīng)屬性中
例如,在電商業(yè)務(wù)中,下訂單可以生成一個(gè)訂單號(hào),做一個(gè)自動(dòng)回顯的效果,可以通過獲取自增主鍵設(shè)置給實(shí)體。
可以在insert標(biāo)簽中添加以下sql片段

 <selectKey keyProperty="id" order="AFTER" resultType="int">
     select last_insert_id()
 </selectKey>

keyProperty : 裝載id的屬性
order : 順序,是指在insert前或者后執(zhí)行該句話
resultType : 結(jié)果類型
解釋: 在插入數(shù)據(jù)后,執(zhí)行該句話,將主鍵查詢到將其賦值給User類的id屬性
select last_insert_id()是mybatis自己提供的一個(gè)語句可以得到自增長的id屬性值

update修改標(biāo)簽

<update id="updateInfo">
        update employee
        <set>
            <if test="emp_name != null and emp_name != '' ">
                emp_name = #{emp_name},
            </if>
            <if test="emp_gender != null and emp_gender != '' ">
                emp_gender = #{emp_gender},
            </if>
            <if test="emp_age != null and emp_age != '' ">
                emp_age = #{emp_age},
            </if>
            <if test="emp_dept_no != null and emp_dept_no != '' ">
                emp_dept_no = #{emp_dept_no},
            </if>
            <if test="emp_salary != null and emp_salary != '' ">
                emp_salary = #{emp_salary},
            </if>
            <if test="emp_position != null and emp_position != '' ">
                emp_position = #{emp_position},
            </if>
            <if test="emp_status != null and emp_status != '' ">
                emp_status = #{emp_status},
            </if>
        </set>
        where emp_no = #{emp_no}
    </update>

set標(biāo)簽可以把我們的修改語句智能的進(jìn)行set的拼接,并且會(huì)自動(dòng)幫我們?nèi)サ糇詈蟮亩禾?hào)

delete刪除標(biāo)簽

<delete id="deleteInfoByEmp_no">
        delete from employee where emp_no in
        <foreach collection="emp_nos" item="emp_no"
                 open="(" close=")" separator=",">
            #{emp_no}
        </foreach>
    </delete>

foreach是一個(gè)動(dòng)態(tài)遍歷的標(biāo)簽
collection 指定的是傳過來的參數(shù)名,注意,參數(shù)名要用注解修飾,否則無法識(shí)別。
item是集合中的形參名
open標(biāo)簽指定開頭的拼接內(nèi)容
close指定結(jié)束的拼接內(nèi)容
separator指定每個(gè)元素之間的中間隔斷字符

總結(jié)

以上就是使用mybatis框架去實(shí)現(xiàn)增刪改查的全部過程。

原文鏈接:https://blog.csdn.net/l_zl2021/article/details/127049252

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新