基于Spring MVC + Spring + MyBatis的【密室逃脱游戏主题排行榜】

资源下载:

https://download.csdn.net/download/weixin_44893902/25706959

一、语言和环境

==========================================================================

1. 实现语言:Java语言


2. 环境要求:eclipse/myeclipse /idea、maven、mysql


3. 使用技术:Spring、SpringMVC、MyBatis、连接池和 json 包自行选择


二、实现功能

=========================================================================

密室逃脱游戏越来越受年轻人的喜欢,现在将各地密室游戏主题进行排名,评选2021年度最受玩家喜欢的密室主题。

说明:下列界面样式仅供参考,实际完成效果美观合理即可。

1、显示数据


根据图1格式,显示t_games表中所有的数据,并且按照【票数】列进行降序排序,其实【主题种类】一列在t_games表存的是数字,需结合t_gamesType表中对应id值显示出种类文字。每行数据后面有一个投票按钮可向对应主题进行投票。

数据显示页面

2、查询数据


可根据【主题名称】和【主题类型】进行数据查询。若【主题名称】为空,则按照【主题类型】查询,若【主题名称】不为空,则需要根据【主题名称】进行模糊查询并且也要结合【主题类型】查询。【主题类型】需是下拉框,且里面的选项是从数据库表t_gamesType中查询出来。如图所示。

图2 查询功能

3、投票功能


点击【操作】列中的投票按钮,弹出一个二次确认框,再次点击确定,可为对应的主题投票,投票成功后,该数据票数+1,如图所示:

图3 给对应主题投票

投票数据刷新后,若票数有变化,要按新的数据进行降序排序,如图所示:

图4 投票成功后,要更新最新排名顺序

4、新增主题


点击新增按钮,进入新增页面,主题种类中的选项需要去数据库中t_gamesType表查询,上线时间需要date控件,点击新增按钮后,将数据插入数据表中,新增主题票数默认为0,并返回主页面显示最新数据,如图所示:

图5 新增页面

三、数据库设计

==========================================================================

1、创建数据库:gamesDB。


2、创建密室排行数据表(t_games)


结构如下:

表名: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,运行访问测试项目是否正常

五、实现代码

=========================================================================

1、MySQL数据库


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’, ‘解谜’);

2、JAVA代码


gamesDB

在这里插入图片描述

(1) com.cst.controller【控制层】


① 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”;

}

}

(2) com.cst.dao【数据库访问层】


① 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

(3) com.cst.entity 【存放实体的包】


① 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();

}

}

(5) com.cst.service【与页面进行交互】


① 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;

}

}

3、JSP页面


(1) Index.jsp【设置默认打开页面】

<%@ page language=“java” contentType=“text/html; charset=utf-8”

pageEncoding=“utf-8”%>

Insert title here

<%

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” %>

Insert title here

<%

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”%>

新增密室逃脱主题

名称: 类型 请选择 恐怖 谍战< /option> 解谜 出品方: 上线时间:

(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)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你需要这些资料,⬅专栏获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值