文章目录
背景分析
因为是由Mybatis逆向生成的,所以service生成的一些方法我们并不采用,首先清空TbBlogService 与TbBlogServiceImpl里面的方法,并新建增删改查方法:
int insertBlog(TbBlog record);
TbBlog selectBlog(Integer id);
PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize);
int updateBlog(TbBlog record);
@Override
public int deleteBlog(Integer id) ;
}
@Resource
private TbBlogMapper tbBlogMapper;
@Override
public int insertBlog(TbBlog record) {
return 0;
}
@Override
public TbBlog selectBlog(Integer id) {
//查询使用Example类
TbBlogExample tbBlogExample = new TbBlogExample();
//单个查询条件
return null;
}
@Override
PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize){
return null;
}
@Override
public int updateBlog(TbBlog record) {
return 0;
}
@Override
public int deleteBlog(Integer id) {
return 0;
}
基本增删改查以及Example、PageHelper的使用
数据插入
- service方法 其他数据由页面提供
@Override
public int insertBlog(TbBlog record) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String format1 = format.format(new Date());
Date date = java.sql.Date.valueOf(format1);
//blog中插入当前时间
record.setDdate(date);
tbBlogMapper.insert(record);
return 1;
}
- controller
package com.swyee01.controller;
import com.swyee01.model.AllResultMessage;
import com.swyee01.model.TbBlog;
import com.swyee01.service.TbBlogService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author swyee
* @Program Blog
* @Description:
* @date 2020/9/6 17:55
**/
@RestController
@RequestMapping("blog")
public class BlogController {
@Resource
TbBlogService tbBlogService;
@RequestMapping("/addBlog")
public AllResultMessage<String> addBlog(TbBlog tbBlog){
//查询插入用户 从登陆用户中取结果,在这里暂时写死为“张三”
tbBlog.setUsername("张三");
//调用service方法
tbBlogService.insertBlog(tbBlog);
return new AllResultMessage<>("SUCCESS","blog插入成功","");
}
}
- 测试
http://localhost:8880/blog/addBlog.do?tid=1&title=第四次插入测试&content=第四次插入测试内容&wordType=1
数据库查询
使用Example进行数据查询
以相等条件查询
TbBlogExample tbBlogExample = new TbBlogExample();
TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();
//查询条件 可以单个单个写 也可以一行代码一直.下去
// criteria.andIdEqualTo(8);
// criteria.andWordTypeEqualTo("1");
criteria.andIdEqualTo(8).andWordTypeEqualTo("1");
List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
非空查询
criteria.andIdIsNull();
排序
TbBlogExample tbBlogExample = new TbBlogExample();
tbBlogExample.setOrderByClause("DDATE ASC");//正序
tbBlogExample.setOrderByClause("DDATE DESC");//倒序
模糊查询
criteria.andTitleLike("%aa%");
去重
TbBlogExample tbBlogExample = new TbBlogExample();
tbBlogExample.setOrderByClause("ASC");//正序
tbBlogExample.setDistinct(false);//去重
最终根据id单个查询过程与结果
- service
@Override
public TbBlog selectBlog(Integer id) {
//查询使用Example类
TbBlogExample tbBlogExample = new TbBlogExample();
// tbBlogExample.setOrderByClause("DDATE DESC");//倒序
// tbBlogExample.setDistinct(false);//去重
TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();
//查询条件 可以单个单个写 也可以一行代码一直.下去
// criteria.andIdEqualTo(8);
// criteria.andWordTypeEqualTo("1");
// criteria.andIdEqualTo(8).andWordTypeEqualTo("1");
// List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
// criteria.andIdIsNull();
// criteria.andTitleLike("%aa%");
criteria.andIdEqualTo(id);
List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
if(tbBlogs.size()==0){
//返回自定义异常
throw new CustomException("BLOGISNULL", "此blog不存在");
}
return tbBlogs.get(0);
}
- Controller
@RequestMapping("/selectBlog")
public AllResultMessage<TbBlog> selectBlog(Integer id){
TbBlog tbBlog = tbBlogService.selectBlog(id);
return new AllResultMessage<>("SUCCESS","blog查询成功",tbBlog);
}
- 结果 http://localhost:8880/blog/selectBlog.do?id=5
PageHelper分页插件使用
- 在mybatis文件下新建mybatis-config.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--指明数据库 4.0.0以后不需要设置此属性-->
<!-- 该参数默认为false -->
<!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
<!-- 和startPage中的pageNum效果一样-->
<property name="offsetAsPageNum" value="true"/>
<!-- 该参数默认为false -->
<!-- 设置为true时,使用RowBounds分页会进行count查询 -->
<property name="rowBoundsWithCount" value="true"/>
<!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
<!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
<property name="pageSizeZero" value="true"/>
<!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
<!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
<!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
<property name="reasonable" value="true"/>
<!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
<!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
<!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
<!-- 不理解该含义的前提下,不要随便复制该配置 -->
<property name="params" value="pageNum=start;pageSize=limit;"/>
<!-- 支持通过Mapper接口参数来传递分页参数 -->
<property name="supportMethodsArguments" value="true"/>
<!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
</configuration>
- 修改applicationContext.xml中的sqlSessionFactory 添加为:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- mybatis配置文件路径 -->
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
<property name="dataSource" ref="dataSource" />
<!-- 自动加载mapper映射文件 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
</bean>
- 查询 service
@Override
public PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize) {
//查询使用Example类
TbBlogExample tbBlogExample = new TbBlogExample();
tbBlogExample.setOrderByClause("DDATE DESC");//倒序
TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();
//查询当前用户所写的blog
criteria.andIdIsNotNull().andUsernameEqualTo(username);
//这一段必须在想要被分页的查询之前写
//pageNum 当前页
//pageSize 每页展示个数
PageHelper.startPage(pageNum,pageSize);
List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
return new PageInfo<TbBlog>(tbBlogs);
}
- Controller
@RequestMapping("/selectAllBlog")
//RequestParam(defaultValue = "5") 可以设置默认值
public AllResultMessage<PageInfo<TbBlog>> selectAllBlog(String userName , @RequestParam(defaultValue = "5") Integer pageSize, @RequestParam(defaultValue = "1")Integer pageNum){
PageInfo<TbBlog> tbBlogPageInfo = tbBlogService.selectAllBlog(userName, pageNum, pageSize);
return new AllResultMessage<>("SUCCESS","blog查询成功",tbBlogPageInfo);
}
- 结果
只传userName
http://localhost:8880/blog/selectAllBlog.do?userName=张三
传送pageSize和pageNum
http://localhost:8880/blog/selectAllBlog.do?userName=张三&pageSize=5&pageNum=3
修改数据 updateByPrimaryKeySelective 与updateByPrimaryKey的区别
- service
@Override
public int updateBlog(TbBlog record) {
//带有Selective会自动过滤没有赋值的字段,不做修改
tbBlogMapper.updateByPrimaryKeySelective(record);
//会把所有字段进行修改
tbBlogMapper.updateByPrimaryKey(record);
return 1;
}
- controller
@RequestMapping("/updateBlog")
//RequestParam(defaultValue = "5") 可以设置默认值
public AllResultMessage<String> updateBlog(TbBlog tbBlog){
tbBlogService.updateBlog(tbBlog);
return new AllResultMessage<>("SUCCESS","blog修改成功","");
}
- 结果
使用 updateByPrimaryKey
修改之前:
访问 http://localhost:8880/blog/updateBlog.do?content=第一次插入测试内容1111111&id=6&tid=1&username=张三
修改之后:
使用:updateByPrimaryKeySelective
修改之前:
访问:http://localhost:8880/blog/updateBlog.do?content=第一次插入测试内容1111111&id=7&tid=1&username=张三
结果:
删除数据
- service
@Override
public int deleteBlog(Integer id) {
int i = tbBlogMapper.deleteByPrimaryKey(id);
return i;
}
-controller
@RequestMapping("/deleteBlog")
//RequestParam(defaultValue = "5") 可以设置默认值
public AllResultMessage<String> deleteBlog(Integer id){
int i = tbBlogService.deleteBlog(id);
//如果不能正确删除,抛出异常
if(i!=1){
throw new CustomException("DELETEERROR","删除异常");
}
return new AllResultMessage<>("SUCCESS","blog删除成功","");
}
- 结果 执行http://localhost:8880/blog/deleteBlog.do?id=6
再次执行:http://localhost:8880/blog/deleteBlog.do?id=6
因为id=6的数据已经不存在了,所有抛出异常