资源下载:
==========================================================================
2. 环境要求:eclipse/myeclipse /idea、maven、mysql
3. 使用技术:Spring、SpringMVC、MyBatis、连接池和 json 包自行选择
=========================================================================
密室逃脱游戏越来越受年轻人的喜欢,现在将各地密室游戏主题进行排名,评选2021年度最受玩家喜欢的密室主题。
说明:下列界面样式仅供参考,实际完成效果美观合理即可。
根据图1格式,显示t_games表中所有的数据,并且按照【票数】列进行降序排序,其实【主题种类】一列在t_games表存的是数字,需结合t_gamesType表中对应id值显示出种类文字。每行数据后面有一个投票按钮可向对应主题进行投票。
可根据【主题名称】和【主题类型】进行数据查询。若【主题名称】为空,则按照【主题类型】查询,若【主题名称】不为空,则需要根据【主题名称】进行模糊查询并且也要结合【主题类型】查询。【主题类型】需是下拉框,且里面的选项是从数据库表t_gamesType中查询出来。如图所示。
点击【操作】列中的投票按钮,弹出一个二次确认框,再次点击确定,可为对应的主题投票,投票成功后,该数据票数+1,如图所示:
投票数据刷新后,若票数有变化,要按新的数据进行降序排序,如图所示:
点击新增按钮,进入新增页面,主题种类中的选项需要去数据库中t_gamesType表查询,上线时间需要date控件,点击新增按钮后,将数据插入数据表中,新增主题票数默认为0,并返回主页面显示最新数据,如图所示:
==========================================================================
结构如下:
表名
:t_ games
实体名称
:密室排行数据表
主键
:id
| 序号 | 字段名称 | 字段说明 | 类型 | 位数 | 属性 | 备注 |
| — | — | — | — | — | — | — |
| 1 | id | 主键 | int | 11 | 非空 | id主键列,自增1 |
| 2 | gamesName | 密室主题名 | varchar | 50 | 非空 | |
| 3 | gamesType | 密室类型编号 | int | 11 | 非空 | 外键,t_gamesType表中id |
| 4 | producers | 出品方 | Varchar | 50 | 非空 | |
| 5 | uptime | 上线时间 | date | | 非空 | |
| 6 | votes | 票数 | int | 11 | 非空 | 默认值为0 |
=========================================================================
1、使用MySql创建数据库,创建对应的2张表,按照要求插入数据。
t_games表
t_gamesType表
2、使用开发工具创建项目,使用maven添加spring、springMVC、mybatis、连接池等相关依赖坐标。
3、完成MyBatis持久层功能操作,分别针对2个表完成对应的功能编写。
4、完成业务逻辑层接口、实现类的功能实现。
5、完成控制器对应的功能编写
6、创建界面分别和控制器进行交互实现相应的功能
7 斜体样式、部署项目到Tomcat,运行访问测试项目是否正常
=========================================================================
gamesdb.sql
/*
Navicat MySQL Data Transfer
Date: 2021-07-27 20:29:20
*/
SET FOREIGN_KEY_CHECKS=0;
– Table structure for t_games
DROP TABLE IF EXISTS t_games
;
CREATE TABLE t_games
(
id
int(11) NOT NULL AUTO_INCREMENT,
games_name
varchar(255) DEFAULT NULL,
games_type
int(11) DEFAULT NULL,
producers
varchar(255) DEFAULT NULL,
uptime
varchar(255) DEFAULT NULL,
votes
int(11) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
– Records of t_games
INSERT INTO t_games
VALUES (‘1’, ‘黑暗侵袭’, ‘1’, ‘911地下城’, ‘2019-07-01’, ‘00000005400’);
INSERT INTO t_games
VALUES (‘2’, ‘寂静之地’, ‘1’, ‘911地下城’, ‘2021-04-10’, ‘00000003421’);
INSERT INTO t_games
VALUES (‘3’, ‘潜伏’, ‘2’, ‘长沙支眼文化有限公司’, ‘2020-06-20’, ‘00000002339’);
INSERT INTO t_games
VALUES (‘4’, ‘复活石’, ‘3’, ‘对角巷’, ‘2020-08-30’, ‘00000002340’);
INSERT INTO t_games
VALUES (‘5’, ‘西游记’, ‘1’, ‘文化传媒’, ‘2021-07-27’, ‘00000000007’);
– Table structure for t_gamestype
DROP TABLE IF EXISTS t_gamestype
;
CREATE TABLE t_gamestype
(
id
int(11) NOT NULL AUTO_INCREMENT,
type_name
varchar(50) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
– Records of t_gamestype
INSERT INTO t_gamestype
VALUES (‘1’, ‘恐怖’);
INSERT INTO t_gamestype
VALUES (‘2’, ‘谍战’);
INSERT INTO t_gamestype
VALUES (‘3’, ‘解谜’);
gamesDB
① TGamesController,java
package com.cst.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.cst.entity.TGames;
import com.cst.service.TGamesService;
@Controller
public class TGamesController {
@Resource
TGamesService tGamesService;
//查询所有数据,模糊查询
@RequestMapping(“/tGamesList”)
public String accountList(Model model,String keyword,String type){
List selectAll = tGamesService.selectAll(keyword,type);
model.addAttribute(“selectAll”,selectAll);
return “games”;
}
//进入添加的方法
@RequestMapping(“/addGames”)
public String addAccount() {
return “addGames”;
}
//执行添加的操作
@RequestMapping(“/addGamesDo”)
public String addAccountDo(TGames games) {
games.setVotes(0);
int users = tGamesService.insert(games);
if (users>0) {
return “redirect:/tGamesList.do”;
}else {
return “forward:/addGames.do”;
}
}
@RequestMapping(“/updateGamesDo”)
public String updateGamesDo(Integer id,Integer votes) {
TGames games=new TGames();
int votes1=votes+1;
games.setId(id);
games.setVotes(votes1);
tGamesService.updateByPrimaryKey(games);
return “redirect:/tGamesList.do”;
}
}
① TGamesMapper.java
package com.cst.dao;
import com.cst.entity.TGames;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface TGamesMapper {
int deleteByPrimaryKey(Integer id);
int insert(TGames record);
TGames selectByPrimaryKey(Integer id);
List selectAll(@Param(“keyword”)String keyword,@Param(“type”)String type);
int updateByPrimaryKey(TGames record);
}
② TGamestypeMapper.java
package com.cst.dao;
import com.cst.entity.TGamestype;
import java.util.List;
public interface TGamestypeMapper {
int deleteByPrimaryKey(Integer id);
int insert(TGamestype record);
TGamestype selectByPrimaryKey(Integer id);
List selectAll();
int updateByPrimaryKey(TGamestype record);
}
③ TGamesMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>delete from t_games
where id = #{id,jdbcType=INTEGER}
insert into t_games (id, games_name, games_type,
producers, uptime, votes
)
values (#{id,jdbcType=INTEGER}, #{gamesName,jdbcType=VARCHAR}, #{gamesType,jdbcType=INTEGER},
#{producers,jdbcType=VARCHAR}, #{uptime,jdbcType=VARCHAR}, #{votes,jdbcType=INTEGER}
)
update t_games
set votes = #{votes,jdbcType=INTEGER}
where id = #{id,jdbcType=INTEGER}
select id, games_name, games_type, producers, uptime, votes
from t_games
where id = #{id,jdbcType=INTEGER}
select g.id, games_name, type_name, producers, uptime, votes
from t_games g,t_gamestype t where g.games_type=t.id
and games_name like concat(‘%’, #{keyword}, ‘%’)
and type_name=#{type}
order by votes desc
④ TGamestypeMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>delete from t_gamestype
where id = #{id,jdbcType=INTEGER}
insert into t_gamestype (id, type_name)
values (#{id,jdbcType=INTEGER}, #{typeName,jdbcType=VARCHAR})
update t_gamestype
set type_name = #{typeName,jdbcType=VARCHAR}
where id = #{id,jdbcType=INTEGER}
select id, type_name
from t_gamestype
where id = #{id,jdbcType=INTEGER}
select id, type_name
from t_gamestype
① TGames.java
package com.cst.entity;
public class TGames {
private Integer id;
private String gamesName;
private Integer gamesType;
private String producers;
private String uptime;
private Integer votes;
private String typeName;
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName == null ? null : typeName.trim();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getGamesName() {
return gamesName;
}
public void setGamesName(String gamesName) {
this.gamesName = gamesName == null ? null : gamesName.trim();
}
public Integer getGamesType() {
return gamesType;
}
public void setGamesType(Integer gamesType) {
this.gamesType = gamesType;
}
public String getProducers() {
return producers;
}
public void setProducers(String producers) {
this.producers = producers == null ? null : producers.trim();
}
public String getUptime() {
return uptime;
}
public void setUptime(String uptime) {
this.uptime = uptime == null ? null : uptime.trim();
}
public Integer getVotes() {
return votes;
}
public void setVotes(Integer votes) {
this.votes = votes;
}
}
② TGamestype.java
package com.cst.entity;
public class TGamestype {
private Integer id;
private String typeName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getTypeName() {
return typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName == null ? null : typeName.trim();
}
}
(4) com.cst.generator【实体类自动生成包】
① Generator.java
package genter;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.exception.InvalidConfigurationException;
import org.mybatis.generator.exception.XMLParserException;
import org.mybatis.generator.internal.DefaultShellCallback;
public class Generator {
/*
- targetRuntime=“MyBatis3Simple”, 不生成Example
*/
public void generateMyBatis() {
//MBG执行过程中的警告信息
List warnings = new ArrayList();
//当生成的代码重复时,覆盖原代码
boolean overwrite = true ;
String generatorFile = “/generatorConfig.xml”;
//String generatorFile = “/generator/generatorConfigExample.xml”;
//读取MBG配置文件
InputStream is = Generator.class.getResourceAsStream(generatorFile);
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config;
try {
config = cp.parseConfiguration(is);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
//创建MBG
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
//执行生成代码
myBatisGenerator.generate(null);
} catch (IOException e) {
e.printStackTrace();
} catch (XMLParserException e) {
e.printStackTrace();
} catch (InvalidConfigurationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (String warning : warnings) {
System.out.println(warning);
}
}
public static void main(String[] args) {
Generator generator = new Generator();
generator.generateMyBatis();
}
}
① TGamesService.java
package com.cst.service;
import java.util.List;
import com.cst.entity.TGames;
import com.cst.entity.TGamestype;
public interface TGamesService {
int insert(TGames record);
List selectAll(String keyword,String type);
int updateByPrimaryKey(TGames record);
}
(6) com.cst.service.imp【service的实现类】
① TGServiceImpl.java
package com.cst.service.imp;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.cst.dao.TGamesMapper;
import com.cst.entity.TGames;
import com.cst.entity.TGamestype;
import com.cst.service.TGamesService;
@Service
public class TGServiceImpl implements TGamesService{
@Resource
TGamesMapper tgamesMapper;
@Override
public List selectAll(String keyword,String type) {
// TODO Auto-generated method stub
List tGamesList=tgamesMapper.selectAll(keyword,type);
return tGamesList;
}
@Override
public int insert(TGames record) {
// TODO Auto-generated method stub
int add=tgamesMapper.insert(record);
return add;
}
@Override
public int updateByPrimaryKey(TGames record) {
// TODO Auto-generated method stub
int updateByPrimaryKey = tgamesMapper.updateByPrimaryKey(record);
return updateByPrimaryKey;
}
}
(1) Index.jsp【设置默认打开页面】
<%@ page language=“java” contentType=“text/html; charset=utf-8”
pageEncoding=“utf-8”%>
<%
String path=request.getContextPath();
String basePath = request.getScheme()+“😕/”+request.getServerName()+“:”+request.getServerPort()+path;
%>
(2) games.jsp【主页面】
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8”%>
<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+“😕/”+request.getServerName()+“:”+request.getServerPort()+path;
%>
2021年密室逃脱主题排行榜
搜索主题名称:
类型:
请选择 恐怖 谍战 解谜<c:forEach items=“${selectAll}” var=“games”>
${games.id}
${games.gamesName}
${games.typeName}
${games.producers}
${games.uptime}
${games.votes}
</c:forEach>
共计${selectAll.size()}条数据
(3) addGames.jsp【添加页面】
<%@ page language=“java” contentType=“text/html; charset=UTF-8”
pageEncoding=“UTF-8”%>
新增密室逃脱主题
(4) web.xml【xml配置】
<?xml version="1.0" encoding="UTF-8"?>gamesDB
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/spring-mvc.xml
1
springmvc
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取
lcome-file>index.jsp
default.html
default.htm
default.jsp
contextConfigLocation
classpath:spring/applicationContext-*.xml
org.springframework.web.context.ContextLoaderListener
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:spring/spring-mvc.xml
1
springmvc
*.do
CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
CharacterEncodingFilter
/*
最后
小编这些年深知大多数初中级工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此我收集整理了一份《2024年Java全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-x1vi7aFz-1719682070573)]
[外链图片转存中…(img-DyvUUUM6-1719682070575)]
[外链图片转存中…(img-4whAMmG6-1719682070575)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你需要这些资料,⬅专栏获取