網(wǎng)站首頁 編程語言 正文
文章目錄
- 本篇講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 >= #{beginTime}
</if>
<if test="endTime !=null and endTime !=''">
and e.emp_hire_time <= #{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
- 上一篇:沒有了
- 下一篇:沒有了
相關(guān)推薦
- 2023-04-13 echarts儀表盤刻度浮點(diǎn)數(shù)取整問題
- 2022-07-07 python中列表添加的四種方法小結(jié)_python
- 2023-07-07 spring security權(quán)限路由匹配restful格式的詳情id設(shè)計(jì)
- 2022-02-18 Redis - Redis command timed out nested exception i
- 2022-05-26 Tomcat服務(wù)部署及優(yōu)化的實(shí)現(xiàn)_Tomcat
- 2022-07-16 mybatis的相同攔截器—切面執(zhí)行的順序
- 2022-05-26 Redis?操作多個(gè)數(shù)據(jù)庫的配置的方法實(shí)現(xiàn)_Redis
- 2022-06-12 Spring Boot自定義Start組件開發(fā)實(shí)現(xiàn)
- 欄目分類
-
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支