基于javaweb+mysql的springboot+mybatis新闻管理系统(java+html+springboot+javabean+mysql+tomcat)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
用户:登录、注册、新闻增删改
技术框架
HTML CSS JavaScript jQuery Bootstrap thymeleaf SpringBoot SpringMVC MyBatis
基于javaweb+mysql的SpringBoot+MyBatis新闻管理系统(java+html+springboot+javabean+mysql+tomcat)
}
@PostMapping("/updateNews")
public String updateNews(News news, @RequestParam("uploadfile") List<MultipartFile> uploadfile,
HttpServletRequest request) {
// 判断所上传文件是否存在
if (!uploadfile.isEmpty() && uploadfile.size() > 0) {
// 循环输出上传的文件
for (MultipartFile file : uploadfile) {
// 获取上传文件的原始名称
String originalFilename = file.getOriginalFilename();
// 设置上传文件的保存地址目录
String dirPath = System.getProperty("user.dir") + "/src/main/resources/static/upload/";
File filePath = new File(dirPath);
// 如果保存文件的地址不存在,就先创建目录
if (!filePath.exists()) {
filePath.mkdirs();
}
// 使用UUID重新命名上传的文件名称(上传人_uuid_原始文件名称)
String newFilename = UUID.randomUUID() + "_" + originalFilename;
String imgurl = "/upload/" + newFilename;
news.setUrl(imgurl);
try {
// 使用MultipartFile接口的方法完成文件上传到指定位置
file.transferTo(new File(dirPath + newFilename));
} catch (Exception e) {
e.printStackTrace();
return "Error";
} finally {
newsService.updateNews(news);
}
}
// 跳转到成功页面
return "redirect:/allNews";
} else {
return "Error";
}
}
@RequestMapping("/deleteNewsById")
public String deleteNews(Integer id) {
newsService.deleteUserByID(id);
return "redirect:/allNews";
}
@RequestMapping("/newsInfo")
public String newsInfo(Integer id, Model model) {
News news = newsService.selectNewsById(id);
model.addAttribute("news", news);
return "NewsInfo";
return (Criteria) this;
}
public Criteria andTitleLessThanOrEqualTo(String value) {
addCriterion("title <=", value, "title");
return (Criteria) this;
}
public Criteria andTitleLike(String value) {
addCriterion("title like", value, "title");
return (Criteria) this;
}
public Criteria andTitleNotLike(String value) {
addCriterion("title not like", value, "title");
return (Criteria) this;
}
public Criteria andTitleIn(List<String> values) {
addCriterion("title in", values, "title");
return (Criteria) this;
}
public Criteria andTitleNotIn(List<String> values) {
addCriterion("title not in", values, "title");
return (Criteria) this;
}
public Criteria andTitleBetween(String value1, String value2) {
addCriterion("title between", value1, value2, "title");
return (Criteria) this;
}
public Criteria andTitleNotBetween(String value1, String value2) {
addCriterion("title not between", value1, value2, "title");
return (Criteria) this;
}
public Criteria andUrlIsNull() {
addCriterion("url is null");
return (Criteria) this;
}
public Criteria andUrlIsNotNull() {
addCriterion("url is not null");
return (Criteria) this;
}
public Criteria andUrlEqualTo(String value) {
addCriterion("url =", value, "url");
return (Criteria) this;
}
distinct = false;
}
protected abstract static class GeneratedCriteria {
protected List<Criterion> criteria;
protected GeneratedCriteria() {
super();
criteria = new ArrayList<Criterion>();
}
public boolean isValid() {
return criteria.size() > 0;
}
public List<Criterion> getAllCriteria() {
return criteria;
}
public List<Criterion> getCriteria() {
return criteria;
}
protected void addCriterion(String condition) {
if (condition == null) {
throw new RuntimeException("Value for condition cannot be null");
}
criteria.add(new Criterion(condition));
}
protected void addCriterion(String condition, Object value, String property) {
if (value == null) {
throw new RuntimeException("Value for " + property + " cannot be null");
}
criteria.add(new Criterion(condition, value));
}
protected void addCriterion(String condition, Object value1, Object value2, String property) {
if (value1 == null || value2 == null) {
throw new RuntimeException("Between values for " + property + " cannot be null");
}
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
@Override
public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\\d{4}-\\d{1,2}$")){
return parseDate(source, formarts.get(0));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")){
return parseDate(source, formarts.get(1));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(2));
}else if(source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")){
return parseDate(source, formarts.get(3));
}else {
throw new IllegalArgumentException("Invalid boolean value '" + source + "'");
}
}
/**
* 格式化日期
* @param dateStr String 字符型日期
* @param format String 格式
* @return Date 日期
*/
public Date parseDate(String dateStr, String format) {
Date date=null;
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
}
return date;
}
}
public class User {
private Integer id;
private String email;
private String username;
private String password;
private Integer age;
public Criteria andSexEqualTo(String value) {
addCriterion("sex =", value, "sex");
return (Criteria) this;
}
public Criteria andSexNotEqualTo(String value) {
addCriterion("sex <>", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThan(String value) {
addCriterion("sex >", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThanOrEqualTo(String value) {
addCriterion("sex >=", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThan(String value) {
addCriterion("sex <", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThanOrEqualTo(String value) {
addCriterion("sex <=", value, "sex");
return (Criteria) this;
}
public Criteria andSexLike(String value) {
addCriterion("sex like", value, "sex");
return (Criteria) this;
}
public Criteria andSexNotLike(String value) {
addCriterion("sex not like", value, "sex");
return (Criteria) this;
}
public Criteria andSexIn(List<String> values) {
addCriterion("sex in", values, "sex");
<div class="form-group">
<label class="col-sm-2 control-label">年龄:</label>
<div class="col-sm-10 usually">
<input type="number" class="form-control" name="age" placeholder="请输入年龄" min="18" max="60" required>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">自我介绍:</label>
<div class="col-sm-10 usually">
<textarea class="form-control " name="introduction" rows="5" cols="8" required></textarea>
<div/>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<!--<input type="checkbox"> Remember me-->
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success">立即注册</button>
<a href="/toLogin">
<button type="button" class="btn btn-primary">去登录</button>
</a>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>更新新闻</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
try {
DateFormat dateFormat = new SimpleDateFormat(format);
date = dateFormat.parse(dateStr);
} catch (Exception e) {
}
return date;
}
}
public class User {
private Integer id;
private String email;
private String username;
private String password;
private Integer age;
private String sex;
private String introduction;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public Criteria andAgeNotBetween(Integer value1, Integer value2) {
addCriterion("age not between", value1, value2, "age");
return (Criteria) this;
}
public Criteria andSexIsNull() {
addCriterion("sex is null");
return (Criteria) this;
}
public Criteria andSexIsNotNull() {
addCriterion("sex is not null");
return (Criteria) this;
}
public Criteria andSexEqualTo(String value) {
addCriterion("sex =", value, "sex");
return (Criteria) this;
}
public Criteria andSexNotEqualTo(String value) {
addCriterion("sex <>", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThan(String value) {
addCriterion("sex >", value, "sex");
return (Criteria) this;
}
public Criteria andSexGreaterThanOrEqualTo(String value) {
addCriterion("sex >=", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThan(String value) {
addCriterion("sex <", value, "sex");
return (Criteria) this;
}
public Criteria andSexLessThanOrEqualTo(String value) {
addCriterion("sex <=", value, "sex");
return (Criteria) this;
}
public class User {
private Integer id;
private String email;
private String username;
private String password;
private Integer age;
private String sex;
private String introduction;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username == null ? null : username.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
addCriterion("title not between", value1, value2, "title");
return (Criteria) this;
}
public Criteria andUrlIsNull() {
addCriterion("url is null");
return (Criteria) this;
}
public Criteria andUrlIsNotNull() {
addCriterion("url is not null");
return (Criteria) this;
}
public Criteria andUrlEqualTo(String value) {
addCriterion("url =", value, "url");
return (Criteria) this;
}
public Criteria andUrlNotEqualTo(String value) {
addCriterion("url <>", value, "url");
return (Criteria) this;
}
public Criteria andUrlGreaterThan(String value) {
addCriterion("url >", value, "url");
return (Criteria) this;
}
public Criteria andUrlGreaterThanOrEqualTo(String value) {
addCriterion("url >=", value, "url");
return (Criteria) this;
}
public Criteria andUrlLessThan(String value) {
addCriterion("url <", value, "url");
return (Criteria) this;
}
public Criteria andUrlLessThanOrEqualTo(String value) {
addCriterion("url <=", value, "url");
return (Criteria) this;
}
return (Criteria) this;
}
public Criteria andNewsidBetween(Integer value1, Integer value2) {
addCriterion("newsid between", value1, value2, "newsid");
return (Criteria) this;
}
public Criteria andNewsidNotBetween(Integer value1, Integer value2) {
addCriterion("newsid not between", value1, value2, "newsid");
return (Criteria) this;
}
public Criteria andTitleIsNull() {
addCriterion("title is null");
return (Criteria) this;
}
public Criteria andTitleIsNotNull() {
addCriterion("title is not null");
return (Criteria) this;
}
public Criteria andTitleEqualTo(String value) {
addCriterion("title =", value, "title");
return (Criteria) this;
}
public Criteria andTitleNotEqualTo(String value) {
addCriterion("title <>", value, "title");
return (Criteria) this;
}
public Criteria andTitleGreaterThan(String value) {
addCriterion("title >", value, "title");
return (Criteria) this;
}
public Criteria andTitleGreaterThanOrEqualTo(String value) {
addCriterion("title >=", value, "title");
return (Criteria) this;
}
public Criteria andTitleLessThan(String value) {
addCriterion("title <", value, "title");
return (Criteria) this;
}
public Criteria andTitleLessThanOrEqualTo(String value) {
addCriterion("title <=", value, "title");
return (Criteria) this;
model.addAttribute("msg","登录成功,请点击下方按钮进入新闻主页!");
return "LoginSuccess";
}else {
System.out.println("密码和用户名不匹配");
model.addAttribute("msg","密码和用户名不匹配,请点击下方按钮进行重新登录!");
return "LoginError";
}
}
}
/**
* 全局页面传入日期字符串,自动转换成日期格式
*/
@Component
public class DateConverterConfig implements Converter<String, Date> {
private static final List<String> formarts = new ArrayList<>(4);
static{
formarts.add("yyyy-MM");
formarts.add("yyyy-MM-dd");
formarts.add("yyyy-MM-dd hh:mm");
formarts.add("yyyy-MM-dd hh:mm:ss");
}
@Override
public Date convert(String source) {
String value = source.trim();
if ("".equals(value)) {
return null;
}
if(source.matches("^\\d{4}-\\d{1,2}$")){
return parseDate(source, formarts.get(0));
return false;//有人
}else {
return true;//没人
}
}
public List<User> checkLogin(User user){
UserExample userExample=new UserExample();
userExample.createCriteria().andUsernameEqualTo(user.getUsername());
List<User> users=userMapper.selectByExample(userExample);
return users;
}
}
@Service
public class NewsService {
@Autowired
private NewsMapper newsMapper;
public List<News> findAll() {
List<News> news=newsMapper.selectByExampleWithBLOBs(null);
return news;
}
public void addNews(News news) {
newsMapper.insertSelective(news);
}
public void updateNews(News news) {
newsMapper.updateByPrimaryKeySelective(news);
}
public void deleteUserByID(Integer id) {
newsMapper.deleteByPrimaryKey(id);
}
public News selectNewsById(Integer id) {
News news=newsMapper.selectByPrimaryKey(id);
<mapper namespace="com.demo.mapper.NewsMapper" >
<resultMap id="BaseResultMap" type="com.demo.pojo.News" >
<id column="newsid" property="newsid" jdbcType="INTEGER" />
<result column="title" property="title" jdbcType="VARCHAR" />
<result column="url" property="url" jdbcType="VARCHAR" />
<result column="time" property="time" jdbcType="TIMESTAMP" />
</resultMap>
<resultMap id="ResultMapWithBLOBs" type="com.demo.pojo.News" extends="BaseResultMap" >
<result column="info" property="info" jdbcType="LONGVARCHAR" />
</resultMap>
<sql id="Example_Where_Clause" >
<where >
<foreach collection="oredCriteria" item="criteria" separator="or" >
<if test="criteria.valid" >
<trim prefix="(" suffix=")" prefixOverrides="and" >
<foreach collection="criteria.criteria" item="criterion" >
<choose >
<when test="criterion.noValue" >
and ${criterion.condition}
</when>
<when test="criterion.singleValue" >
and ${criterion.condition} #{criterion.value}
</when>
<when test="criterion.betweenValue" >
and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
</when>
<when test="criterion.listValue" >
and ${criterion.condition}
<foreach collection="criterion.value" item="listItem" open="(" close=")" separator="," >
#{listItem}
</foreach>
</when>
</choose>
</foreach>
</trim>
</if>
</foreach>
</where>
</sql>
<sql id="Base_Column_List" >
newsid, title, url, time
</sql>
<sql id="Blob_Column_List" >
info
</sql>
@RequestMapping("/toAddNews")
public String toAddNews() {
return "AddNews";
}
@RequestMapping("/allNews")
public String findAll(@RequestParam(value = "pn", defaultValue = "1") Integer pn, Model model) {
PageHelper.startPage(pn, 4);
List<News> newsList = newsService.findAll();
PageInfo<News> pageInfo = new PageInfo<>(newsList, 5);
model.addAttribute("newsList", pageInfo);
return "AllNews";
}
@PostMapping("/addNews")
public String addNews(News news, @RequestParam("uploadfile") List<MultipartFile> uploadfile,
HttpServletRequest request) {
// 判断所上传文件是否存在
if (!uploadfile.isEmpty() && uploadfile.size() > 0) {
// 循环输出上传的文件
for (MultipartFile file : uploadfile) {
// 获取上传文件的原始名称
String originalFilename = file.getOriginalFilename();
// 设置上传文件的保存地址目录
String dirPath = System.getProperty("user.dir") + "/src/main/resources/static/upload/";
File filePath = new File(dirPath);
// 如果保存文件的地址不存在,就先创建目录
if (!filePath.exists()) {
filePath.mkdirs();
}
// 使用UUID重新命名上传的文件名称(上传人_uuid_原始文件名称)
String newFilename = UUID.randomUUID() + "_" + originalFilename;
String imgurl = "/upload/" + newFilename;
System.err.println("" + imgurl);
news.setUrl(imgurl);
try {
// 使用MultipartFile接口的方法完成文件上传到指定位置
file.transferTo(new File(dirPath + newFilename));
System.err.println(dirPath + newFilename);
} catch (Exception e) {
e.printStackTrace();
return "Error";
}
}
newsService.addNews(news);
// 跳转到成功页面
return "redirect:/allNews";
} else {
return "Error";
}
}
String url = "http://localhost:" + (port == null ? 8080 : port) + "";
System.out.println("启动后访问主页:" + url);
try {
System.setProperty("java.awt.headless", "false");
java.awt.Desktop.getDesktop().browse(new java.net.URI(url));//自动打开浏览器
} catch (Exception e) {
System.out.println("自动打开浏览器失败");
}
}
}
@Configuration
@EnableWebMvc
public class UploadConfig implements WebMvcConfigurer {
private String uploadPath=System.getProperty("user.dir")+"/src/main/resources/static/upload/";
//配置本地文件映射到url上
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//重写方法
//修改tomcat 虚拟映射
registry.addResourceHandler("/upload/**").addResourceLocations("file:" + uploadPath);//定义图片存放路径
System.out.println(uploadPath);
}
}
@Configuration
public class FileUploadConfig {
// 注入bean,手动配置临时目录,建议有项目组统一配置,便于管理和错误定位。
@Bean
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void addUser(User user) {
userMapper.insert(user);
}
public User findUserById(Integer id) {
User user=userMapper.selectByPrimaryKey(id);
return user;
}
public boolean findUserByUserName(String username){
UserExample userExample=new UserExample();
userExample.createCriteria().andUsernameEqualTo(username);
List<User> users=userMapper.selectByExample(userExample);
if (users.size()>0&& !users.isEmpty()){
return false;//有人
}else {
return true;//没人
}
}
public List<User> checkLogin(User user){
UserExample userExample=new UserExample();
userExample.createCriteria().andUsernameEqualTo(user.getUsername());
List<User> users=userMapper.selectByExample(userExample);
return users;
}
}