MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)
這3張表的關(guān)系是模型表Model ===> 訓(xùn)練表Training ===》應(yīng)用表Application(大概的邏輯是:選擇應(yīng)用,然后訓(xùn)練,然后成為模型)
首先我們先建立實(shí)體Model(我使用的data注解不需要get set @TableField(exist = false) 注解下的屬性 是相關(guān)聯(lián)表的屬性)
package cn.com.befery.dataai.po;
import java.util.Date;
import org.springframework.boot.jackson.JsonComponent;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
@JsonComponent()
@Data
@TableName("ai_model")
public class Model {
@TableId(value = "model_id", type = IdType.AUTO)
private Long modelID;
private Long applicationId;
private Long trainingId;
private String modelName;
// 描述
private String modelDescribe;
private String modelType;
private Date createDate;
private String filePath;
private String fileName;
private String daimension; //維度
private Long status;
@TableField(exist = false)
private String applicationName;
@TableField(exist = false)
private String trainingName;
@TableField(exist = false)
private String order;
@TableField(exist = false)
private String orderdir; // 升序或降序
}
然后是第二個(gè)相關(guān)聯(lián)的表 應(yīng)用表application表
package cn.com.befery.dataai.po;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
@Data
@TableName("ai_application")
public class Application implements Serializable{
private static final long serialVersionUID = 1L;
@TableId(value="application_id",type=IdType.AUTO)
private Long applicationID;
private String applicationName;
private String filePath;
private String fileName;
private Long userId;
private Date createDate;
private Integer status;
private String dimension; //維度
@TableField(exist= false)
private String userName; //關(guān)聯(lián)用戶表的名稱字段
@TableField(exist = false)
private String order;
@TableField(exist = false)
private String modelName;
@TableField(exist = false)
private String trainingName;
@TableField(exist = false)
private String orderdir; //升序或降序
}
然后是相關(guān)聯(lián)的第3張表 訓(xùn)練表traning
package cn.com.befery.dataai.po;
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import com.baomidou.mybatisplus.enums.IdType;
import lombok.Data;
@Data
@TableName("ai_training")
public class Training implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "training_id", type = IdType.AUTO)
private Long trainingID;
private Long serverId; //服務(wù)器ID
private Long applicationId; //應(yīng)用ID
private String trainingModel; //訓(xùn)練模型
private String trainingName; //訓(xùn)練名稱
private String dimensionInput; //輸入維度
private String dimensionOutput; //輸出維度
private Date createDate;
private Integer status;
@TableField(exist = false)
private String applicationName;
@TableField(exist = false)
private String serverName;
@TableField(exist = false)
private String modelName;
@TableField(exist = false)
private String order; //排序字段
@TableField(exist = false)
private String orderdir; //升序或降序
}
然后是DAO層:
package cn.com.befery.dataai.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import cn.com.befery.dataai.po.Model;
public interface ModelDao extends BaseMapper<Model> {
List<Model> selectModelPage(Pagination page,@Param(value = "model") Model model);
}
然后是xml(sql語句使用了別名,別名和實(shí)體中的一致,包括之后的前后臺(tái)交互,都取一致的名字,規(guī)范避免出錯(cuò))【我之所以使用 $ 符號(hào)是因?yàn)?如果使用#號(hào)他會(huì)當(dāng)作字符串識(shí)別,他不會(huì)當(dāng)作關(guān)鍵字識(shí)別,我使用#號(hào)不行】
<?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="cn.com.befery.dataai.dao.ModelDao">
<select id="selectModelPage"
resultType="cn.com.befery.dataai.po.Model">
SELECT
model.`model_id`,
model.`model_name` as modelName,
model.`status`as status,
t.`training_name`as trainingName,
ap.`application_name` as applicationName,
model.`create_date` as createDate
FROM
ai_model model
LEFT JOIN ai_training t
ON t.`training_id` = model.`training_id`
LEFT JOIN ai_application ap
ON ap.`application_id` = t.`application_id`
<where>
1 = 1
<if test="model.modelName != null and model.modelName != ''">
and model.`model_name` like '%${model.modelName}%'
</if>
order by ${model.order} ${model.orderdir}
</where>
</select>
</mapper>
然后就是service:
package cn.com.befery.dataai.service;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import cn.com.befery.dataai.po.Model;
import cn.com.befery.dataai.vo.ResultCode;
public interface ModelService extends IService<Model>{
//分頁
Page<Model> selectModelPage(int pageNo,int pageSize,Model model);
}
然后就是serviceImpl:(此處將接口中的 pageNo和pageSize封裝成到 分頁輔助類 page<T>中)
@Service
@Transactional
public class ModelServiceImpl extends ServiceImpl<ModelDao, Model> implements ModelService {
@Autowired
private ModelDao modelDao;
@Override
public Page<Model> selectModelPage(int pageNo, int pageSize, Model model) {
// TODO Auto-generated method stub
Page<Model> page = new Page<Model>(pageNo, pageSize);
return page.setRecords(this.baseMapper.selectModelPage(page, model));
}
}
然后就是Controller:
簡單說一下下面的參數(shù):
1.orderNO(排序用的):是前臺(tái)傳過來的,根據(jù)orderNO(類似下標(biāo))找到前臺(tái)定義好的數(shù)據(jù)庫字段
2.order(排序用的):根據(jù)orderNO(類似下標(biāo))找到前臺(tái)定義好的數(shù)據(jù)庫字段
3.orderdir(排序用的:是asc 還是desc)
4.search(前臺(tái)模糊查詢使用的):前臺(tái)傳的名字,來進(jìn)行模糊查詢
/**
* @author zhangxuewei 三表查詢
* @param param
* @param request
* @return
*/
@ResponseBody
@RequestMapping(value = "/modelPage")
public ResponseData modlePage(SearchParam param, HttpServletRequest request) {
logger.info("modlePage ...........");
String orderNO = request.getParameter("order[0][column]");
String order = request.getParameter("columns[" + orderNO + "][name]");
String orderdir = request.getParameter("order[0][dir]");
String search = request.getParameter("search[value]");
int pageNo = param.getStart() / param.getLength() + 1;
int pageSize = param.getLength();
Model model = new Model();
model.setModelName(search);
model.setOrder(order);
model.setOrderdir("asc".equals(orderdir) ? "asc" : "desc");
Page<Model> pageDate = modelService.selectModelPage(pageNo, pageSize, model);
return responseData(param.getDraw(), pageDate);
}
這個(gè)是分頁返回公共類
package cn.com.befery.dataai.controller;
import org.springframework.stereotype.Controller;
import com.baomidou.mybatisplus.plugins.Page;
import cn.com.befery.dataai.vo.ResponseData;
@Controller
public class BaseController {
/**
*
* @param draw 重構(gòu)次數(shù)
* @param page 分頁數(shù)據(jù)
* @return
*/
public ResponseData responseData(String draw,Page<?> page){
ResponseData res = new ResponseData();
res.setData(page.getRecords());
res.setDraw(draw);
res.setRecordsFiltered((int)page.getTotal());
res.setRecordsTotal((int)page.getTotal());
return res;
}
}
這個(gè)是ResponseDate實(shí)體類
package cn.com.befery.dataai.vo;
import java.util.List;
//@JsonInclude(Include.NON_NULL)
public class ResponseData {
/**
*
*/
// private static final long serialVersionUID = 1L;
private String draw;
private int recordsTotal;
private int recordsFiltered;
@SuppressWarnings("rawtypes")
private List data;
}
這是前端的html
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<!--[if lt IE 9]>
<script type="text/javascript" src="lib/html5.js"></script>
<script type="text/javascript" src="lib/respond.min.js"></script>
<script type="text/javascript" src="lib/PIE_IE678.js"></script>
<![endif]-->
<link rel="stylesheet" type="text/css"
href="../static/h-ui/css/H-ui.min.css" rel="external nofollow" />
<link rel="stylesheet" type="text/css"
href="../static/h-ui/css/H-ui.admin.css" rel="external nofollow" />
<link rel="stylesheet" type="text/css"
href="../static/libs/Hui-iconfont/1.0.7/iconfont.css" rel="external nofollow" />
<link rel="stylesheet" type="text/css"
href="../static/libs/icheck/icheck.css" rel="external nofollow" />
<link rel="stylesheet" type="text/css"
href="../static/h-ui/skin/default/skin.css" rel="external nofollow" id="skin" />
<link rel="stylesheet" type="text/css"
href="../static/h-ui/css/style.css" rel="external nofollow" />
<!--[if IE 6]>
<script type="text/javascript" src="http://lib.h-ui.net/DD_belatedPNG_0.0.8a-min.js" ></script>
<script>DD_belatedPNG.fix('*');</script>
<![endif]-->
<title>應(yīng)用列表</title>
<style type="text/css">
.dataTables_wrapper .dataTables_length {
float: left;
padding-bottom: 0px;
padding-top: 10px;
padding-left: 20px;
}
.table tbody tr td:FIRST-CHILD {
text-align: center;
}
.table tbody tr td {
text-align: center;
}
.dataTables_wrapper .dataTables_filter {
padding-bottom: 10px;
}
.mt-20 {
margin-top: 10px;
}
.page-container {
padding: 20px;
padding-top: 0px;
}
.form-horizontal .form-label {
text-align: left;
width: 140px;
padding-right: 0px;
}
</style>
</head>
<body>
<nav class="breadcrumb">
<i class="Hui-iconfont"></i> 首頁 <span class="c-gray en">></span>
模型和測試管理 <span class="c-gray en">></span> 模型列表 <a
class="btn btn-success radius r" id="refresh"
style="line-height: 1.6em; margin-top: 3px"
href="javascript:location.replace(location.href);" rel="external nofollow" title="刷新"><i
class="Hui-iconfont"></i></a>
</nav>
<div class="page-container">
<!-- <div class="text-c"> 日期范圍:
<input type="text" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmax\')||\'%y-%M-%d\'}',minDate:'#F{$dp.$D(\'logmax\',{M:-3})}'})" id="logmin" class="input-text Wdate" style="width:120px;">
-
<input type="text" onfocus="WdatePicker({maxDate:'#F{$dp.$D(\'logmin\',{M:3})||\'%y-%M-%d\'}',minDate:'#F{$dp.$D(\'logmin\')}'})" id="logmax" class="input-text Wdate" style="width:120px;">
<input type="text" name="" id="search" placeholder=" 門店名稱" style="width:250px" class="input-text">
<button name="" id="search" class="btn btn-success" type="submit" onclick="search()"><i class="Hui-iconfont"></i> 搜賬戶</button>
</div> -->
<!-- <div style="display: <#if(modelServer)??>${modelServer"
class="cl pd-5 bg-1 bk-gray mt-20">
<span class="l"> <a class="btn btn-primary radius" id="addApp"
onclick="modelServerServer_add('創(chuàng)建模型服務(wù)','/pages/modelServer-add.html')"
href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><i class="Hui-iconfont"></i> 創(chuàng)建模型服務(wù)</a><a
id="datarefresh" onclick="data_refresh()"></a><input id="hiddentext"
type="text" hidden="true" /> <input id="msgsecret" type="text"
hidden="true" />
</div> -->
<div style="display: <#if (model)??>${model}<#else></#if>" class="cl pd-5 bg-1 bk-gray mt-20"> <span class="l"> <a class="btn btn-primary radius" id="addApp" onclick="model_testing('測試模型','/pages/model-testing.html')" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><i class="Hui-iconfont"></i> 測試模型</a><a id="datarefresh" onclick="data_refresh()"></a><input id="hiddentext" type="text" hidden="true" /> <input id="msgsecret" type="text" hidden="true" /></div>
<div class="mt-20">
<table
class="table table-border table-bordered table-bg table-hover table-sort "
width=100%>
<thead>
<tr class="text-c">
<!-- <th width="40"><input id = "checkAll" name="checkAll" type="checkbox" value=""></th> -->
<th width="80">序號(hào)</th>
<th width="80">模型服務(wù)名稱</th>
<th width="100">訓(xùn)練名稱</th>
<th width="100">應(yīng)用名稱</th>
<th width="100">創(chuàng)建時(shí)間</th>
<th width="80">操作</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<div id="ajaxModal" class="modal hide fade" tabindex="-1">
<article class="page-container">
<form action="" method="post" class="form form-horizontal"
id="form-modelServer-add">
<div class="row cl">
<label class="form-label col-xs-3 col-sm-3"><span
class="c-red">*</span>App名稱:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" value="" placeholder=""
id="appName" name="appName">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-3 col-sm-3"><span
class="c-red">*</span>圖片地址:</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" value="" placeholder=""
id="adminMobile" name="adminMobile">
</div>
</div>
<div class="row cl">
<label class="form-label col-xs-3 col-sm-3"><span
class="c-red">*</span>Domain(SaaS):</label>
<div class="formControls col-xs-8 col-sm-9">
<input type="text" class="input-text" value="" placeholder=""
id="payCallBackURL" name="payCallBackURL">
</div>
</div>
<div class="row cl">
<div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3"
style="margin-left: 130px; width: 100px;">
<button class="btn btn-primary radius" value=""> 提交 </button>
</div>
<!-- <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3" style="float: right; width: 250px;margin-left: 0px;">
<input class="btn btn-primary radius" style="width: 80px;" onclick="javascript:;" value=" 取消 ">
</div> -->
</div>
</form>
</article>
</div>
<script type="text/javascript"
src="../static/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="../static/libs/layer/2.1/layer.js"></script>
<script type="text/javascript"
src="../static/libs/My97DatePicker/WdatePicker.js"></script>
<script type="text/javascript"
src="../static/libs/datatables/1.10.0/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="../static/h-ui/js/H-ui.js"></script>
<script type="text/javascript" src="../static/h-ui/js/H-ui.admin.js"></script>
<!-- <script type="text/javascript" src="js/modelServer.js"></script> -->
<script type="text/javascript">
var table = $('.table-sort')
.DataTable(
{
"processing" : true,
"serverSide" : true,
// "searching":true,
'language' : {
"search" : "按名稱檢索:",
"sProcessing" : "<div style='position:absolute;margin-left:42%;margin-top:15%'><img src='static/h-ui/images/loading_072.gif'/>數(shù)據(jù)加載中...</div>",
},
"sDom" : '<"top"f<"clear">>rt<"bottom"ilp><"clear">',
"order" : [
[
0, "asc"
]
],
"ajax" : {
"url" : "/model/modelPage",
/* "data": function ( d ) {
//添加額外的參數(shù)傳給服務(wù)器
d.extra_search = "canshu1";
d.extra_search1 = "canshu11";
}, */
},
"columnDefs" : [ {
orderable : false,//禁用排序
targets : [ 4 ]
} ],
"columns" : [
/*{"sTitle": "<input type='checkbox'></input>","mDataProp": null, "sWidth": "20px", "sDefaultContent": "<input type='checkbox' ></input>", "bSortable": false,"sClass": "text-center",}, */
{
"data" : "modelID",
"name" : "model_id",
"class" : "modelID"
},
{
"data" : "modelName",
"name" : "model_name",
"class" : "modelName"
},
{
"data" : "trainingName",
"name" : "training_name",
"class" : "trainingName"
},
{
"data" : "applicationName",
"name" : "application_name",
"class" : "applicationName"
},
{
"data" : function(e) {
if (e.createDate != null
&& e.createDate != "null") {
return e.createDate;
}
return "";
},
"name" : "create_date",
"class" : "createDate"
},
{
"data" : function(e) {
if (e.status == '0') {
if (e.isTrained == '0') {
return '<a style="display: <#if (modelServer_delete)??>${modelServer_delete}<#else></#if>" title="刪除" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick=modelServer_del(this,"'
+ e.modelID
+ '") class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>';
} else {
return '<a style="display: <#if (modelServer_delete)??>${modelServer_delete}<#else></#if>" title="刪除" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick=modelServer_del(this,"'
+ e.modelID
+ '") class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>';
}
} else {
if (e.isTrained == '0') {
return '<a style="display: <#if (modelServer_delete)??>${modelServer_delete}<#else></#if>" title="刪除" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick=modelServer_del(this,"'
+ e.modelID
+ '") class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>';
} else {
return '<a style="display: <#if (modelServer_delete)??>${modelServer_delete}<#else></#if>" title="刪除" href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" onclick=modelServer_del(this,"'
+ e.modelID
+ '") class="ml-5" style="text-decoration:none"><i class="Hui-iconfont"></i></a>';
}
}
},
"class" : "td-manage"
} ],
});
table.on('draw.dt', function() {
});
$('.table-sort tbody').on('click', 'tr', function() {
if ($(this).hasClass('selected')) {
$(this).removeClass('selected');
} else {
table.$('tr.selected').removeClass('selected');
$(this).addClass('selected');
}
});
//});
function refreshRow() {
}
function initComplete(data) {
//選擇時(shí)間后觸發(fā)重新加載的方法
$("#logmin").on('apply.input-text', function() {
//當(dāng)選擇時(shí)間后,出發(fā)dt的重新加載數(shù)據(jù)的方法
table.ajax.reload();
//獲取dt請求參數(shù)
var args = table.ajax.params();
console.log("額外傳到后臺(tái)的參數(shù)值extra_search為:" + args.extra_search);
});
}
function filterGlobal() {
alert($('#search').val());
$('.table-sort').DataTable().search($('#search').val()).draw();
}
function search() {
table.ajax.reload();
//獲取dt請求參數(shù)
var args = table.ajax.params();
console.log("額外傳到后臺(tái)的參數(shù)值extra_search為:" + args.extra_search);
// filterGlobal();
}
/*賬戶-添加*/
function modelServerServer_add(title, url) {
layer_show(title, url, 550, 300);
}
function data_refresh() {
var text = $('#hiddentext').val();
if (text == 'add') {
layer.alert($('#msgsecret').val());
/* layer.msg('添加成功!',{icon: 6,time:1000}); */
}
if (text == 'update') {
layer.msg('更新成功!', {
icon : 6,
time : 1000
});
}
table.ajax.reload();
}
/*app-刪除*/
function modelServer_del(obj, id) {
layer.confirm('確認(rèn)要?jiǎng)h除嗎?', function(index) {
//此處請求后臺(tái)程序,下方是成功后的前臺(tái)處理……
if (index) {
$.ajax({
type : 'POST',
url : '/model/deleteModel',
data : {
modelID : id,
},
success : function(result) {
if (result.code == "0") {
$(obj).parents("tr").remove();
layer.msg('已刪除!', {
icon : 1,
time : 1000
});
} else {
layer.msg('刪除失敗!', {
icon : 5,
time : 1000
});
}
},
error : function(jqXHR, textStatus, errorThrown) {
layer.msg(errorThrown, {
icon : 5,
time : 1000
});
}
});
} else {
alert(33)
}
});
}
/*reset secret*/
function reset_secret(obj, id) {
layer.confirm('確認(rèn)要重置Secret嗎?', function(index) {
//此處請求后臺(tái)程序,下方是成功后的前臺(tái)處理……
if (index) {
$.ajax({
type : 'POST',
url : 'modelServer/resetSecret',
data : {
appID : id,
},
success : function(result) {
if (result.code == "0") {
layer.alert('Secret is: ' + result.msg);
} else {
layer.alert('重置失敗!');
}
},
error : function(jqXHR, textStatus, errorThrown) {
layer.msg(errorThrown, {
icon : 5,
time : 1000
});
}
});
} else {
alert(33)
}
});
}
function modelServer_edit(obj, id) {
var modelServerID = $(obj).parents("tr").find(".modelServerID").text();
var appName = $(obj).parents("tr").find(".appName").text();
var imageLibId = $(obj).parents("tr").find(".imageLibId").val();
var domainId = $(obj).parents("tr").find(".domainId").val();
/*var url = "pages/modelServer-update.html?te=66&tt=88";*/
var url = "pages/modelServer-update.html?appName=" + appName
+ "&imageLibId=" + imageLibId + "&modelServerID=" + id
+ "&domainId=" + domainId;
layer_show("修改App", encodeURI(url), 550, 350);
/* var data = table.row( $(this).parents('tr') ).data();
alert(data)
var fields = $("#add-form").serializeArray();
jQuery.each( fields, function(i, field){
//jquery根據(jù)name屬性查找
$(":input[name='"+field.name+"']").val(data[i]);
});
$(":input[name='mark']").val("edit");
$("#ajaxModal").modal("show");//彈出框show
*/
}
function modelServerServer_training(obj, id) {
window.location.href = "pages/modelServer-train.html?appID=" + id;
}
function model_testing(title,url){
layer_show(title,url,550,300);
}
</script>
</body>
</html>
到此這篇關(guān)于MyBatis-Plus多表聯(lián)合查詢并且分頁(3表聯(lián)合)的文章就介紹到這了,更多相關(guān)MyBatis-Plus多表聯(lián)合查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Mybatis-Plus或PageHelper多表分頁查詢總條數(shù)不對(duì)問題的解決方法
- MyBatis-Plus多表聯(lián)查的實(shí)現(xiàn)方法(動(dòng)態(tài)查詢和靜態(tài)查詢)
- mybatis-plus多表關(guān)聯(lián)查詢功能的實(shí)現(xiàn)
- springboot整合mybatis-plus實(shí)現(xiàn)多表分頁查詢的示例代碼
- springboot + mybatis-plus實(shí)現(xiàn)多表聯(lián)合查詢功能(注解方式)
- 結(jié)合mybatis-plus實(shí)現(xiàn)簡單不需要寫sql的多表查詢
- mybatis-plus多表查詢操作方法
相關(guān)文章
SpringMVC數(shù)據(jù)輸出相關(guān)知識(shí)總結(jié)
今天帶大家學(xué)習(xí)SpringMVC的相關(guān)知識(shí),文中對(duì)SpringMVC數(shù)據(jù)輸出作了非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)的小伙伴們很有幫助,需要的朋友可以參考下2021-06-06
Java的常見熱門ORM框架優(yōu)缺點(diǎn)區(qū)別
Java?ORM框架是一種用于將Java對(duì)象映射到關(guān)系型數(shù)據(jù)庫中的工具,使得開發(fā)人員能夠通過對(duì)象操作數(shù)據(jù)庫而不必直接使用SQL查詢,Java開發(fā)變得更加高效和易于維護(hù),選擇適合你的ORM框架是根據(jù)你的需求決定的,比如你的應(yīng)用場景,數(shù)據(jù)結(jié)構(gòu)和技術(shù)水平等2024-02-02
Springboot整合實(shí)現(xiàn)郵件發(fā)送的原理詳解
SpringBoot集成郵件服務(wù)非常簡單,通過簡單的學(xué)習(xí)即可快速掌握郵件業(yè)務(wù)類的核心邏輯和企業(yè)郵件的日常服務(wù),本文給大家分享Springboot整合實(shí)現(xiàn)郵件發(fā)送的原理,一起看看吧2021-06-06
springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn)
最近導(dǎo)入表格數(shù)據(jù)時(shí)需要同時(shí)插入修改大量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于springboot+mybatis快速插入大量數(shù)據(jù)的具體實(shí)現(xiàn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
java8學(xué)習(xí)教程之lambda表達(dá)式的使用方法
Java8最值得學(xué)習(xí)的特性就是Lambda表達(dá)式,下面這篇文章主要給大家介紹了關(guān)于java8學(xué)習(xí)教程之lambda表達(dá)式使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
IDEA創(chuàng)建父項(xiàng)目和子項(xiàng)目的實(shí)現(xiàn)步驟
本文主要介紹了IDEA創(chuàng)建父項(xiàng)目和子項(xiàng)目的實(shí)現(xiàn)步驟,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Spring Security 強(qiáng)制退出指定用戶的方法
本篇文章主要介紹了Spring Security 強(qiáng)制退出指定用戶的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-03-03
JAVA中Context的詳細(xì)介紹和實(shí)例分析
這篇文章主要介紹了JAVA中Context的詳細(xì)介紹和實(shí)例分析,Context是維持android各組件能夠正常工作的一個(gè)核心功能類。如果感興趣來學(xué)習(xí)一下2020-07-07

