1 项目搭建以及环境配置
<font size=4>本项目是一个简单的新闻资讯的发布管理系统,新闻工作人员可以添加新闻,删除,修改新闻。也可以编辑发布新闻。</font>
1.1 新建news_flash项目(web项目结构)maven配置,下图是项目的整体结构。
1.2 领域对象的建立domain
package cn.czg.core.dao;
import java.io.Serializable;
import java.util.Date;
/**
* 新闻领域对象
*/
public class News implements Serializable{
//新闻id
private Long id;
//新闻题目
private String title;
//新闻内容
private String context;
//新闻图片路径
private String imgUrl;
//新闻录入时间
private Date inputDate;
//浏览次数(热点新闻)
private Integer viewCount;
//是否推荐新闻
private Boolean isRecommend;
//新闻类型
private NewsType type;
//新闻录入人(自动生成)
private User user;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
public Date getInputDate() {
return inputDate;
}
public void setInputDate(Date inputDate) {
this.inputDate = inputDate;
}
public Integer getViewCount() {
return viewCount;
}
public void setViewCount(Integer viewCount) {
this.viewCount = viewCount;
}
public Boolean getRecommend() {
return isRecommend;
}
public void setRecommend(Boolean recommend) {
isRecommend = recommend;
}
public NewsType getType() {
return type;
}
public void setType(NewsType type) {
this.type = type;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
上述的是News对象,下面以此建立NewsType、以及User对象
package cn.czg.core.dao;
import java.io.Serializable;
/**
* 新闻类型领域对象
*/
public class NewsType implements Serializable{
/** 新闻类型id*/
private Long id;
/** 新闻类型名称*/
private String name;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package cn.czg.core.dao;
import java.io.Serializable;
/**
* 用户领域对象
*/
public class User implements Serializable {
/** 用户id*/
private Long id;
/** 用户名称*/
private String name;
/** 用户密码*/
private String password;
/** 0:代表管理员(管理后台) 1:普通用户(可以留言)*/
private Integer type;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
}
1.3 根据domain建立数据库mysql
第一张表:t_news,建表语句如下:
CREATE TABLE t_news
( id
bigint(20) NOT NULL AUTO_INCREMENT, title
varchar(50) DEFAULT NULL, context
longtext, imgUrl
varchar(255) DEFAULT NULL, viewCount
int(11) DEFAULT NULL, isRecommend
bit(1) DEFAULT NULL, inputDate
datetime DEFAULT NULL, type_id
bigint(20) DEFAULT NULL, user_id
bigint(20) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二张表:t_newsType,建表语句如下:
CREATE TABLE t_newstype
( id
bigint(20) NOT NULL AUTO_INCREMENT, name
varchar(50) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第三张表:t_user,建表语句如下:
CREATE TABLE t_user
( id
bigint(20) NOT NULL AUTO_INCREMENT, name
varchar(255) DEFAULT NULL, password
varchar(255) DEFAULT NULL, type
int(11) DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
1.4 配置数据源,装配bean,根据bean创建dao层
jdbc.properties文件:
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///news_flash
jdbc.username=root
jdbc.password=gosaint
applicationContext.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- druid数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="classpath:jdbc.properties"/>
<bean id="newsDAO" class="cn.czg.core.dao.impl.NewsDAOImpl">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>
创建dao以及dao的实现类,这里使用JdbcDaoSupport
package cn.czg.core.dao;
import cn.czg.core.domain.News;
import java.util.List;
/**
* 新闻咨询的CRUD接口
*/
public interface NewsDAO {
void save(News news);
void delete(Long id);
void update(News news);
News query(Long id);
List<News> list();
}
package cn.czg.core.dao.impl;
import cn.czg.core.dao.NewsDAO;
import cn.czg.core.domain.News;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* 继承JdbcDaoSupport,里面有数据源对象
*/
public class NewsDAOImpl extends JdbcDaoSupport implements NewsDAO{
/**
* 保存一个news对象
* @param news
*/
@Override
public void save(News news) {
super.getJdbcTemplate().update("insert into t_news(title,context,imgUrl,viewCount,isRecommend,inputDate) values (?,?,?,?,?,?)",
news.getTitle(),news.getContext(),news.getImgUrl(),news.getViewCount(),news.getIsRecommend(),news.getInputDate());
}
@Override
public void delete(Long id) {
super.getJdbcTemplate().update("DELETE FROM t_news WHERE id",id);
}
@Override
public void update(News news) {
super.getJdbcTemplate().update("update t_news set title=?,context=?,imgUrl=?,viewCount=?,isRecommend=?,inputDate=? where id=?",
news.getTitle(),news.getContext(),news.getImgUrl(),news.getViewCount(),news.getIsRecommend(),news.getInputDate(),news.getId()
);
}
@Override
public News query(Long id) {
return super.getJdbcTemplate().queryForObject("select * from t_news where id=?", new NewsRowMapper()) ;
}
@Override
public List<News> list() {
return super.getJdbcTemplate().query("select * from t_news",new NewsRowMapper());
}
/**
* 使用静态内部类封装了结果集对象
*/
public static class NewsRowMapper implements RowMapper<News>{
@Override
public News mapRow(ResultSet resultSet, int i) throws SQLException {
News news = new News();
news.setId(resultSet.getLong("id"));
news.setTitle(resultSet.getString("title"));
news.setContext(resultSet.getString("context"));
news.setImgUrl(resultSet.getString("imgUrl"));
news.setViewCount(resultSet.getInt("viewCount"));
news.setIsRecommend(resultSet.getBoolean("isRecommend"));
news.setInputDate(resultSet.getDate("inputDate"));
return news;
}
}
}
1.5 service层
package cn.czg.core.service.impl;
import cn.czg.core.dao.NewsDAO;
import cn.czg.core.domain.News;
import cn.czg.core.service.NewsService;
import java.util.List;
public class NewsServiceImpl implements NewsService{
/**
* 注入dao
* @param news
*/
private NewsDAO newsDAO;
public void setNewsDAO(NewsDAO newsDAO) {
this.newsDAO = newsDAO;
}
@Override
public void save(News news) {
newsDAO.save(news);
}
@Override
public void delete(Long id) {
newsDAO.delete(id);
}
@Override
public void update(News news) {
newsDAO.update(news);
}
@Override
public News findNewsById(Long id) {
return newsDAO.query(id);
}
@Override
public List<News> list() {
return newsDAO.list();
}
}
1.6 单元测试
1 抽取BaseTest类(Spring测试的注解配置)
2 CRUD的测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class BaseTest {
}
public class NewsTest extends BaseTest {
@Autowired
private NewsService newsService;
@Test
public void saveTest(){
News news=new News();
news.setTitle("刘强东:敢在京东卖假货,就敢让你破产");
news.setViewCount(77);
news.setIsRecommend(true);
news.setInputDate(new Date());
news.setImgUrl("E:\\就业资料\\14_aigou\\2017-07-31-B2C商城(爱购网)-DAY01\\code\\news_flash\\img\\f3624688c24ee77_w495_h277.jpg");
news.setContext("刘强东:做供给链处事。互联网有两个情势,一个是轻情势,一个是重情势,轻情势就是做平台,然则多么没有价值,我们要做有价值的任务,所以,供给链路子是对的,我们是独一的一家重运营重资产的情势。");
newsService.save(news);
}
@Test
public void testQuery(){
News newsById = newsService.findNewsById(16L);
System.out.println(newsById);
}
@Test
public void delete(){
newsService.delete(10L);
}
@Test
public void updateTest(){
News news = newsService.findNewsById(16L);
news.setTitle("寺库的危机");
newsService.update(news);
}
@Test
public void testList(){
List<News> list = newsService.list();
System.out.println(list);
}
}
1.7 web.xml的配置
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--上下文的配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--struts2的核心过滤器的配置-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--spring监听的配置-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
</web-app>
.启动tomcat,运行即可,发现程序正式启动,第二章会为大家带来相关的页面,以及分页和高级查询,以及图片上传等相关的技术。敬请期待。相关的代码我会在最后一章的时候发布到我的Github地址上,感兴趣的可以下载下来直接使用,当然相应的sql文件包括在内