校园新闻平台是以新闻宣传机构的在线信息发布需求为基础,随着数字化和信息化的快速发展,校园新闻在校园内的传播和沟通中变得越来越重要。学校需要一个有效的管理系统来整合、发布和传播校园新闻,以满足师生、校友和其他利益相关者的信息需求。借助互联网技术开发的信息化平台。在这一平台之上,不仅可以看到与常规纸质报纸相同的信息,还有助于实现新闻信息的规范化管理,为读者和采编人员查询和阅读带来便利。从目前看,通过网络获取新闻信息的人群远远大于纸质媒介用户,而且两者之间的差距还在进一步扩大。
在学校网站上,校园新闻平台是最为重要的组成部分,其主要作用有两个:一.是动态发布校内新闻或者重大项目公示;二是向社会传递学校的办学思路、教学成果、科研进展等,使学校获得更高的知名度和社会认可度。因此,研究网络环境下的电子新闻媒体,开发校园新闻平台完备校园网的重要工作之一。首先对校园新闻平台工作的实际需求进行了分析,特别是对其业务需求做了详尽的分析;而后,对校园新闻平台做了总体设计,从系统结构、总体框架、数据库等方面进行了详细阐述。在数据库设计上,阐述了该系统的概念结构设计、逻辑结构设计,描述了主要库表。从功能需求结构来看,校园新闻平台主要包括新闻浏览,论坛讨论和新闻管理三大功能模块。总之,开发一个校园新闻管理系统可以满足学校信息传播的需求,提高信息发布效率,增强用户参与度和体验,促进校园文化交流,并提供数据支持进行进一步的分析和优化。这样的系统将为学校带来更好的信息管理和校园文化建设。
对于用户
对于管理员
1.用户表(user)
字段 | 类型 | 说明 |
---|---|---|
id | varchar | 用户编号 |
password | varchar | 用户密码 |
2.管理员表(admin)
字段 | 类类型 | 说明 |
---|---|---|
id | varchar | 管理员编号 |
password | varchar | 管理员密码 |
level | int | 管理员等级 |
注:管理员有四个身份:总管理,一级审核,二级审核,写手。每个身份登录可以看到不同的界面,在数据库的level中分别用1,2,3,4标识
3.学校新闻表(schoolnews)
字段 | 类型 | 说明 |
---|---|---|
id | int | 新闻编号 |
writer | varchar | 写手编号 |
title | varchar | 新闻标题 |
word | varchar | 新闻内容 |
time | datetime | 创建时间 |
type | varchar | 新闻类型 |
emo | int | 审核人编号 |
wlevel | int | 写手等级 |
4.论坛表(news)
字段 | 类型 | 说明 |
---|---|---|
id | int | 编号 |
user | varchar | 发表人 |
title | varchar | 题目 |
news | varchar | 正文 |
type | varchar | 类型 |
time | datetime | 发表时间 |
5.评论表(log)
字段 | 类型 | 说明 |
---|---|---|
id | int | 评论编号 |
lzid | int | 论坛问题编号 |
loguser | varchar | 评论者编号 |
title | varchar | 评论标题 |
log | varchar | 评论内容 |
time | datetime | 评论时间 |
开发工具:
技术栈:
1.新建项目
2.添加依赖
1.配置application.yaml
#关闭模版引擎缓存
spring:
thymeleaf:
cache: false
#配置文件的位置
messages:
basename: i18n.login
#以下为数据库mybatis配置
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf-8
# 如果时区异常可以加入&severTimezone=UTC
driver-class-name: com.mysql.jdbc.Driver
mvc:
format:
date: yyyy-MM-dd
#mybatis配置
mybatis:
type-aliases-package: com.asuka.hellospring.pojo
mapper-locations: classpath:mybatis/mapper/*.xml
2.给pom.xml添加依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.21version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.3version>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
<version>1.4.3version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<optional>trueoptional>
dependency>
1.创建实体(Schoolnews)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Schoolnews {
int id;
String writer;
String title;
String word;
String type;
int emo;
int wlevel;
@TableField(fill= FieldFill.INSERT)
Date time;
}
2.配置mapper
@Mapper
public interface SchoolnewsMapper extends BaseMapper<Schoolnews> {
}
3.配置控制器
根据标签选择新闻(回显全部新闻)
——SnewsController
@RequestMapping("/snews")
public String newjud(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "7", value = "pageSize") Integer pageSize) {
//实现倒序输出(校内新闻)
QueryWrapper<Schoolnews> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("id");//倒序
newsQueryWrapper.eq("emo", 3);
newsQueryWrapper.eq("type", "校内新闻");
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(newsQueryWrapper);
model.addAttribute("sdutcmnews", schoolnews);
//实现倒序输出(院系速递)
QueryWrapper<Schoolnews> wrapperb = new QueryWrapper<>();
wrapperb.orderByDesc("id");
wrapperb.eq("emo", 3);
wrapperb.eq("type", "院系速递");
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnewsb = schoolnewsMapper.selectList(wrapperb);
model.addAttribute("yuanxinews", schoolnewsb);
//实现倒序输出(通知公告)
QueryWrapper<Schoolnews> wrapperc = new QueryWrapper<>();
wrapperc.orderByDesc("id");
wrapperc.eq("emo", 3);
wrapperc.eq("type", "通知公告");
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnewsc = schoolnewsMapper.selectList(wrapperc);
model.addAttribute("tongzhinews", schoolnewsc);
//实现倒序输出(电子校报)
QueryWrapper<Schoolnews> wrapperd = new QueryWrapper<>();
wrapperd.orderByDesc("id");
wrapperd.eq("emo", 3);
wrapperd.eq("type", "电子校报");
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnewsd = schoolnewsMapper.selectList(wrapperd);
model.addAttribute("dianzinews", schoolnewsd);
//实现倒序输出(媒体)
QueryWrapper<Schoolnews> wrappere = new QueryWrapper<>();
wrappere.orderByDesc("id");
wrappere.eq("emo", 3);
wrappere.eq("type", "媒体");
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnewse = schoolnewsMapper.selectList(wrappere);
model.addAttribute("meitinews", schoolnewse);
return "/snews/index";
}
点击查看具体新闻
——SnewsController
@GetMapping("/indnewss/{id}")
public String indpageshouw(@PathVariable("id") String id, Model model) {
Schoolnews schoolnews = schoolnewsMapper.selectById(id);
model.addAttribute("news", schoolnews);
return "snews/newshows";
}
查看某类全部新闻
——SnewsController
@GetMapping("/newlis/{type}")
public String newliss(@PathVariable("type") String type, Model model) {
QueryWrapper<Schoolnews> new233 = new QueryWrapper<>();
new233.eq("type", type);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(new233);
model.addAttribute("type", type);
model.addAttribute("news", schoolnews);
return "snews/newslists";
}
创建实体
①.帖子(News)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class News {
int id;
String user;
String title;
String news;
String type;
@TableField(fill= FieldFill.INSERT)
Date time;
}
②.用户(User)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
String id;
String password;
}
③.评论(Log)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Log {
int id;
int lzid;
String loguser;
String title;
String log;
@TableField(fill= FieldFill.INSERT)
Date time;
}
④.管理员(Admin)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Admin {
String id;
String password;
int level;
}
配置mapper
@Mapper
public interface NewsMapper extends BaseMapper<News> {
}
@Mapper
public interface LogMapper extends BaseMapper<Log> {
}
@Mapper
public interface AdminMapper extends BaseMapper<Admin> {
}
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
——LoginController
用户或管理员登录
不同的角色跳转的页面不同——LoginController
@RequestMapping("/login")
public String login(@RequestParam("username") String username,
@RequestParam("password") String password,
Model model
,HttpSession session
) {
//登录实现
User user = userMapper.selectById(username);
if(username.equals("admin")&&password.equals("123")){//管理员登录
session.setAttribute("loginUser", username);
return "redirect:/userlist";
}else {//普通用户登录
if (user != null) {
if (password.equals(user.getPassword())) {
session.setAttribute("loginUser", username);
//登录成功
return "redirect:/Main";
} else {
model.addAttribute("msg", "密码错误");
return "loginl";
}
} else {
model.addAttribute("msg", "用户不存在");
return "loginl";
}
}
用户或管理员注册
@RequestMapping("/rege")
public String save (User user,Model model){
//添加的操作
User user233 = userMapper.selectById(user.getId());
if (user.getId().equals("admin")) {
model.addAttribute("msg", "不准注册管理员帐号");
return "register";
} else {
if (user233 == null) {
userMapper.insert(user); //调用底层业务保存用户
model.addAttribute("msg", "注册成功,请返回登录");
return "loginl";
} else {
model.addAttribute("msg", "用户已存在");
return "register";
}
}
}
用户或管理员登录
@RequestMapping("/user/logout")
public String logout(HttpSession session){
session.invalidate();
return "redirect:/login.html";
}
查看不同板块帖子
以综合板块和匿名板块为例,综合板块除了匿名板块包括日常,学习,围炉夜话和询问板块
——NewsController
@RequestMapping("/zonghe")
public String zonghe(Model model
, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum
, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
//实现按照时间倒序输出
QueryWrapper<News> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("time");
newsQueryWrapper.ne("type","匿名");
//分页
PageHelper.startPage(pageNum, pageSize);
List<News> news = newsMapper.selectList(newsQueryWrapper);
PageInfo<News> newsPageInfo = new PageInfo<>(news);
model.addAttribute("news",news);
model.addAttribute("pageInfo", newsPageInfo);
return "News/zonghe";
}
匿名板块
——NewsController
@RequestMapping("/niming")
public String niming(Model model
, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum
, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
//实现倒序输出
QueryWrapper<News> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("time");
newsQueryWrapper.eq("type","匿名");
//分页
PageHelper.startPage(pageNum, pageSize);
List<News> news = newsMapper.selectList(newsQueryWrapper);
PageInfo<News> newsPageInfo = new PageInfo<>(news);
model.addAttribute("news",news);
model.addAttribute("pageInfo", newsPageInfo);
return "News/niming";
}
查看帖子详情
——NewsController
@GetMapping("/news/{id}")
public String newsshouw(@PathVariable("id")String id,Model model){
News newz = newsMapper.selectById(id);
HashMap<String, Object> map = new HashMap<>();
map.put("lzid",id);
List<Log> logs = logMapper.selectByMap(map);
model.addAttribute("logs",logs);
model.addAttribute("news",newz);
return "News/zshow";
}
跟帖评论
——NewsController
@RequestMapping("/newslog")
public String logsub(Log log){
if(log.getTitle().isEmpty() || log.getLog().isEmpty()){
return "redirect:/news/"+log.getLzid();
}else {
logMapper.insert(log);
return "redirect:/news/"+log.getLzid();
}
}
发布帖子
——NewsController
@RequestMapping("/newssubmit")
public String newssub(News news,Model model){
System.out.println(news);
if (news.getTitle().isEmpty()){
model.addAttribute("msg","标题写点东西再发布!");
return "fail";
}else {
newsMapper.insert(news);
model.addAttribute("msg","发帖成功");
return "succ";
}
}
用户改自己密码
——UserController
@GetMapping("/useru/{id}")
public String editu(@PathVariable("id")String id,Model model){
//查出原先的数据
User user = userMapper.selectById(id);
model.addAttribute("user",user);
return "user/editu";
}
1.查找用户
——UserController
@RequestMapping("/quary")
public String qula(String name,Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
QueryWrapper<User> objectQueryWrapper = new QueryWrapper<>();
objectQueryWrapper.like("id",name);
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectList(objectQueryWrapper);
PageInfo<User> pageInfo = new PageInfo<>(users);
model.addAttribute("user",users);
model.addAttribute("name",name);
model.addAttribute("pageInfo", pageInfo);
return "user/userlista";
}
2.显示用户列表
——UserController
@RequestMapping("/userlist")
public String userlist(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<User> users = userMapper.selectList(null);
PageInfo<User> pageInfo = new PageInfo<>(users);
model.addAttribute("user",users);
model.addAttribute("pageInfo", pageInfo);
return "user/userlist";
}
3.维护用户信息
——UserController
@GetMapping("/user/{id}")
public String edit(@PathVariable("id")String id,Model model){//回显用户信息
//查出原先的数据
User user = userMapper.selectById(id);
model.addAttribute("user",user);
return "user/edit";
}
@PostMapping("/edituser")
public String edit(User user){//修改信息
userMapper.updateById(user);
return "redirect:/userlist";
}
4.删除用户
——UserController
@GetMapping("/userdel/{id}")
public String del(@PathVariable("id")String id){
userMapper.deleteById(id);
return "redirect:/userlist";
}
1.查找帖子
——NewsController
@RequestMapping("/quarynew")
public String qula(String name,Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
QueryWrapper<News> objectQueryWrapper = new QueryWrapper<>();
objectQueryWrapper.like("title",name);
PageHelper.startPage(pageNum, pageSize);
List<News> news = newsMapper.selectList(objectQueryWrapper);
PageInfo<News> pageInfo = new PageInfo<>(news);
model.addAttribute("news",news);
model.addAttribute("name",name);
model.addAttribute("pageInfo", pageInfo);
return "user/newsb";
}
2.查看帖子列表
——NewsController
@RequestMapping("/newsa")
public String newsa(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<News> news = newsMapper.selectList(null);
PageInfo<News> pageInfo = new PageInfo<>(news);
model.addAttribute("news",news);
model.addAttribute("pageInfo", pageInfo);
return "user/newsa";
}
3.查看具体帖子以及评论
——NewsController
@GetMapping("/newsa/{id}")
public String newsashow(@PathVariable("id")String id,Model model){
News newz = newsMapper.selectById(id);
HashMap map = new HashMap<>();
map.put("lzid",id);
List logs = logMapper.selectByMap(map);
model.addAttribute("logs",logs);
model.addAttribute("news",newz);
return "user/newsashow";
}
4.删除帖子
——NewsController
@GetMapping("/newsadel/{id}")
public String del(@PathVariable("id")String id){
newsMapper.deleteById(id);
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("lzid",id);
logMapper.deleteByMap(objectObjectHashMap);
return "redirect:/newsa";
}
管理员有四个身份:总管理,一级审核,二级审核,写手。每个身份登录可以看到不同的界面。
1.提交新闻
总管理,一级审核,二级审核,写手都可以发布新闻
——SchoolnewsController
@RequestMapping("/snewspost")
public String snewpost(Schoolnews schoolnews,Model model){
if(schoolnews.getTitle().isEmpty() || schoolnews.getWord().isEmpty()){
model.addAttribute("msg","请保证标题或内容不为空。");
return "admin/postnew";
}else {
schoolnewsMapper.insert(schoolnews);
model.addAttribute("msg","发布成功,您的投稿已进入审核队列。");
return "admin/postnew";
}
}
2.一级审核
只能审核写手写的新闻
——SchoolnewsController
@RequestMapping("/newjud")
public String newjud(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
QueryWrapper<Schoolnews> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("id");
newsQueryWrapper.gt("wlevel",3);//大于
newsQueryWrapper.eq("emo",1);
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(newsQueryWrapper);
PageInfo<Schoolnews> pageInfo = new PageInfo<>(schoolnews);
model.addAttribute("news",schoolnews);
model.addAttribute("pageInfo", pageInfo);
return "admin/juda";
}
3.二级审核
能审核写手和一级审核写的新闻
——SchoolnewsController
@RequestMapping("/newjudb")
public String newjudb(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
//实现倒序输出
QueryWrapper<Schoolnews> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("id");
//选择等级为2的
newsQueryWrapper.gt("wlevel",2);
newsQueryWrapper.eq("emo",1);
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(newsQueryWrapper);
PageInfo<Schoolnews> pageInfo = new PageInfo<>(schoolnews);
model.addAttribute("news",schoolnews);
model.addAttribute("pageInfo", pageInfo);
return "admin/judb";
}
4.三级审核
能审核所有人写的新闻
——SchoolnewsController
@RequestMapping("/newjudd")
public String newjudc(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
//实现倒序输出
QueryWrapper<Schoolnews> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("id");
//选择等级为2的
newsQueryWrapper.gt("wlevel",1);
newsQueryWrapper.eq("emo",1);
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(newsQueryWrapper);
PageInfo<Schoolnews> pageInfo = new PageInfo<>(schoolnews);
model.addAttribute("news",schoolnews);
model.addAttribute("pageInfo", pageInfo);
return "admin/judd";
}
显示管理员列表
——AdminController
@RequestMapping("/adlist")
public String adlist(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<Admin> users = adminMapper.selectList(null);
PageInfo<Admin> pageInfo = new PageInfo<>(users);
model.addAttribute("user",users);
model.addAttribute("pageInfo", pageInfo);
return "admin/adlist";
}
添加管理员
——AdminController
//前往增加管理员页面
@RequestMapping("/addad")
public String savead(){
return "admin/addadmin";
}
//接收添加管理员请求
@PostMapping("/addad")
public String save (Admin admin,Model model){
//添加的操作
Admin ad233 = adminMapper.selectById(admin.getId());
if (ad233 != null){
model.addAttribute("msg","该昵称已存在");
return "admin/addadmin";
}else {
if (admin.getId().isEmpty() || admin.getPassword().isEmpty()){
model.addAttribute("msg","昵称和密码不为空");
return "admin/addadmin";
}else {
System.out.println("save-->"+admin);
adminMapper.insert(admin); //调用底层业务保存员工信息
return "redirect:/adlist";
}
}
}
维护管理员
——AdminController
//修改管理员时填的默认值(数据回显) 跳往admin/editad.html
@GetMapping("/aded/{id}")
public String edit(@PathVariable("id") String id, Model model){
//先查出原来的数据
Admin admin = adminMapper.selectById(id);
model.addAttribute("user",admin);
return "admin/editad";
}
@PostMapping("/edad")
public String edit(Admin admin){
adminMapper.updateById(admin);
return "redirect:/adlist";
}
删除管理员
——AdminController
@GetMapping("/delad/{id}")
public String del(@PathVariable("id")String id){
adminMapper.deleteById(id);
return "redirect:/adlist";
}
显示论坛列表
——AdminController
@RequestMapping("/newslist")
public String newsa(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
PageHelper.startPage(pageNum, pageSize);
List<News> news = newsMapper.selectList(null);
PageInfo<News> pageInfo = new PageInfo<>(news);
model.addAttribute("news",news);
model.addAttribute("pageInfo", pageInfo);
return "admin/newslist";
}
查看具体帖子
——AdminController
@GetMapping("/newslist/{id}")
public String newsashow(@PathVariable("id")String id, Model model){
News newz = newsMapper.selectById(id);
HashMap<String, Object> map = new HashMap<>();
map.put("lzid",id);
List<Log> logs = logMapper.selectByMap(map);
model.addAttribute("logs",logs);
model.addAttribute("news",newz);
return "admin/adnewsshow";
}
删除帖子
——AdminController
@GetMapping("/newsqdel/{id}")
public String delnews(@PathVariable("id")String id){
newsMapper.deleteById(id);
HashMap<String, Object> objectObjectHashMap = new HashMap<>();
objectObjectHashMap.put("lzid",id);
logMapper.deleteByMap(objectObjectHashMap);
return "redirect:/newslist";
}
查看新闻列表
——SchoolnewsController
@RequestMapping("/listed")
public String judlists(Model model, @RequestParam(defaultValue = "1", value = "pageNum") Integer pageNum, @RequestParam(defaultValue = "10", value = "pageSize") Integer pageSize){
//实现倒序输出
QueryWrapper<Schoolnews> newsQueryWrapper = new QueryWrapper<>();
newsQueryWrapper.orderByDesc("id");
//选择等级为3的
newsQueryWrapper.ge("emo",1);//大于等于
PageHelper.startPage(pageNum, pageSize);
List<Schoolnews> schoolnews = schoolnewsMapper.selectList(newsQueryWrapper);
PageInfo<Schoolnews> pageInfo = new PageInfo<>(schoolnews);
model.addAttribute("news",schoolnews);
model.addAttribute("pageInfo", pageInfo);
return "admin/judc";
}
查看具体新闻
——SchoolnewsController
@GetMapping("/pageshowc/{id}")
public String pageshouwc(@PathVariable("id")String id, Model model){
Schoolnews schoolnews = schoolnewsMapper.selectById(id);
model.addAttribute("news",schoolnews);
return "admin/pageshowjudc";
}
删除新闻
——SchoolnewsController
@GetMapping("/delsnews/{id}")
public String nessdel(@PathVariable("id")String id){
schoolnewsMapper.deleteById(id);
return "redirect:/admin";
}
Thymeleaf 介绍
Thymeleaf 是适用于 Web 和独立环境的现代服务器端 Java 模板引擎。Thymeleaf 的主要目标是为您的开发工作流程带来优雅的自然模板 - 可以在浏览器中正确显示的HTML,也可以用作静态原型,从而在开发团队中实现更强大的协作。
Thymeleaf 使用
1.导入依赖
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-thymeleafartifactId>
dependency>
2.在 html 页面上如果要使用 thymeleaf 模板
<html xmlns:th="http://www.thymeleaf.org">
3.thymeleaf 相关配置
因为 Thymeleaf 中已经有默认的配置了,我们不需要再对其做过多的配置,有一个需要注意一下,Thymeleaf 默认是开启页面缓存的,所以在开发的时候,需要关闭这个页面缓存,配置如下。
spring:
thymeleaf:
cache: false #关闭缓存
4.在 thymeleaf 模板中,使用 th:object="${}"
来获取对象信息,然后在表单里面可以有三种方式来获取对象属性。
使用 th:value="*{属性名}"
使用 th:value="${对象.属性名}",对象指的是上面使用 th:object 获取的对象
使用 th:value="${对象.get方法}",对象指的是上面使用 th:object 获取的对象
5.thymeleaf 处理list
@GetMapping("/getList")
public String getList(Model model) {
Blogger blogger1 = new Blogger(1L, "好富帅", "123456");
Blogger blogger2 = new Blogger(2L, "达人课", "123456");
List<Blogger> list = new ArrayList<>();
list.add(blogger1);
list.add(blogger2);
model.addAttribute("list", list);
return "list";
}
DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
<meta charset="UTF-8">
<title>博主信息title>
head>
<body>
<form action="" th:each="blogger : ${list}" >
用户编号:<input name="id" th:value="${blogger.id}"/><br>
用户姓名:<input type="text" name="password" th:value="${blogger.name}"/><br>
登录密码:<input type="text" name="username" th:value="${blogger.getPass()}"/>
form>
body>
html>
可以看出,其实和处理单个对象信息差不多,Thymeleaf 使用 th:each 进行遍历,${} 取 model 中传过来的参数,然后自定义 list 中取出来的每个对象,这里定义为 blogger。表单里面可以直接使用 ${对象.属性名} 来获取 list 中对象的属性值,也可以使用 ${对象.get方法} 来获取,这点和上面处理对象信息是一样的,但是不能使用 *{属性名} 来获取对象中的属性,thymeleaf 模板获取不到。
概述:
MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
MybatisPlus特性:
1.创建数据库并创建对应的实体类
2.导入依赖
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>8.0.16version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<optional>trueoptional>
dependency>
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-boot-starterartifactId>
<version>3.4.0version>
dependency>
<dependency>
<groupId>com.h2databasegroupId>
<artifactId>h2artifactId>
<scope>runtimescope>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
<exclusions>
<exclusion>
<groupId>org.junit.vintagegroupId>
<artifactId>junit-vintage-engineartifactId>
exclusion>
exclusions>
dependency>
dependencies>
3.配置配置文件
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.jdbc.Driver
或
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/hello?useUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
4.建立mapper并在主启动类上添加包扫描注解
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
5.配置日志输出
#配置日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
代码生成器简介
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
代码生成器配置
添加依赖
<dependency>
<groupId>com.baomidougroupId>
<artifactId>mybatis-plus-generatorartifactId>
<version>3.4.0version>
dependency>
<dependency>
<groupId>org.apache.velocitygroupId>
<artifactId>velocity-engine-coreartifactId>
<version>2.2version>
dependency>
编写配置
public class CodeGenerator {
public static void main(String[] args) {
//创建代码生成器
AutoGenerator mpg = new AutoGenerator();
//全局配置
GlobalConfig gc = new GlobalConfig();
//获取当前系统目录
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("dong"); //生成作者注释
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(false);//开启Swagger2模式
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/mp?serverTimezone=GMT%2B8"); //url
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); //数据库驱动
dsc.setUsername("root"); //数据库账号
dsc.setPassword("root"); //数据库密码
dsc.setDbType(DbType.MYSQL); //数据库类型
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("test"); //模块名,可以不设置
pc.setParent("cn.dong"); //放在哪个包下
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("employee");//对哪一张表生成代码
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
strategy.setLogicDeleteFieldName("deleted"); //逻辑删除字段设置
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
//执行
mpg.execute();
}
}
项目首页
新闻主页
新闻页面
查看所有新闻
论坛登录
论坛注册
论坛主页(用户登录)
查看论坛
发表问题
追加评论
用户自行修改密码
论坛主页(管理员登录)
新闻管理
后台管理登录
写手页面
一级审核
二级审核
总管理
管理员列表
维护管理员
论坛维护
已发布主页新闻维护页面