年底因为各种事情比较忙,很久没有更新,最近在家宅着顺便填下之前的坑。
后端部分:
一、创建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
/*
连接池配置文件: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的逆向生成实体类、Dao层接口和对应mapper,所以第一步就是先创建数据库,数据库结构如下:
article表
article_1表
article_2表
user表
配置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层
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
//基于mybatis逆向工程新添加,用于查找不同写作用户的文章
List selectByZuozhe(String zuozhe);
在resource文件夹下mapper包中的ArticleMapper里面添加:
select
,
from article
where zuozhe = #{zuozhe,jdbcType=VARCHAR}
在Dao层接口ArticleFaMapper中添加:
//luoFc增加根据用户查询待发布文章
List selectByZuozhe(String zuozhe);
在resource文件夹下mapper包中的ArticleFa里面添加:
select
,
from article_1
where fzuozhe = #{fzuozhe,jdbcType=VARCHAR}
在Dao层接口ArticleWeiMapper中添加:
//luoFc添加,用于通过作者查询未审核文章
List selectByZuozhe(String zuozhe);
在resource文件夹下mapper包中的ArticleWei里面添加:
select
,
from aritcle_2
where wzuozhe = #{wzuozhe,jdbcType=VARCHAR}
到目前为止,所有的业务逻辑和后端的基础部分已经完成,接下来就是导入前端页面和编写各种controller了。如果有任何疑问可以加我QQ或者给我写邮件。 PS:如果是新手,我建议在整合spring+springMVC+Mybatis的时候应该分步测试,详细教程可以去网上找找,我自己看的是heima的整合教程。对新人来说多了解各个框架的基础和底层实现原理非常有用。