一个简单的web项目,网站文章管理(二)

年底因为各种事情比较忙,很久没有更新,最近在家宅着顺便填下之前的坑。

后端部分:

一、创建maven工程导入依赖(在上一篇中可以找到pom文件)和配置spring及整合springMVC、Mybatis

  • 我用的是IDEA,创建maven-web工程的教程有很多,我就不多废话了;
  • web.xml


  article
  
    index.html
    index.jsp
  

  
  
    contextConfigLocation
    classpath:applicationContext.xml
  
  
    org.springframework.web.context.ContextLoaderListener
  

  
  
    dispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    1
  

  
    dispatcherServlet
    /
  

  
  
    default
    *.html
  

  
  
    CharacterEncodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
    
      forceRequestEncoding
      true
    
    
      forceResponseEncoding
      true
    
  
  
    CharacterEncodingFilter
    /*
  

  
  
    HiddenHttpMethodFilter
    org.springframework.web.filter.HiddenHttpMethodFilter
  
  
    HiddenHttpMethodFilter
    /*
  

  • applicationContext.xml


	
	
		
	
	
	
	
	
		
		
		
		
	
	
	
	
		
		
		
		
	
	
	
	
		
		
	
	
	
	
		
		
	
	
	
	
		
	
	
	
	
		
		
	
	
	
	
		
			
			
		
	


  • 连接池配置文件:dbconfig.properties,大家根据自己数据库的库名和用域名及密码配置,我的如下:
jdbc.jdbcUrl=jdbc:mysql://localhost:3306/luofc
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.user=root
jdbc.password=root
  • 配置springMVC
    • 配置视图解析器时要注意,使用jsp页面和html页面的配置有很大区别,我把两种配置都写出来了,大家可以根据自己的需要配置(我使用的是html页面,jsp页面的配置我注释掉了)
    • 另外,此配置文件的位置需要注意;它不能放在resources中,而需要放在WEB-INF下,与web.xml在同一目录下。


  
	
	
		
	

	
	
		
	

	
		
		
	
	
		
		
		
	
	
	

	
	
		
			UTF-8
		
		
			32505856
		
		
			4096
		
	
	
	
	
	
	
	
	
	
	
		
			   
                 
             
            
            
            
            
            
            
            
		
	

  • 配置Mybatis

 
  

	
		
	
	
	
		
	
	
	
		
			
			
		
	

二、使用Mybatis逆向工程生成基础类

创建基础类

  • 在第一篇中说到因为想偷个懒,用的是mybatis的逆向生成实体类、Dao层接口和对应mapper,所以第一步就是先创建数据库,数据库结构如下:
    • article表
      一个简单的web项目,网站文章管理(二)_第1张图片
    • article_1表
      一个简单的web项目,网站文章管理(二)_第2张图片
    • article_2表
      一个简单的web项目,网站文章管理(二)_第3张图片
    • user表
      一个简单的web项目,网站文章管理(二)_第4张图片
  • 配置Mybatis逆向工程






    

        
            
        

        
        
        

        
            
        

        
        
            
            
        

        
        
            
        

        
        
            
        

        
        
  • Mybatis逆向工程运行主程序
package com.luofc.article.test;

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

/**
 * @author:luoFc
 * @date:2019/10/22-18:55
 * @emal:[email protected]
 * @Description:(运行Mybatis逆向工程的方法)
 */
public class MBGRun {

    public static void main(String[] args) throws Exception {
        List warnings = new ArrayList();
        boolean overwrite = true;
        File configFile = new File("./src/main/resources/MBG.xml"); //指定逆向工程配置文件路径
        ConfigurationParser cp = new ConfigurationParser(warnings);
        Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
        myBatisGenerator.generate(null);
    }
}

直接运行main方法后可自动生成实体类、Dao层接口和mapper。

三、编写service层

  • UserService
package com.luofc.article.service;

import com.luofc.article.bean.User;
import com.luofc.article.dao.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author:luoFc
 * @date:2019/10/22-19:28
 * @emal:[email protected]
 * @Description:(用户管理的业务层)
 */

@Service
public class UserService {

    @Autowired
    UserMapper userMapper;

    //通过用户名查找一个用户(用于登陆查询)
    public User findByUserName(String username) {

        return userMapper.selectByName(username);

    }

    //查询所有用户(用于后期用户管理功能)
    public List findAllUser(){

        return userMapper.selectByExample(null);
    }

    //添加用户(用于后期用户管理功能)
    public void insertUser(User user){

        userMapper.insert(user);
    }

    //通过ID删除用户(用于后期用户管理功能)
    public void deleteUser(Integer id){
        userMapper.deleteByPrimaryKey(id);
    }
}
  • ArticleService
  • MyBatis逆向工程生成的Dao层接口和mapper有一定的局限性,通过作者名查询文章这一方法并没有相关Dao层和mapper支持,所以我们后续还要完善这部分;
package com.luofc.article.service;

import com.luofc.article.bean.Article;
import com.luofc.article.bean.ArticleExample;
import com.luofc.article.dao.ArticleMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author:luoFc
 * @date:2019/10/22-19:27
 * @emal:[email protected]
 * @Description:(文章处理的业务层)
 */

@Service
public class ArticleService {

    //自动装配文章的Mapper
    @Autowired
    ArticleMapper articleMapper;

    @Autowired
    ArticleExample articleExample;

    //保存文章
    public boolean addArticle(Article article) {
        Integer num = articleMapper.insertSelective(article);

        if (num == 0){
            return false;
        }
        return true;
    }

    //通过ID删除一篇文章
    public boolean deleteArticleById(Integer id) {
        Integer num = articleMapper.deleteByPrimaryKey(id);

        if (num == 0){
            return false;
        }
        return true;
    }

    //查询所有文章
    public List
getAllArticle() { articleExample.setOrderByClause("id DESC"); return articleMapper.selectByExample(articleExample); } //通过作者查询文章(用于对不同的写作用户进行分类展示) public List
getArticleByZuozhe(String zuozhe){ if (zuozhe != null){ List
list = articleMapper.selectByZuozhe(zuozhe); return list; } return null; } //通过id查询已发布文章 public Article getArticleById(Integer id){ return articleMapper.selectByPrimaryKey(id); } }
  • ArticleFaService
  • 同样根据需要,通过作者名查询待发布文章这一方法也没有Dao层和mapper支持,后面一起完善;
package com.luofc.article.service;

import com.luofc.article.bean.ArticleFa;
import com.luofc.article.dao.ArticleFaMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author:luoFc
 * @date:2019/10/24-18:52
 * @emal:[email protected]
 * @Description:(待发布文章的业务层)
 */

@Service
public class ArticleFaService {

    @Autowired
    ArticleFaMapper articleFaMapper;

    //增加一篇待发布文章
    public boolean addArticleFa(ArticleFa articleFa){
        Integer i = articleFaMapper.insert(articleFa);

        if (i == 0){
            return false;
        }
        return true;
    }

    //根据id删除待发布文章
    public boolean deleteArticleFaById(Integer fid){
        Integer i = articleFaMapper.deleteByPrimaryKey(fid);

        if (i == 0){
            return false;
        }

        return true;
    }

    //根据主键修改一篇未发布文章
    public boolean updateArticleFaById(ArticleFa articleFa){
        Integer i = articleFaMapper.updateByPrimaryKeySelective(articleFa);

        if (i == 0){
            return false;
        }

        return true;
    }

    //查询所有的待发布文章
    public List getAllArticleFas(){

        return articleFaMapper.selectByExample(null);
    }

	//根据作者名查询所有待发布文章
	public List getArticleFasByZuozhew(String zuozhe){
        if (zuozhe != null){
            return articleFaMapper.selectByZuozhe(zuozhe);
        }
        return null;
    }

    //根据id查询一篇待发布文章
    public ArticleFa getArticleFaById(Integer fid){

        return articleFaMapper.selectByPrimaryKey(fid);
    }
}

  • ArticleWeiService
  • 同样根据需要,通过作者名查询未审核文章这一方法也没有Dao层和mapper支持,后面一起完善;
package com.luofc.article.service;

import com.luofc.article.bean.ArticleWei;
import com.luofc.article.dao.ArticleWeiMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author:luoFc
 * @date:2019/10/23-16:49
 * @emal:[email protected]
 * @Description:(未审核文章的业务层)
 */

@Service
public class ArticleWeiService {

    @Autowired
    ArticleWeiMapper articleWeiMapper;

    //增加一篇未审核文章
    public boolean addArticleWei(ArticleWei articleWei){
        Integer i = articleWeiMapper.insertSelective(articleWei);

        if (i == 0){
            return false;
        }

        return true;
    }

    //根据id删除未审核文章
    public boolean deleteArticleWeiById(Integer wid){
        Integer i = articleWeiMapper.deleteByPrimaryKey(wid);

        if (i == 0){
            return false;
        }

        return true;
    }

    //根据主键更新未审核文章
    public boolean updateArticleWeiById(ArticleWei articleWei){
        int i = articleWeiMapper.updateByPrimaryKeySelective(articleWei);

        if (i == 0){
            return false;
        }
        return true;
    }

    //查询所有未审核文章
    public List getAllArticleWeis(){
        return articleWeiMapper.selectByExample(null);
    }

    //通过作者查询所有未审核文章
    public List getArticleWeisByZuozhew(String zuozhe){
        if (zuozhe != null){
            return articleWeiMapper.selectByZuozhe(zuozhe);
        }
        return null;
    }

    //通过id查询未审核文章
    public ArticleWei getArticleWeiById(Integer wid){

        return articleWeiMapper.selectByPrimaryKey(wid);
    }
}

四、根据需求完善逆向工程生成的Dao层接口、mapper

  • 在Dao层ArticleMapper接口中添加:
//基于mybatis逆向工程新添加,用于查找不同写作用户的文章
    List
selectByZuozhe(String zuozhe);
  • 在resource文件夹下mapper包中的ArticleMapper里面添加:

  
  • 在Dao层接口ArticleFaMapper中添加:
//luoFc增加根据用户查询待发布文章
    List selectByZuozhe(String zuozhe);
  • 在resource文件夹下mapper包中的ArticleFa里面添加:

  
  • 在Dao层接口ArticleWeiMapper中添加:
//luoFc添加,用于通过作者查询未审核文章
    List selectByZuozhe(String zuozhe);
  • 在resource文件夹下mapper包中的ArticleWei里面添加:

到目前为止,所有的业务逻辑和后端的基础部分已经完成,接下来就是导入前端页面和编写各种controller了。如果有任何疑问可以加我QQ或者给我写邮件。
PS:如果是新手,我建议在整合spring+springMVC+Mybatis的时候应该分步测试,详细教程可以去网上找找,我自己看的是heima的整合教程。对新人来说多了解各个框架的基础和底层实现原理非常有用。

你可能感兴趣的:(写的一些简单的项目)