基于javaweb+mysql的springboot简单博客管理系统(java+springboot+html+maven+mysql)

基于javaweb+mysql的springboot简单博客管理系统(java+springboot+html+maven+mysql)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的SpringBoot简单博客管理系统(java+springboot+html+maven+mysql)

项目介绍

本项目为前后台管理系统,包括博主与游客两种角色; 博主角色包含以下功能: 博主登录,发博客,博主可以删除博客等功能。 游客角色包含以下功能: 首页,查看博客,添加评论,搜索-标签筛选等功能。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可 4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS;

5.数据库:MySql 5.7版本;

技术栈

  1. 后端:SpringBoot

  2. 前端:HTML+CSS+JavaScript+jsp

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.yml配置文件中的数据库配置改为自己的配置; 4. 运行项目,输入localhost:8080/ 登录
    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

@Table(name = "message")
public class Message {

    private Long id;
    private Long blogId;
    private Boolean deleteFlag;
    private String content;
    private String nickName;
    private Date createTime;
    private Date updateTime;

    public Message() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Boolean getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(Boolean deleteFlag) {
            return "刚刚";
        }
        if(now.getTime() < thM){
            return "半小时前";
        }
        if(now.getTime() < oneH){
            return "一小时前";
        }

        SimpleDateFormat sdf = new SimpleDateFormat(format);

        return sdf.format(date);
    }
}

public interface MessageDao extends BaseDao<Message> {

}

public interface BlogDao extends BaseDao<Blog> {

}

public interface UserDao extends BaseDao<User> {

}
<%
layout("/common/layout.html",{title:"首页"}){
%>

        beetlGroupUtilConfiguration.init();
        //如果使用了优化编译器,涉及到字节码操作,需要添加ClassLoader
        beetlGroupUtilConfiguration.getGroupTemplate().setClassLoader(loader);
        return beetlGroupUtilConfiguration;

    }

    @Bean(name = "beetlViewResolver")
    public BeetlSpringViewResolver getBeetlSpringViewResolver(BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
        BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
        beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
        beetlSpringViewResolver.setOrder(0);
        beetlSpringViewResolver.setConfig(beetlGroupUtilConfiguration);
        return beetlSpringViewResolver;
    }
}

@Table(name = "blog")
public class Blog {

    private Long id;
    private String content;
    private Boolean deleteFlag;
    private String img;
    private String category;
    private String title;
    private Date createTime;
    private Date updateTime;

    public Blog() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {

@Configuration
public class DBConfig {

        @Bean(name = "datasource")
        public DataSource datasource(Environment env) {
            HikariDataSource ds = new HikariDataSource();
            ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
            ds.setUsername(env.getProperty("spring.datasource.username"));
            ds.setPassword(env.getProperty("spring.datasource.password"));
            ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
            return ds;
        }
}

public class PrintTimeUtil {

    public static String printTime(Date date,String format){

        Date now = new Date();
        Long fiveM = date.getTime() + (5*60*1000);
        Long thM = date.getTime() + (30*60*1000);
        Long oneH = date.getTime() + (60*60*1000);
        if(now.getTime() < fiveM){
            return "刚刚";
        }
        if(now.getTime() < thM){
            return "半小时前";
        }

@Table(name = "user")
public class User {

    private Long id;
    private Integer deleteFlag;
    private String password;
    private String userName;
    private Date createTime;
    private Date updateTime;

    public User() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Integer getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(Integer deleteFlag) {
        this.deleteFlag = deleteFlag;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserName() {
        return userName;
        Date now = new Date();
        message.setCreateTime(now);
        message.setUpdateTime(now);
        message.setDeleteFlag(false);
        messageDao.createLambdaQuery().insert(message);
    }

    @Override
    public void saveBlog(Blog blog) {
        Date now = new Date();
        blog.setCreateTime(now);
        blog.setUpdateTime(now);
        blog.setDeleteFlag(false);
        blogDao.createLambdaQuery().insertSelective(blog);
    }

    @Override
    public List<String> listCategory() {
        List<Blog> blogList = blogDao.createLambdaQuery().groupBy("category").select();
        return blogList.stream().map(Blog::getCategory).filter(o -> o != null).collect(Collectors.toList());
    }

    @Override
    public User login(String userName, String password) {
        return userDao.createLambdaQuery()
                .andEq(User::getUserName, userName)
                .andEq(User::getPassword, password)
                .andEq(User::getDeleteFlag, false)
                .single();
    }

	@Override
	public void deleteBlog(long id) {
		blogDao.deleteById(id);
		
	}

}


    public void setImg(String img) {
        this.img = img;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

@Table(name = "message")
public class Message {

    private Long id;
    private Long blogId;
    private Boolean deleteFlag;
    private String content;
public class Message {

    private Long id;
    private Long blogId;
    private Boolean deleteFlag;
    private String content;
    private String nickName;
    private Date createTime;
    private Date updateTime;

    public Message() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Boolean getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(Boolean deleteFlag) {
        this.deleteFlag = deleteFlag;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getNickName() {
        return nickName;
    }

    public void setNickName(String nickName) {
        this.nickName = nickName;
    }

    public Date getCreateTime() {
        return createTime;
    }


@Table(name = "message")
public class Message {

    private Long id;
    private Long blogId;
    private Boolean deleteFlag;
    private String content;
    private String nickName;
    private Date createTime;
    private Date updateTime;

    public Message() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Boolean getDeleteFlag() {
        return deleteFlag;
    }

    public void setDeleteFlag(Boolean deleteFlag) {
        this.deleteFlag = deleteFlag;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getNickName() {
        return nickName;
    }
    @Override
    public User login(String userName, String password) {
        return userDao.createLambdaQuery()
                .andEq(User::getUserName, userName)
                .andEq(User::getPassword, password)
                .andEq(User::getDeleteFlag, false)
                .single();
    }

	@Override
	public void deleteBlog(long id) {
		blogDao.deleteById(id);
		
	}

}

@Configuration
public class BeetlConfig {

    //模板根目录 ,比如 "templates"
    @Value("${beetl.templatesPath}") String templatesPath;
    @Value("${blog.title}") String title;

    @Bean
    public GroupTemplate getGroupTemplate(BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
        GroupTemplate gt = beetlGroupUtilConfiguration.getGroupTemplate();
        Map<String,Object> shared = new HashMap<>();
        shared.put("blogSiteTitle", title);
        if (!StringUtils.isEmpty(keyword)) {
            query.andLike(Blog::getTitle, "%" + keyword.trim() + "%");
        }
        if (!StringUtils.isEmpty(category)) {
            query.andEq(Blog::getCategory, category);
        }
        if (pageNumber > 0 && pageSize > 0) {
            return query.desc(Blog::getCreateTime).page(pageNumber, pageSize);
        }
        return null;
    }

    @Override
    public PageQuery<Message> pageMsg(Long blogId, long pageNumber, long pageSize) {
        if (pageNumber < 1 || pageSize < 1 || blogId == null) {
            return null;
        }
        return messageDao.createLambdaQuery()
                .andEq(Message::getBlogId, blogId)
                .andEq(Message::getDeleteFlag, false)
                .desc(Message::getCreateTime)
                .page(pageNumber, pageSize);
    }

    @Override
    public Blog getBlogById(Long blogId) {
        return blogDao.createLambdaQuery().andEq(Blog::getId, blogId).single();
    }

    @Override
    public void saveMessage(Message message) {
        Date now = new Date();
        message.setCreateTime(now);
        message.setUpdateTime(now);
        message.setDeleteFlag(false);
        messageDao.createLambdaQuery().insert(message);
    }

    @Override
    public void saveBlog(Blog blog) {
        Date now = new Date();
        blog.setCreateTime(now);
        blog.setUpdateTime(now);
        blog.setDeleteFlag(false);
        blogDao.createLambdaQuery().insertSelective(blog);
    }

public interface BlogDao extends BaseDao<Blog> {

}

public interface UserDao extends BaseDao<User> {

}
<%
layout("/common/layout.html",{title:"首页"}){
%>

<% for(var i = 0;i< page.list.~size;i=i+2){%>
<div class="row">
    <div class="col-md-6 col-sm-6">
        <article class=" blog-teaser">
            <header>
                <img src="${page.list[i].img}" alt="">
                <h3><a href="${ctxPath}/detail?id=${page.list[i].id!}">
                    <%
                    var title = page.list[i].title;

                    if(isNotEmpty(title)&&strutil.length(title)>11){%>
                    ${strutil.subStringTo(title,0,11)}...
                    <%}else{%>
                    ${title!"无标题"}
                    <%}%>
                </a></h3>
                <span class="meta">${@com.ibeetl.blog.function.PrintTimeUtil.printTime(page.list[i].createTime,"yyyy-MM-dd HH:mm:ss")}</span>
                <hr>
            </header>

        </article>
    </div>
    <%if((i+1) < page.list.~size){%>

public interface MessageDao extends BaseDao<Message> {

}

public interface BlogDao extends BaseDao<Blog> {

}

public interface UserDao extends BaseDao<User> {

}
<%
layout("/common/layout.html",{title:"首页"}){
%>

<% for(var i = 0;i< page.list.~size;i=i+2){%>
<div class="row">
    <div class="col-md-6 col-sm-6">
        <article class=" blog-teaser">
            <header>
                <img src="${page.list[i].img}" alt="">
                <h3><a href="${ctxPath}/detail?id=${page.list[i].id!}">
                    <%
                    var title = page.list[i].title;

                    if(isNotEmpty(title)&&strutil.length(title)>11){%>
                    ${strutil.subStringTo(title,0,11)}...
                    <%}else{%>
                    ${title!"无标题"}
                    <%}%>
                </a></h3>
                <span class="meta">${@com.ibeetl.blog.function.PrintTimeUtil.printTime(page.list[i].createTime,"yyyy-MM-dd HH:mm:ss")}</span>
                <hr>
            </header>

        </article>
    </div>
    <%if((i+1) < page.list.~size){%>
    <div class="col-md-6 col-sm-6">
        <article class=" blog-teaser">
            <header>
        }

        //进行登录业务
        //根据用户名密码查询用户
        User user = blogService.login(userName, password);

        if (user == null) {
            return "login.html";
        }
        //用户信息放入session
        request.getSession().setAttribute("user", user);
        //跳转到首页
        return "redirect:/";

    }

    @GetMapping("/test")
    public String test(HttpServletRequest request) {
        return "test.html";
    }
}

@Service
public class BlogServiceImpl implements BlogService {
    @Autowired
    private BlogDao blogDao;

    @Autowired
    private MessageDao messageDao;

    @Autowired
    private UserDao userDao;
}

@Configuration
public class BeetlConfig {

    //模板根目录 ,比如 "templates"
    @Value("${beetl.templatesPath}") String templatesPath;
    @Value("${blog.title}") String title;

    @Bean
    public GroupTemplate getGroupTemplate(BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
        GroupTemplate gt = beetlGroupUtilConfiguration.getGroupTemplate();
        Map<String,Object> shared = new HashMap<>();
        shared.put("blogSiteTitle", title);
        shared.put("blogCreateUser", "Gavin");
        gt.setSharedVars(shared);
        return gt;
    }

    @Bean
    public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
        BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
        //获取Spring Boot 的ClassLoader
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        if(loader==null){
            loader = BeetlConfig.class.getClassLoader();
        }
        ClasspathResourceLoader cploder = new ClasspathResourceLoader(loader,
                templatesPath);
        beetlGroupUtilConfiguration.setResourceLoader(cploder);
        beetlGroupUtilConfiguration.init();
        //如果使用了优化编译器,涉及到字节码操作,需要添加ClassLoader
        beetlGroupUtilConfiguration.getGroupTemplate().setClassLoader(loader);
        return beetlGroupUtilConfiguration;
        return null;
    }

    @Override
    public PageQuery<Message> pageMsg(Long blogId, long pageNumber, long pageSize) {
        if (pageNumber < 1 || pageSize < 1 || blogId == null) {
            return null;
        }
        return messageDao.createLambdaQuery()
                .andEq(Message::getBlogId, blogId)
                .andEq(Message::getDeleteFlag, false)
                .desc(Message::getCreateTime)
                .page(pageNumber, pageSize);
    }

    @Override
    public Blog getBlogById(Long blogId) {
        return blogDao.createLambdaQuery().andEq(Blog::getId, blogId).single();
    }

    @Override
    public void saveMessage(Message message) {
        Date now = new Date();
        message.setCreateTime(now);
        message.setUpdateTime(now);
        message.setDeleteFlag(false);
        messageDao.createLambdaQuery().insert(message);
    }

    @Override
    public void saveBlog(Blog blog) {
        Date now = new Date();
        blog.setCreateTime(now);
        blog.setUpdateTime(now);
        blog.setDeleteFlag(false);
        blogDao.createLambdaQuery().insertSelective(blog);
    }

    @Override
    public List<String> listCategory() {
        List<Blog> blogList = blogDao.createLambdaQuery().groupBy("category").select();
        return blogList.stream().map(Blog::getCategory).filter(o -> o != null).collect(Collectors.toList());
    }

    @Override
    public User login(String userName, String password) {
        return userDao.createLambdaQuery()
                .andEq(User::getUserName, userName)
                .andEq(User::getPassword, password)
                .andEq(User::getDeleteFlag, false)

        SimpleDateFormat sdf = new SimpleDateFormat(format);

        return sdf.format(date);
    }
}

public interface MessageDao extends BaseDao<Message> {

}

public interface BlogDao extends BaseDao<Blog> {

}

public interface UserDao extends BaseDao<User> {

}
<%
layout("/common/layout.html",{title:"首页"}){
%>

<% for(var i = 0;i< page.list.~size;i=i+2){%>
<div class="row">
    <div class="col-md-6 col-sm-6">
        <article class=" blog-teaser">
            <header>
                <img src="${page.list[i].img}" alt="">
                <h3><a href="${ctxPath}/detail?id=${page.list[i].id!}">
                    <%
                    var title = page.list[i].title;

                    if(isNotEmpty(title)&&strutil.length(title)>11){%>
        LambdaQuery<Blog> query = blogDao.createLambdaQuery()
                .andEq(Blog::getDeleteFlag, false);
        if (!StringUtils.isEmpty(keyword)) {
            query.andLike(Blog::getTitle, "%" + keyword.trim() + "%");
        }
        if (!StringUtils.isEmpty(category)) {
            query.andEq(Blog::getCategory, category);
        }
        if (pageNumber > 0 && pageSize > 0) {
            return query.desc(Blog::getCreateTime).page(pageNumber, pageSize);
        }
        return null;
    }

    @Override
    public PageQuery<Message> pageMsg(Long blogId, long pageNumber, long pageSize) {
        if (pageNumber < 1 || pageSize < 1 || blogId == null) {
            return null;
        }
        return messageDao.createLambdaQuery()
                .andEq(Message::getBlogId, blogId)
                .andEq(Message::getDeleteFlag, false)
                .desc(Message::getCreateTime)
                .page(pageNumber, pageSize);
    }

    @Override
    public Blog getBlogById(Long blogId) {
        return blogDao.createLambdaQuery().andEq(Blog::getId, blogId).single();
    }

    @Override
    public void saveMessage(Message message) {
        Date now = new Date();
        message.setCreateTime(now);
        message.setUpdateTime(now);
        message.setDeleteFlag(false);
        messageDao.createLambdaQuery().insert(message);
    }

    @Override
    public void saveBlog(Blog blog) {
        Date now = new Date();
        blog.setCreateTime(now);
        blog.setUpdateTime(now);
        blog.setDeleteFlag(false);
        blogDao.createLambdaQuery().insertSelective(blog);
    }

    @Override

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值