Mybatis三剑客插件

本文介绍了如何安装和使用Mybatis的三款插件:Mybatis-plugin,Mybatis-PageHelper和Mybatis-generator。通过详细步骤演示了从安装插件到配置、使用的过程,包括在Eclipse中安装Mybatis-plugin,使用快捷键增强XML编辑体验,以及利用Mybatis-PageHelper实现分页功能。同时,还展示了Mybatis-generator自动生成代码的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次是进行了一个定时器任务的操作,这次进行Mybatis三剑客插件的使用。


主要任务:安装Mybatis插件


Mybatis-plugin插件

步骤如下:
①Help—Eclipse Marketplace
在这里插入图片描述②在搜索框中搜Mybatis,找到如下版本的插件,点击Install
在这里插入图片描述
③点击confirm
在这里插入图片描述
④选择接受
在这里插入图片描述
⑤出现警告,选择OK
在这里插入图片描述
⑥选择Yes,重启Eclipse
在这里插入图片描述

OK,插件我们配置完成了
接下来我们来使用此插件

  1. 要查找某一个方法,在dao接口中某一个方法中 按住 Ctrl键 鼠标指到方法名称上 选择open xml 就会自动跳转

  2. 编辑XML文件时自动补全,自动生成resultMap 安装键盘 alt + / 会弹出提示框

①在UserDao.xml中的<mapper>后面书写如下代码

	<resultMap type="com.lf.model.User" id="userMap">
		<result property="id" column="id" /><!-- colum是数据库字段的名字 propertiy是java里面的属性 -->
		<result property="username" column="username" /><!-- colum是数据库字段的名字 propertiy是java里面的属性 -->
		<result property="pwd" column="pwd" /><!--Mybatis plugin插件快捷键Alt+/  -->
		<result property="realname" column="realname" />
		<result property="grade" column="grade" />
		<result property="total" column="total" />
		<result property="account" column="account" />
	</resultMap>

②在UserDao.xml中的第一个<select>修改如下:

	<select id="findById" parameterType="integer" resultMap="userMap">
		select * from user where id = #{id}
	</select>

Mybatis-PageHelper分页

中文文档https://github.com/pagehelper/MybatisPageHelper/blob/master/wikis/zh/HowToUse.md

  1. 引入jar包
    在这里插入图片描述
  2. 配置:mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<!-- 別名,把model包下所有的类自动别名命名为首字母小写的,例如User.java 别名就是user -->
		<package name="com.lf.model" />
	</typeAliases>
	
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			
		</plugin>
	</plugins>

</configuration>
  1. 修改controller和service的list方法
	@RequestMapping("/list.do")
	public String list(User user ,Model model,
			@RequestParam(required=true,value="pageNum",defaultValue="1") Integer pageNum,
			@RequestParam(required=true,value="pageSize",defaultValue="3") Integer pageSize
			){
		//如果不用RequestParam,需要手动判断参数是否为空
		/***
		 * if(pageNum==null)
		 * 		pageNum=1;
		 */
		//跳转user.jsp页面,model参数是用来往前台传参数的
		PageInfo<User> users = userService.list(pageNum, pageSize, user);
		//也可以用返回值类型是ModelAndView:这个里面可以带返回的页面,返回的数据
		model.addAttribute("pageInfo", users);
		return "user";
	}

对与此部分,相应的UserService.java与UserDaol.java两个也要做相应修改
UserService.java

package com.lf.service;

import java.util.List;

import com.github.pagehelper.PageInfo;
import com.lf.model.User;

public interface UserService {
	public PageInfo<User> list(Integer pageNum,Integer pageSize,User user);
	public void create(User user);
	public void update(User user);
	public void delete(Integer id);
	public void updateBatch(List<Integer> list);
	public User findById(Integer id);
	public void updateGrade();
}

UserDao.java

package com.lf.dao;

import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;
import com.lf.model.User;

public interface UserDao {
	public PageInfo<User> list(Integer pageNum,Integer pageSize,User user);
	public List<User> list(User user);
	public void create(User user);
	public void update(User user);
	public void delete(Integer id);
	public void updateBatch(List<Integer> list);
	public User findById(Integer id);
	public List<User> findByTotal(List<Map<String, Object>> gradelist);
	public void updateGrade(List<User> users);
}
  1. 将user.jsp引入boostrap的分页插件
<script src="${ctx }/js/bootstrap-paginator.min.js"></script>

或者用jquery的分页也可以:前台参考这个 https://blog.youkuaiyun.com/qq_22860341/article/details/82893487写分页标签代码
user.jsp的完整代码如下:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><!-- 引入jstl自定义的c标签 -->
<!-- 自定义标签的一个用法,设置一个变量 格式:c:setc:if   c:foreach -->
<c:set var="ctx" value="${pageContext.request.contextPath}" /> 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>用户列表</title>
<link href="${ctx }/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
<link href="${ctx }/css/bootstrap-theme.min.css" type="text/css" rel="stylesheet" />
<script src="${ctx }/js/jquery.min.js" type="text/javascript"></script>
<script src="${ctx }/js/bootstrap.min.js" type="text/javascript"></script> 
<script src="${ctx }/js/bootstrap-paginator.min.js"></script>
<%--  <script th:src="${ctx }/js/jquery.pagination.js}"></script> --%>
<!-- 引入自己的css -->
<link href="${ctx }/css/public.css" type="text/css" rel="stylesheet" />
<script type="text/javascript">
function showAddDiv(){
	$(".box").show();//显示div
	//document.getElementById("divId").style.display="block";
}

function edit(id){
	$.ajax({
		type:"get",
		url:"${ctx}/user/findById.do",
		data:{"id":id},
		success:function(data){
			$("#id").val(data.id);
			$("#username").val(data.username);
			$("#pwd").val(data.pwd);
			$("#realname").val(data.realname);
			$(".box").show();
		}
	});
}


function deleteUser(id){
	if(confirm("您确定要删除吗?")){
		$.post("${ctx}/user/delete.do",{"id":id,"username":id},
				function(data){
			if(data){
				alert("删除成功");
				window.location.reload();
			}else{
				alert("删除失敗");
			}	
		})
	}
}

//保存
function create(){
	alert("新增提交的数据:"+$("#saveForm").serialize());
	$.post("${ctx}/user/create.do",
			$("#saveForm").serialize(),function(data){//form表单参数可以直接通过这种提交
				if(data){
					alert("保存成功");
					window.location.reload();
				}else{
					alert("失敗");
				}		
	});
}

</script>
</head>
<body>
	<!-- 划分区域 div -->
	<div class="banner"><!-- 上面那个图片部分 -->
		<div class="title">
			欢迎,<span id="user">赵琦</span><a href="#">退出</a>
		</div>
	</div>
	
	<!-- 下面主体部分 -->
	<div id="main">
		<div id="left">
			<ul>
				<c:forEach items="${menuList }" var="row">
					<li>
						<img class="icon1" src="${ctx }/${row.icon}" />
						<a href="${ctx }${row.url}">${row.menu }</a>
					</li>
				</c:forEach>
				
				<%-- <li>
					<img class="icon1" src="${ctx }/img/icon02.png" />
					<a href="#">修改密码</a>
				</li> --%>
			</ul>
		</div>
		<!-- 列表 -->
		<div id="right">
			<button type="button" class="btn btn-primary" "showAddDiv()">新增</button>
			<table class="table table-bordered">
				<thead>
					<tr>
						<th>id</th>
						<th>用户名</th>
						<th>真实姓名</th>
						<th>删除</th>
						<th>编辑</th>
					</tr>
				</thead>
				<tbody>
					<!-- EL表达式-翻课本 -->
					<!-- List<User> row.id 这个id就是后台传来的User里面的属性名  -->
					<c:forEach items="${pageInfo.list }" var="row">
						<tr>
							<td>${row.id }</td>
							<td>${row.username }</td>
							<td>${row.realname }</td>
							<td><a href="#" class="btn btn-primary" "deleteUser(${row.id})">删除</a></td>
							<td><a href="#" class="btn btn-primary" "edit(${row.id})">编辑</a></td>
						</tr>
					</c:forEach>
				</tbody>
			</table>
			
			<div style="text-align:right;"> 
				<ul id="pageLimit"></ul> 
			</div>
			<script>		      
			    $('#pageLimit').bootstrapPaginator({
				    currentPage: "${pageInfo.pageNum }",//当前的请求页面。
				    totalPages: "${pageInfo.pages }",//一共多少页。
				  //  size:"small",//应该是页眉的大小。
				    bootstrapMajorVersion: 3,//bootstrap的版本要求。
				    numberOfPages:"${pageInfo.pageSize }",//一页列出多少数据。
				    itemTexts: function (type, page, current) {//如下的代码是将页眉显示的中文显示我们自定义的中文。
				        switch (type) {
					        case "first": return "首页";
					        case "prev": return "上一页";
					        case "next": return "下一页";
					        case "last": return "末页";
					        case "page": return page;
				        }
				    },
				    onPageClicked:function(event,originalEvent,type,page){//分页按钮点击事件
			           // var zhanghao = $("#searchrole").val();   //这是搜索时的参数,根据实际情况加或者不要
			            var url = '${ctx}/user/list.do?pageNum=' + page;
			            //如果查询条件不为空,
			            //url = url + '&username=' + 'zq';
			            window.location.href = encodeURI(url);
                    }
				});
			</script> 
		</div>
	</div>
	
	<div class="box">
		<div id="loginDiv">
			<p class="logTitle">新增</p>
			<div>
				<form id="saveForm">
					<input type="hidden" name="id" id="id" value="0" />
					<div class="formInput">
						<img src="${ctx }/img/icon01.png" />
						<input type="text" name="username" id="username"
							placeholder="" />
					</div>
					<div class="formInput">
						<span>密码:</span> <input type="password" name="pwd" id="pwd"
							placeholder="" />
					</div>
					<div class="formInput">
						<span>真实姓名:</span> <input type="text" name="realname"
							id="realname" placeholder="" />
					</div>
					<div class="formInput">
						<span>性别:</span> <select name="sex">
							<option value="1">男</option>
							<option value="2">女</option>
						</select>
					</div>
					<div class="formInput">
						<span>角色:</span> <select name="role">
							<option value="1">管理员</option>
							<option value="2">客户</option>
						</select>
					</div>
					<input class="formButton" type="button" value="保存"
						onClick="create()" />
				</form>
			</div>
		</div>
	</div>
		
	
</body>
</html>

Mybatis-generator代码自动生成

下载地址: https://github.com/mybatis/generator/releases

  1. 将mybatis-generator-core-1.3.7.zip中的jar包、 generatorConfig.xml放到项目lib中

  2. 在lib下面添加temp目录

  3. 在shop数据库新建一个名叫menu的表如下:
    在这里插入图片描述
    打开dos窗口,执行下面命令:

在这里插入图片描述
4. 然后再temp中就会生成如下,其中就是对menu表的实现
在这里插入图片描述
4. 将其复制到项目对应目录,编写controller测试
在这里插入图片描述

在地址栏输入http://locahost:8080/shop/user/list.do会出现下图,则说明运行正确。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值