文档章节

SpringBoot(四):mybatis之通用mapper、分页插件PageHelper

w
 warlockssss
发布于 2017/08/16 20:39
字数 838
阅读 606
收藏 1

资料参考:MyBatis-Spring-Boot

1、集成Mybatis、通用Mapper和分页插件PageHelper

DevTools 热启动配置会造成mybatis报错,解决方案见MyBatis-Spring-Boot。示例取消了DevTools

  • pom.xml:jar引入
<!--mybatis-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
		<!--mybatis之mapper插件-->
		<dependency>
			<groupId>tk.mybatis</groupId>
			<artifactId>mapper-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>

		<!--mybatis之pagehelper插件-->
		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.1.1</version>
		</dependency>
  • application.properties:框架、插件配置
#mybatis
#数据库实体对象位置
mybatis.type-aliases-package=com.ss.quickStart.domain
#mybatis中xml配置文件
mybatis.mapper-locations=classpath:mapper/*.xml

#mapper:https://github.com/abel533/Mapper
#mappers:指定基础Mapper继承接口,多个时逗号隔开
mapper.mappers=com.ss.quickStart.core.Mapper
#insert、update是否判断字符串类型!='' 即 test="str != null"表达式内是否追加 and str != ''
mapper.not-empty=false
#主键生成策略:http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md 第3点
mapper.identity=MYSQL

#pagehelper:https://github.com/pagehelper/Mybatis-PageHelper
#指定数据库分页类型
pagehelper.helperDialect=mysql
#页码<=0 查询第一页,页码>=总页数查询最后一页
pagehelper.reasonable=true
#支持通过 Mapper 接口参数来传递分页参数:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
  • User.java:表实体对象,主键id设置为自增
/**
 * Created by wsy on 2017/8/8.
 * 实体类注解:http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md:第2点
 */
@Table(name = "user")
public class User {
    @Id
    //@GeneratedValue(strategy = GenerationType.IDENTITY)
    //主键策略:http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md:第3点
    @GeneratedValue(generator = "JDBC")
    private Long id;

    @Column(name = "name")
    private String name;
    private Integer sex;

}
  • Mapper.java:自定义的通用Mapper
/**
 * 自定义Mapper
 * 关于Mapper详解:http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/5.Mappers.md
 * @param <T>
 */
public interface Mapper<T> extends
        BaseMapper<T>,
        ConditionMapper<T>,
        IdsMapper<T>,
        InsertListMapper<T> {
}
  • UserMapper:User对象Dao层
public interface UserMapper extends Mapper<User> {

}
  • UserService:Service层代码
@Service
public class UserService {
    private static final Logger  LOG = LoggerFactory.getLogger(UserService.class);
    @Resource
    private UserMapper userMapper;

    public User getById(long id){
        return userMapper.selectByPrimaryKey(id);
    }

    public Boolean add(User user){
        int count = userMapper.insert(user);
        LOG.info("新增用户id=>{}",user.getId());
        return count==1?true:false;
    }

    public Boolean batchAdd(List<User> userList){
        int count = userMapper.insertList(userList);
        return true;
    }

    public List<User> findAll(){
        //return userMapper.selectAll();
        Condition condition = new Condition(User.class);
        condition.setOrderByClause("id DESC");
        return userMapper.selectByCondition(condition);
    }
}
  • UserController.java:controller层代码
@RestController
public class UserController {
    @Autowired
    private PropertiesValues propertiesValues;

    @Resource
    private UserService userService;

    //取配置文件中author.name值,若没有则赋值为ss
    @Value("${author.name:ss}")
    private String name;

    @RequestMapping("getUser.do")
    public User getUser(){
        User user = new User();
        user.setName(propertiesValues.getUserName());
        user.setSex(1);
        System.out.println(MessageFormat.format("name=>{0}",name));
        return user;
    }

    @RequestMapping("user/getById.do")
    public User getById(Long id){
        return userService.getById(id);
    }

    @RequestMapping("user/add.do")
    public Boolean add(User user){
        return userService.add(user);
    }

    /**
     * 通过JSON方式解析入参:请求头中content-type:application/json;Request Body:{"name": "AA","sex": 1}
     * localhost:8080/user/addByJSON.do?{"name": "AA","sex": 1}
     * @param user
     * @return
     */
    @RequestMapping("user/addByJSON.do")
    public Boolean addByJSON(@RequestBody User user){
        return userService.add(user);
    }

    /**
     * 批量添加用户:
     * localhost:8080/user/batchAdd.do?userList[0].name=A&userList[0].sex=1&userList[1].name=B&userList[1].sex=0
     * @param userListDTO
     * @return
     */
    @RequestMapping("user/batchAdd.do")
    public Boolean batchAdd(UserListDTO userListDTO){
        return userService.batchAdd(userListDTO.getUserList());
    }

    @RequestMapping("/list")
    public PageInfo list(@RequestParam(defaultValue = "0") Integer page, @RequestParam(defaultValue = "0") Integer size) {
        PageHelper.startPage(page, size);
        List<User> list = userService.findAll();
        PageInfo pageInfo = new PageInfo(list);
        return pageInfo;
    }
}
  • QuickStartApplication.java:启动类,增加@MapperScan,扫描对应Dao接口
@ServletComponentScan
@SpringBootApplication
@MapperScan(basePackages = "com.ss.quickStart.dao")
public class QuickStartApplication {

	public static void main(String[] args) {
		SpringApplication.run(QuickStartApplication.class, args);
	}
}
  • user.sql:user表创建sql
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(30) DEFAULT NULL,
  `sex` int(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

 

2、实例运行:分页查询

http://localhost:8080/list?page=5&size=5

 

{
    "pageNum": 5,
    "pageSize": 5,
    "size": 2,
    "startRow": 21,
    "endRow": 22,
    "total": 22,
    "pages": 5,
    "list": [
        {
            "id": 2,
            "name": "s",
            "sex": 1
        },
        {
            "id": 1,
            "name": "w",
            "sex": 1
        }
    ],
    "prePage": 4,
    "nextPage": 0,
    "isFirstPage": false,
    "isLastPage": true,
    "hasPreviousPage": true,
    "hasNextPage": false,
    "navigatePages": 8,
    "navigatepageNums": [
        1,
        2,
        3,
        4,
        5
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 5,
    "firstPage": 1,
    "lastPage": 5
}

 

 

3、资料 参考

https://segmentfault.com/a/1190000008347611

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

© 著作权归作者所有

w
粉丝 14
博文 73
码字总数 23115
作品 0
宝山
私信 提问
SpringBoot整合Mybatis,使用通用mapper和PageHelper进行分页

上节介绍了如何整合Security,这节就说下如何再Springboot下使用持久层框架mybatis和牛人封装的通用mapper与mybatis的整合,直接进入正题吧! 1.首先引入我们需要的依赖: 2.mybatis的配置 ...

数据加载中
2018/06/09
0
0
Spring boot Mybatis 整合(完整版)

个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页、个人作品、个人博客) 朋友自制的springboot接口文档组件swagger2 更多干货 SpringBoot系列目录...

舒运
2018/07/09
393
0
SpringBoot基础教程4-1-2 使用Mybatis操作数据库

1 概述 为什么选择Mybatis,一个很重要的原因是它,将封装与开放的完美结合,高效的生成增删改查的同时,又能满足复杂的场景,下面我们详细介绍,如何快速接入实现数据库的增删改查。 2 添加...

Mkeeper
01/03
83
0
Spring Boot MyBatis 连接数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/50553714 最近比较忙,没来得及抽时间把MyBatis的集成发出来,其实mybatis官网在201...

单红宇
2016/01/21
0
0
「小程序JAVA实战」小程序首页视频(49)

视频显示的内容是视频的截图,用户的头像,用户的昵称,都需要一个结合。所以涉及到关联查询.源码:https://github.com/limingios/wxProgram.git 中wx-springboot 和 No.15 获取系统信息 官网...

IT人故事
09/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部