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

资料参考: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

转载于:https://my.oschina.net/u/2526015/blog/1511381

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值