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