首先创建一个基于maven的项目部署,如果有些插件没有的话可以参考mybatis入门Idea搭建
需要根据自己的文件来进行导入,并不是原本照着导入
4.0.0
org.example
tgqzyssm
war
1.0-SNAPSHOT
tgqzyssm Maven Webapp
http://maven.apache.org
UTF-8
1.8
1.8
3.7.0
5.0.2.RELEASE
3.4.5
5.1.44
5.1.2
1.3.1
2.1.1
2.4.3
2.9.1
3.2.0
1.7.13
4.12
4.0.0
1.18.2
1.1.0
2.10.0
2.9.0
1.7.1.RELEASE
2.9.3
1.2
1.1.2
8.0.47
1.3.3
5.0.2.Final
1.3.2
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-aspects
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-test
${spring.version}
org.mybatis
mybatis
${mybatis.version}
mysql
mysql-connector-java
${mysql.version}
com.github.pagehelper
pagehelper
${pagehelper.version}
org.mybatis
mybatis-spring
${mybatis.spring.version}
org.springframework
spring-context-support
${spring.version}
org.mybatis.caches
mybatis-ehcache
${mybatis.ehcache.version}
net.sf.ehcache
ehcache
${ehcache.version}
redis.clients
jedis
${redis.version}
org.springframework.data
spring-data-redis
${redis.spring.version}
com.fasterxml.jackson.core
jackson-databind
${jackson.version}
com.fasterxml.jackson.core
jackson-core
${jackson.version}
com.fasterxml.jackson.core
jackson-annotations
${jackson.version}
org.apache.commons
commons-dbcp2
${commons.dbcp2.version}
commons-pool2
org.apache.commons
org.apache.commons
commons-pool2
${commons.pool2.version}
org.springframework
spring-webmvc
${spring.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
runtime
org.apache.logging.log4j
log4j-api
${log4j2.version}
org.apache.logging.log4j
log4j-core
${log4j2.version}
org.apache.logging.log4j
log4j-slf4j-impl
${log4j2.version}
org.apache.logging.log4j
log4j-web
${log4j2.version}
runtime
com.lmax
disruptor
${log4j2.disruptor.version}
junit
junit
${junit.version}
javax.servlet
javax.servlet-api
${servlet.version}
provided
org.projectlombok
lombok
${lombok.version}
provided
jstl
jstl
${jstl.version}
taglibs
standard
${standard.version}
org.apache.tomcat
tomcat-jsp-api
${tomcat-jsp-api.version}
commons-fileupload
commons-fileupload
${commons-fileupload.version}
org.hibernate
hibernate-validator
${hibernate-validator.version}
org.apache.shiro
shiro-core
${shiro.version}
org.apache.shiro
shiro-web
${shiro.version}
org.apache.shiro
shiro-spring
${shiro.version}
tgqzyssm
src/main/java
**/*.xml
src/main/resources
*.properties
*.xml
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
${maven.compiler.source}
${maven.compiler.target}
${project.build.sourceEncoding}
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.2
mysql
mysql-connector-java
${mysql.version}
true
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-war-plugin
3.2.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
web文件原本导入就行
Archetype Created Web Application contextConfigLocation classpath:spring-context.xml org.springframework.web.context.ContextLoaderListener encodingFilter org.springframework.web.filter.CharacterEncodingFilter true encoding UTF-8 encodingFilter /* SpringMVC org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:spring-mvc.xml 1 true SpringMVC /
选择你本地的 mysql-connector-java-5.1.44.jar地址
tableName属性里面写你的数据库表名
domainObjectName属性里面写你的要生成的类名
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_ssm?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=123456
jdbc.username=root 数据库用户名
jdbc.password=123456 数据库用户名密码
新建一个日志文件,用来保存日志
/root/workspace/lucenedemo/logs
/root/workspace/lucenedemo/logs/error
/root/workspace/lucenedemo/logs/warn
%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n
helperDialect=mysql
右键
当然可以根据自己的sql表来对比
package com.tgq.model;
import lombok.ToString;
@ToString
public class StrutsClas {
private Integer cid;
private String cname;
private String cteacher;
private String pic;
public StrutsClas(Integer cid, String cname, String cteacher, String pic) {
this.cid = cid;
this.cname = cname;
this.cteacher = cteacher;
this.pic = pic;
}
public StrutsClas() {
super();
}
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public String getCteacher() {
return cteacher;
}
public void setCteacher(String cteacher) {
this.cteacher = cteacher;
}
public String getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
}
在生成好的sqlxml文件里面新添加一个
根据上面的xml配置文件生成接口方法
List
selectPager(StrutsClas strutsClas);
package com.tgq.mapper;
import com.tgq.model.StrutsClas;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface StrutsClasMapper {
int deleteByPrimaryKey(Integer cid);
int insert(StrutsClas record);
int insertSelective(StrutsClas record);
StrutsClas selectByPrimaryKey(Integer cid);
int updateByPrimaryKeySelective(StrutsClas record);
int updateByPrimaryKey(StrutsClas record);
List selectPager(StrutsClas strutsClas);
}
当然可以根据自己的学习成果来确认需不需要
package com.tgq.aspect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.tgq.utils.PageBean;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @软件包名 com.tgq.aspect
* @用户 tgq
* @create 2023-08-25 下午9:26
* @注释说明:
*/
@Aspect //代表当前类为切面类
@Component //代表该类交给spring进行管理
public class PagerAspect {
/**
* * *..*biz.*Pager(..)
* * : 任意返回值
* *..: 任意版本 不限层级
* *biz :以biz结尾的接口/类
* *Pager :以pager结尾的方法
* .. :任意参数
*
* 符合条件,就是目标或者目标方法
*
* @param args
* @return
* @throws Throwable
*/
@Around("execution(* *..*Biz.*Pager(..))")
public Object invoke(ProceedingJoinPoint args) throws Throwable {
// 获取目标方法中的所有参数
Object[] params = args.getArgs();
PageBean pageBean = null;
for (Object param : params) {
if (param instanceof PageBean) {
// 强转
pageBean = (PageBean) param;
break;
}
}
if (pageBean != null && pageBean.isPagination())
PageHelper.startPage(pageBean.getPage(), pageBean.getRows());
//执行目标方法
Object list = args.proceed(params);
if (null != pageBean && pageBean.isPagination()) {
PageInfo pageInfo = new PageInfo((List) list);
pageBean.setTotal((int) pageInfo.getTotal());
}
return list;
}
}
package com.tgq.tag;
import com.tgq.utils.PageBean;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class PageTag extends BodyTagSupport {
private PageBean pageBean;// 包含了所有分页相关的元素
public PageBean getPageBean() {
return pageBean;
}
public void setPageBean(PageBean pageBean) {
this.pageBean = pageBean;
}
@Override
public int doStartTag() throws JspException {
// 没有标签体,要输出内容
JspWriter out = pageContext.getOut();
try {
out.print(toHTML());
} catch (IOException e) {
e.printStackTrace();
}
return super.doStartTag();
}
private String toHTML() {
StringBuffer sb = new StringBuffer();
// 隐藏的form表单---这个就是上一次请求下次重新发的奥义所在
// 上一次请求的URL
sb.append("");
// 分页条
sb.append("");
// 分页执行的JS代码
sb.append("");
return sb.toString();
}
}
package com.tgq.utils;
import javax.servlet.http.HttpServletRequest;
import java.io.Serializable;
import java.util.Map;
public class PageBean implements Serializable {
private static final long serialVersionUID = 2422581023658455731L;
//页码
private int page=1;
//每页显示记录数
private int rows=10;
//总记录数
private int total=0;
//是否分页
private boolean isPagination=true;
//上一次的请求路径
private String url;
//获取所有的请求参数
private Map map;
public PageBean() {
super();
}
//设置请求参数
public void setRequest(HttpServletRequest req) {
String page=req.getParameter("page");
String rows=req.getParameter("rows");
String pagination=req.getParameter("pagination");
this.setPage(page);
this.setRows(rows);
this.setPagination(pagination);
this.url=req.getContextPath()+req.getServletPath();
this.map=req.getParameterMap();
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public void setPage(String page) {
if(null!=page&&!"".equals(page.trim()))
this.page = Integer.parseInt(page);
}
public int getRows() {
return rows;
}
public void setRows(int rows) {
this.rows = rows;
}
public void setRows(String rows) {
if(null!=rows&&!"".equals(rows.trim()))
this.rows = Integer.parseInt(rows);
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public void setTotal(String total) {
this.total = Integer.parseInt(total);
}
public boolean isPagination() {
return isPagination;
}
public void setPagination(boolean isPagination) {
this.isPagination = isPagination;
}
public void setPagination(String isPagination) {
if(null!=isPagination&&!"".equals(isPagination.trim()))
this.isPagination = Boolean.parseBoolean(isPagination);
}
/**
* 获取分页起始标记位置
* @return
*/
public int getStartIndex() {
//(当前页码-1)*显示记录数
return (this.getPage()-1)*this.rows;
}
/**
* 末页
* @return
*/
public int getMaxPage() {
int totalpage=this.total/this.rows;
if(this.total%this.rows!=0)
totalpage++;
return totalpage;
}
/**
* 下一页
* @return
*/
public int getNextPage() {
int nextPage=this.page+1;
if(this.page>=this.getMaxPage())
nextPage=this.getMaxPage();
return nextPage;
}
/**
* 上一页
* @return
*/
public int getPreivousPage() {
int previousPage=this.page-1;
if(previousPage<1)
previousPage=1;
return previousPage;
}
@Override
public String toString() {
return "PageBean [page=" + page + ", rows=" + rows + ", total=" + total + ", isPagination=" + isPagination
+ "]";
}
}
用来管理分页的标签文件
tgq 1.1 core library
tgq core
1.1
tgq
http://jsp.veryedu.cn
page
com.tgq.tag.PageTag
JSP
pageBean
true
true
package com.tgq.biz;
import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;
import java.util.List;
/**
* @软件包名 com.tgq.biz.impl
* @用户 tgq
* @create 2023-09-08 下午5:59
* @注释说明:
*/
public interface StrutsClasBiz {
int deleteByPrimaryKey(Integer cid);
int insert(StrutsClas record);
int insertSelective(StrutsClas record);
StrutsClas selectByPrimaryKey(Integer cid);
int updateByPrimaryKeySelective(StrutsClas record);
int updateByPrimaryKey(StrutsClas record);
List selectPager(StrutsClas clas, PageBean pageBean);
}
package com.tgq.biz.impl;
import com.tgq.biz.StrutsClasBiz;
import com.tgq.mapper.StrutsClasMapper;
import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @软件包名 com.tgq.biz.impl
* @用户 tgq
* @create 2023-09-08 下午8:23
* @注释说明:
*/
@Service
public class StrutsClasBizImpl implements StrutsClasBiz {
@Autowired
private StrutsClasMapper strutsClasMapper;
@Override
public int deleteByPrimaryKey(Integer cid) {
return strutsClasMapper.deleteByPrimaryKey(cid);
}
@Override
public int insert(StrutsClas record) {
return strutsClasMapper.insert(record);
}
@Override
public int insertSelective(StrutsClas record) {
return strutsClasMapper.insertSelective(record);
}
@Override
public StrutsClas selectByPrimaryKey(Integer cid) {
return strutsClasMapper.selectByPrimaryKey(cid);
}
@Override
public int updateByPrimaryKeySelective(StrutsClas record) {
return strutsClasMapper.updateByPrimaryKeySelective(record);
}
@Override
public int updateByPrimaryKey(StrutsClas record) {
return strutsClasMapper.updateByPrimaryKey(record);
}
@Override
public List selectPager(StrutsClas clas, PageBean pageBean) {
return strutsClasMapper.selectPager(clas);
}
}
添加
@Controller :需要实现接口
@RequestMapping("/sc") :里面的路径根据自己的习惯来进行@Autowired : 实例化biz层需要用到的
编写五个方法:增上改查 数据回显
package com.tgq.web;
import com.tgq.biz.StrutsClasBiz;
import com.tgq.model.StrutsClas;
import com.tgq.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @软件包名 com.tgq.web
* @用户 tgq
* @create 2023-09-08 下午8:58
* @注释说明:
*/
@Controller
@RequestMapping("/sc")
public class StrutsClasController {
@Autowired
private StrutsClasBiz strutsClasBiz;
/**
* 增加
*
* @param strutsClas
* @return
*/
@RequestMapping("/add")
public String insertSelective(StrutsClas strutsClas) {
strutsClasBiz.insertSelective(strutsClas);
return "redirect:list";
}
// @DeleteMapping("/del/{cid}")
// public String deleteByPrimaryKey(@PathVariable Integer cid) {
/**
* 删除
*
* @param strutsClas
* @return
*/
@RequestMapping("/del")
public String deleteByPrimaryKey(StrutsClas strutsClas) {
strutsClasBiz.deleteByPrimaryKey(strutsClas.getCid());
return "redirect:list";
}
/**
* 修改
*
* @param strutsClas
* @return
*/
@RequestMapping("/edit")
public String updateByPrimaryKeySelective(StrutsClas strutsClas) {
strutsClasBiz.updateByPrimaryKeySelective(strutsClas);
return "redirect:list";
}
@RequestMapping("/list")
public String list(StrutsClas strutsClas, HttpServletRequest request) {
PageBean pageBean = new PageBean();
pageBean.setRequest(request);
List strutsClas1 = strutsClasBiz.selectPager(strutsClas, pageBean);
request.setAttribute("list", strutsClas1);
request.setAttribute("pageBean", pageBean);
return "sc/list";
}
/**
* 数据回显
*
* @param strutsClas
* @param model
* @return
*/
@RequestMapping("/save")
public String save(StrutsClas strutsClas, Model model) {
if (strutsClas != null && strutsClas.getCid() != null && strutsClas.getCid() != 0) {
StrutsClas strutsClas1 = strutsClasBiz.selectByPrimaryKey(strutsClas.getCid());
model.addAttribute("s", strutsClas1);
}
return "sc/edit";
}
}
根据自己的习惯来进行一个地方的修改
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib uri="http://jsp.veryedu.cn" prefix="z" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
列表
编号
班级名
教师
Logo
操作
${b.cid }
${b.cname }
${b.cteacher }
${b.pic }
修改
删除
需要修改的地方就是一个自己表里面的属性名称和一个访问路径
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
编辑界面