MyBatis存儲(chǔ)過程、MyBatis分頁、MyBatis一對(duì)多增刪改查操作
一、用到的實(shí)體類如下:
Student.java
package com.company.entity;
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
private int id;
private String name;
private Date birth;
private Group group;
public Group getGroup() {
return group;
}
public void setGroup(Group group) {
this.group = group;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
@Override
public String toString() {
return "Student [birth=" + birth + ", group=" + group + ", id=" + id
+ ", name=" + name + "]";
}
}
Group.Java
package com.company.entity;
import java.util.List;
public class Group {
private int id;
private String name;
private String position;
private List<Student> students;
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
@Override
public String toString() {
return "Group [id=" + id + ", name=" + name + ", position=" + position
+ "]";
}
}
二、實(shí)體對(duì)應(yīng)的表結(jié)構(gòu)
student表:
create table student( id int primary key, name varchar(20), birth date, group_id int references g_group(g_id));
g_group表:
create table g_group( g_id int primary key, g_name varchar(20), g_position varchar(30));
sequence:
create sequence student_id_sequence; create sequence group_id_sequence;
三、Student和Group的映射文件如下,你可以在映射文件中找到,關(guān)于MyBatis的增刪改查操作,MyBatis調(diào)用存儲(chǔ)過程,MyBatis分頁以及MyBatis對(duì)一對(duì)一、多對(duì)多的處理
xml文件中都標(biāo)有注釋,看的時(shí)候配合下面的具體實(shí)現(xiàn)看,雖然有點(diǎn)亂
student.xml
<?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="com.company.dao.IStudentDAO">
<!-- mybatis緩存 -->
<cache eviction="LRU" flushInterval="600000" size="1024" readOnly="false" />
<!-- sql標(biāo)簽用來定義一些可以被重用的sql語句或字段或片段等 -->
<sql id="studentColumns">select id,name,birth from student</sql>
<!-- 此處獲得多對(duì)一的關(guān)系 ,但就單條記錄而言卻是一對(duì)一的關(guān)系,所以一對(duì)一的寫法跟此相同-->
<resultMap type="Student" id="getStudentAndGroup" >
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
<association property="group" column="group_id" javaType="Group">
<id column="g_id" property="id"/>
<result column="g_name" property="name"/>
<result column="g_position" property="position"/>
</association>
</resultMap>
<select id="many2one" resultMap="getStudentAndGroup" parameterType="int" >
select s.id,s.name,s.birth,s.group_id,g.g_id,g.g_name,g.g_position
from student s
left join g_group g on s.group_id = g.g_id
where s.id = #{id}
</select>
<!-- 意圖是獲得一個(gè)學(xué)生,并且獲得該學(xué)生所屬的組,跟上面的意思差不多 ,用association的select屬性-->
<!-- 于上面的相比個(gè)人感覺上面的效率要高些,因?yàn)樯厦嬷挥幸粭lsql語句 -->
<resultMap type="Student" id="getStudentAndGroupUseSelectMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
<association property="group" column="group_id" javaType="Group" select="selectGroup" />
</resultMap>
<select id="getStudentAndGroupUseSelect" resultMap="getStudentAndGroupUseSelectMap" parameterType="int">
select *
from student
where id = #{id}
</select>
<select id="selectGroup" resultType="Group" parameterType="int" flushCache="false" useCache="true"><!-- 此處實(shí)用緩存 -->
select g_id as id, g_name as name, g_position as position
from g_group
where g_id = #{id}
</select>
<!-- 動(dòng)態(tài)sql語句 的測試dynamic sql-->
<select id="getStudentBySomeCondition" parameterType="Student" resultType="Student">
select *
from student
<where>
<if test="id != null">
id>2
</if>
<if test="name != null">
and name like '%g%'
</if>
</where>
</select>
<!-- MyBatis調(diào)用存儲(chǔ)過程 -->
<resultMap type="Student" id="studentMap">
<id column="id" property="id"/>
<result column="name" property="name"/>
<result column="birth" property="birth"/>
</resultMap>
<select id="getAllUser" statementType="CALLABLE" >
{call get_all_student(#{students ,mode=OUT, jdbcType=CURSOR, javaType=ResultSet, resultMap=studentMap} )}
</select>
<!-- MyBatis向student表中插入一條數(shù)據(jù) -->
<insert id="add" parameterType="Student" keyColumn="id">
<selectKey keyProperty="id" order="BEFORE" resultType="int">
select stu_id_sequence.nextval from dual
</selectKey>
insert into student(id,name,birth) values(#{id},#{name},#{birth})
</insert>
<!-- 根據(jù)id獲得學(xué)生的信息 -->
<select id="getById" parameterType="int" resultType="Student">
<include refid="studentColumns"/> where id=#{id}
</select>
<!-- 此處的實(shí)現(xiàn)方法是一個(gè)分頁的原型,請(qǐng)查看IStudentDAOImpl.java中的調(diào)用方法 -->
<select id="getAllStudent" resultMap="studentMap">
<include refid="studentColumns"/> order by id<!--此處是引用了上面預(yù)定義好的sql語句-->
</select>
</mapper>
以上所述是小編給大家介紹的MyBatis存儲(chǔ)過程、MyBatis分頁、MyBatis一對(duì)多增刪改查操作,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Mybatis增刪改查mapper文件寫法詳解
- MyBatis中SqlSession實(shí)現(xiàn)增刪改查案例
- Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼(二)
- Mybatis實(shí)現(xiàn)增刪改查及分頁查詢的方法
- Spring boot + mybatis + Vue.js + ElementUI 實(shí)現(xiàn)數(shù)據(jù)的增刪改查實(shí)例代碼(一)
- MyBatis入門之增刪改查+數(shù)據(jù)庫字段和實(shí)體字段不一致問題處理方法
- Mybatis 條件查詢 批量增刪改查功能
- MyBatis增刪改查快速上手
相關(guān)文章
如何開啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問題
這篇文章主要介紹了如何開啟控制臺(tái)輸出mybatis執(zhí)行的sql日志問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
spring-data-redis連接操作redis的實(shí)現(xiàn)
spring-data-redis則是對(duì)Jedis進(jìn)行了高度封裝,使用起來非常方便。本文主要介紹了spring-data-redis連接操作redis的實(shí)現(xiàn),感興趣的可以了解一下2021-07-07
java 將byte中的有效長度轉(zhuǎn)換為String的實(shí)例代碼
下面小編就為大家?guī)硪黄猨ava 將byte中的有效長度轉(zhuǎn)換為String的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-11-11
RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解
這篇文章主要介紹了RabbitMQ的ACK確認(rèn)機(jī)制保障消費(fèi)端消息的可靠性詳解,簡單來說,就是你必須關(guān)閉 RabbitMQ 的自動(dòng)ack ,可以通過一個(gè) api 來調(diào)用就行,然后每次你自己代碼里確保處理完的時(shí)候,再在程序里 ack 一把,需要的朋友可以參考下2023-12-12
idea中斷點(diǎn)類型之All和Thread的區(qū)別介紹
使用all模式對(duì)于程序中含有多個(gè)線程來說,會(huì)將多個(gè)線程都阻塞在斷點(diǎn),此時(shí)所有的線程都執(zhí)行到此處,在最后一個(gè)線程執(zhí)行到此處是會(huì)發(fā)生暫停,在這之前的線程會(huì)繼續(xù)執(zhí)行到任意位置,本文給大家詳細(xì)介紹下idea中斷點(diǎn)類型之All和Thread的區(qū)別,感興趣的朋友一起看看吧2022-03-03
Spring的初始化和XML解析的實(shí)現(xiàn)
這篇文章主要介紹了Spring的初始化和XML解析的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03
SpringBoot中定時(shí)任務(wù)的使用方法解析
這篇文章主要介紹了SpringBoot中定時(shí)任務(wù)的使用方法解析,@EnableScheduling?注解,它的作用是發(fā)現(xiàn)注解?@Scheduled的任務(wù)并由后臺(tái)執(zhí)行,沒有它的話將無法執(zhí)行定時(shí)任務(wù),需要的朋友可以參考下2024-01-01
SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解
這篇文章主要介紹了SpringBoot Actuator未授權(quán)訪問漏洞修復(fù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

