- 新建数据库
- 新建news表
- 配置数据库链接信息和数据源
- 整合pageHelper
- 编写baseDao 和baseDaoImpl实现公用方法的抽取
- 编写newDao和newsDaoImpl的实现类
- 编写newsDataBaseController测试
创建数据库和表
create database springboot_solr ;
use springboot_solr;
CREATE table T_News_news(
Fid varchar(50) PRIMARY key ,
Fvotecount varchar(50),
Fdocid varchar(50),
Flmodify varchar(200),
Furl_3w varchar(500),
Fsource text,
Fpostid VARCHAR(50),
Fpriority VARCHAR(200),
Ftitle varchar(200),
Fmtime varchar(200),
Furl varchar(200),
FreplyCount varchar(200),
Fptime varchar(200),
Fltitle varchar(200),
Fsubtitle varchar(200),
Fdigest varchar(200),
Fboardid varchar(50),
Fimgsrc varchar(500)
);
引入matbatis依赖和pagehelper的依赖和数据源的依赖
<!-- MySQL的JDBC驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- 引入第三方数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.6</version>
</dependency>
<!-- 引入starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.3</version>
</dependency>
配置数据库连接信息
mybatis.type-aliases-package=com.gc.entity
spring.datasource.driver-class-name =com.mysql.jdbc.Driver
mybatis.mapperLocations=classpath:/mapper/*.xml
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_solr?useUnicode=true&characterEncoding=utf-8
spring.datasource.username =root
spring.datasource.password =root
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
编写BaseDao接口
package com.gc.dao;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import com.gc.utils.PageBean;
/**
* baseDao实现
*/
public interface BaseDao<T> {
/**
* 分页查询方法
* @param page
* @param param
* @return
*/
PageBean<T> listByPage(PageBean<T> page,Map<String,Object> param);
/**
*
* @param param
* @return
*/
PageBean<T> listByPage(Map<String,Object> param);
/**
* 根据id查询
* @param id
* @return
*/
T getById(Serializable id);
/**
* 保存方法
* @param t
*/
void save(T t);
/**
* 根据id删除
* @param id
*/
void deleteById(Serializable id);
/**
* 修改
* @param t
*/
void update(T t);
/**
* 批量新增
* @param list
*/
void insertIntoByList(List<T> list);
}
编写BaseDaoImpl实现类,通过传递的泛型T获取该类定义的MAPPER字段对应mapper中的namespace拼接查询器
package com.gc.dao.impl;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import com.gc.dao.BaseDao;
import com.gc.utils.PageBean;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
/**
* baseDao实现类
* @author jiji
*
* @param <T>
*/
public class BaseDaoImpl<T> implements BaseDao<T> {
private String nameSpace;
@SuppressWarnings("unchecked")
public BaseDaoImpl(){
Class<T> clazz=null;
ParameterizedType pa =(ParameterizedType) this.getClass().getGenericSuperclass();
clazz =(Class<T>) pa.getActualTypeArguments()[0];
try {
/**
* 通过 当前类的泛型 获取 MAPPER字段命名空间
*/
Field field = clazz.getField("MAPPER");
Object object = field.get(clazz);
nameSpace=object.toString();
} catch (Exception e) {
e.printStackTrace();
}
}
@Autowired
public SqlSession sqlSession;
@Override
public PageBean<T> listByPage(PageBean<T> page, Map<String, Object> param) {
PageHelper.startPage(page.getCurrentPage(), page.getPageSize()); //开始分页
List<T> list = sqlSession.selectList(nameSpace+".select", param);
@SuppressWarnings({ "rawtypes", "unchecked" })
PageInfo pageInfo = new PageInfo(list);
page.setTotal(Integer.parseInt(pageInfo.getTotal()+""));
page.setRows(list);
page.setTotalPage(pageInfo.getPages());;
PageHelper.clearPage();
return page;
}
@Override
public PageBean<T> listByPage(Map<String, Object> param) {
PageBean<T> page = new PageBean<T>();
if(param.containsKey("currentPage") && param.containsKey("pageSize")){
PageHelper.startPage(Integer.parseInt(param.get("currentPage").toString()), Integer.parseInt(param.get("pageSize").toString()));
}
List<T> list = sqlSession.selectList(nameSpace+".select", param);
@SuppressWarnings({ "rawtypes", "unchecked" })
PageInfo pageInfo = new PageInfo(list);
page.setTotal(Integer.parseInt(pageInfo.getTotal()+""));
page.setRows(list);
PageHelper.clearPage();
return page;
}
@Override
public T getById(Serializable id) {
return sqlSession.selectOne(nameSpace+".getById", id);
}
@Override
public void save(T t) {
sqlSession.insert(nameSpace+".add", t);
}
@Override
public void deleteById(Serializable id) {
sqlSession.delete(nameSpace+".delete", id);
}
@Override
public void update(T t) {
sqlSession.update(nameSpace+".update", t);
}
@Override
public void insertIntoByList(List<T> list) {
sqlSession.insert(nameSpace+".insertIntoByList", list);
}
}
编写newsDao和NewsDaoImpl分别集成BaseDao和BaseDaoImpl
package com.gc.dao;
import com.gc.entity.News;
/**
* 新闻dao接口
* @author gc
*
*/
public interface NewsDao extends BaseDao<News> {
}
package com.gc.dao.impl;
import org.springframework.stereotype.Component;
import com.gc.dao.NewsDao;
import com.gc.entity.News;
@Component
public class NewsDaoImpl extends BaseDaoImpl<News> implements NewsDao {
}
新增newsService接口和NewsServiceImpl的实现类
package com.gc.service;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import com.gc.entity.News;
import com.gc.utils.PageBean;
public interface NewsService {
void addNews(News news);
PageBean<News> listByPage(PageBean<News> page,Map<String,Object> param);
PageBean<News> listByPage(Map<String,Object> param);
News getById(Serializable id);
void deleteById(Serializable id);
void update(News t);
void insertIntoByList(List<News> list);
}
package com.gc.service.impl;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gc.dao.NewsDao;
import com.gc.entity.News;
import com.gc.service.NewsService;
import com.gc.utils.PageBean;
@Service("newsServiceImpl")
public class NewsServiceImpl implements NewsService {
@Autowired
private NewsDao newsDao;
@Override
public void addNews(News news) {
newsDao.save(news);
}
@Override
public PageBean<News> listByPage(PageBean<News> page, Map<String, Object> param) {
return newsDao.listByPage(page,param);
}
@Override
public PageBean<News> listByPage(Map<String, Object> param) {
return newsDao.listByPage(param);
}
@Override
public News getById(Serializable id) {
return newsDao.getById(id);
}
@Override
public void deleteById(Serializable id) {
newsDao.deleteById(id);
}
@Override
public void update(News t) {
newsDao.update(t);
}
@Override
public void insertIntoByList(List<News> list) {
newsDao.insertIntoByList(list);
}
}
编写NewsMapper完成数据库的访问(方法未实现完)用到的时候再补充进去
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.gc.dao.NewsDao">
<insert id="add" parameterType="com.gc.entity.News">
INSERT INTO T_NEWS_NEWS(
FID,
FVOTECOUNT,
FDOCID ,
FLMODIFY,
FURL_3W,
FSOURCE,
FPOSTID,
FPRIORITY,
FTITLE,
FMTIME,
FURL,
FREPLYCOUNT,
FPTIME,
FLTITLE,
FSUBTITLE,
FDIGEST,
FBOARDID,
FIMGSRC
)values(
#{id,jdbcType=VARCHAR},
#{votecount,jdbcType=VARCHAR},
#{docid,jdbcType=VARCHAR},
#{lmodify,jdbcType=VARCHAR},
#{url_3w,jdbcType=VARCHAR},
#{source,jdbcType=VARCHAR},
#{postid,jdbcType=VARCHAR},
#{priority,jdbcType=VARCHAR},
#{title,jdbcType=VARCHAR},
#{mtime,jdbcType=VARCHAR},
#{url,jdbcType=VARCHAR},
#{replyCount,jdbcType=VARCHAR},
#{ptime,jdbcType=VARCHAR},
#{ltitle,jdbcType=VARCHAR},
#{subtitle,jdbcType=VARCHAR},
#{digest,jdbcType=VARCHAR},
#{boardid,jdbcType=VARCHAR},
#{imgsrc,jdbcType=VARCHAR}
)
</insert>
<insert id="insertIntoByList">
INSERT INTO T_NEWS_NEWS(
FID,
FVOTECOUNT,
FDOCID ,
FLMODIFY,
FURL_3W,
FSOURCE,
FPOSTID,
FPRIORITY,
FTITLE,
FMTIME,
FURL,
FREPLYCOUNT,
FPTIME,
FLTITLE,
FSUBTITLE,
FDIGEST,
FBOARDID,
FIMGSRC
)values
<foreach collection="list" item="item" separator="," >
(#{item.id,jdbcType=VARCHAR},
#{item.votecount,jdbcType=VARCHAR},
#{item.docid,jdbcType=VARCHAR},
#{item.lmodify,jdbcType=VARCHAR},
#{item.url_3w,jdbcType=VARCHAR},
#{item.source,jdbcType=VARCHAR},
#{item.postid,jdbcType=VARCHAR},
#{item.priority,jdbcType=VARCHAR},
#{item.title,jdbcType=VARCHAR},
#{item.mtime,jdbcType=VARCHAR},
#{item.url,jdbcType=VARCHAR},
#{item.replyCount,jdbcType=VARCHAR},
#{item.ptime,jdbcType=VARCHAR},
#{item.ltitle,jdbcType=VARCHAR},
#{item.subtitle,jdbcType=VARCHAR},
#{item.digest,jdbcType=VARCHAR},
#{item.boardid,jdbcType=VARCHAR},
#{item.imgsrc,jdbcType=VARCHAR})
</foreach>
</insert>
<select id="getById" resultType="com.gc.entity.News">
SELECT
FID AS "id",
FVOTECOUNT AS "votecount",
FDOCID As "docid" ,
FLMODIFY As "lmodify",
FURL_3W As "url_3w",
FSOURCE As "source",
FPOSTID As "postid",
FPRIORITY As "priority",
FTITLE As "title",
FMTIME As "mtime",
FURL As "url",
FREPLYCOUNT As "replyCount",
FPTIME AS "ptime",
FLTITLE AS "ltitle",
FSUBTITLE AS "subtitle",
FDIGEST AS "digest",
FBOARDID AS "boardid",
FIMGSRC AS "imgsrc"
FROM T_NEWS_NEWS where fid = #{id}
</select>
<delete id="delete">
DELETE FROM T_NEWS_NEWS where fid =#{id}
</delete>
</mapper>
编写测试类NewsDataBaseController简单测试
package com.gc.controller;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.gc.entity.News;
import com.gc.service.NewsService;
@Controller
@RequestMapping("/newsDataBase")
public class NewsDataBaseController {
@Autowired
private NewsService newsService;
@RequestMapping("testAdd")
@ResponseBody
public String testAdd(){
News news = new News("1234",
"123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123");
newsService.addNews(news );
return "新增成功";
}
@RequestMapping("testAddList")
@ResponseBody
public String testAddList(){
List<News> list = new ArrayList<News>();
News news = new News("12345",
"123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123");
News news1 = new News("12345678",
"123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123");
News news2 = new News("12346",
"123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123", "123");
list.add(news) ;
list.add(news1) ;
list.add(news2) ;
newsService.insertIntoByList(list);
return "批量增加测试成功";
}
@RequestMapping("testget")
@ResponseBody
public News testGet(){
String id ="12346";
return newsService.getById(id);
}
@RequestMapping("delete")
@ResponseBody
public String testDelete(){
String id ="12346";
newsService.deleteById(id);
return "删除成功";
}
}
还有一个pageHelper的配置类
package com.gc.config;
import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.github.pagehelper.PageHelper;
@Configuration
public class PageConfig {
@Bean
public PageHelper pageHelper(){
PageHelper pageHelper = new PageHelper();
Properties properties = new Properties();
properties.setProperty("offsetAsPageNum","true");
properties.setProperty("rowBoundsWithCount","true");
properties.setProperty("reasonable","true");
properties.setProperty("dialect","mysql"); //配置mysql数据库的方言
properties.setProperty("dialect","mysql");
properties.setProperty("supportMethodsArguments","true");
properties.setProperty("supportMethodsArguments","true");
pageHelper.setProperties(properties);
return pageHelper;
}
}
至此整合工作和测试完成了,下面将完成文件的解析和批量插入,在这我们使用文件递归查询,和线程同步的方式完成数据的插入。完成后,将整理一下代码,news新闻查询的控制器进行调整。