springboot项目练习十 整合mybatis+pageHelper

  • 新建数据库
  • 新建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新闻查询的控制器进行调整。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_slaves

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值