MyBatis Plus 官方
1、引入MyBatis Starter 引入Druid当做数据源 引入mysql驱动
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
查看引入的依赖
发现该依赖帮我们引入了 jdbc 跟 mybatis,所以我们在pom删除或者注释掉mybatis跟jdbc的相关包
2、查看MyBatis Plus的自动配置类 发现MyBatis Plus自动配置:
- MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制
- SqlSessionFactory 自动配置好。底层是容器中默认的数据源
- mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下
- 容器中也自动配置好了 SqlSessionTemplate
- @Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行
3、数据库创建以及数据插入
4、修改配置文件
server:
port: 8081 #spring 启动端口
spring:
datasource:
url: jdbc:mysql://localhost:3306/test #mysql 地址
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver #指定驱动
druid:
filters: stat,wall,slf4j #指定开启的功能
stat-view-servlet: #监控页面配置
enabled: true #开启
login-username: admin #账号 密码
login-password: admin
reset-enable: false
web-stat-filter: #web 过滤器
enabled: true #开启
url-pattern: /* #监控的页面
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' #解除监控的页面
filter:
stat:
slow-sql-millis: 1000 #慢sql阈值 ms
log-slow-sql: true #日志记录慢sql
enabled: true #开启
wall:
enabled: true #开启防火墙
config:
drop-table-allow: false #禁止删除表的操作
mybatis-plus:
configuration:
map-underscore-to-camel-case: #开启驼峰字段转换
5、创建bean包装类
因为表中没有userName字段 所以这里加上注解
package com.example.demo.bean;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user") //指定表名
public class User {
@TableField(exist = false) //表示不是表中的属性
private String userName;
private Long id;
private String name;
private Integer age;
private String email;
}
6、创建Dao层mapper
mapper继承了BaseMapper
package com.example.demo.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.bean.User;
public interface UserMapper extends BaseMapper<User> {
}
BaseMapper中有很多基本的crud功能
7、service层实现
service层接口:
package com.example.demo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.bean.User;
public interface UserService extends IService<User> {
}
继承了IService接口
我们看看IService接口包含了什么功能
也是一些方便的增删改查以及分页等功能,可以说很强大了!
接口实现类:
package com.example.demo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.bean.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
ServiceImpl帮我们实现了UserService里边的接口,所以我们继承他就不需要实现接口里的所有方法了。
8、使用
package com.example.demo.controller;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.bean.User;
import com.example.demo.service.StudentService;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class SqlConTestController {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
StudentService studentService;
@ResponseBody
@GetMapping("/query")
public String query(){
Long count = jdbcTemplate.queryForObject("select count(*) from student", Long.class);
return count.toString();
}
@ResponseBody
@GetMapping("/query2")
public String query2(@RequestParam("id") Long id){
return studentService.getStudentById(id).toString();
}
@Autowired
UserService userService;
@ResponseBody
@GetMapping("/query_user")
public String queryUser(@RequestParam("id") Long id){
// List<User> userList = userService.list(); //返回查询全部的列表
// return JSONArray.toJSONString(userList);
// return userService.getById(id).toString(); //返回单个查询结果
// userService.removeById(id);//删除某条
//--- 分页需要在容器中注入分页插件
Page<User> userPage = new Page<>(0, 2); //分页 第一页 大小为两条
Page<User> page = userService.page(userPage); //分页查询的结果
long pages = page.getPages();//总页码
long current = page.getCurrent();//当前页码
long total = page.getTotal();//总数
List<User> records = page.getRecords();//查询结果
Map<String, String> map = new HashMap<>();
map.put("all pages", String.valueOf( pages));
map.put("current page", String.valueOf(current));
map.put("all total", String.valueOf(total));
map.put("query result", JSONArray.toJSONString(records));
return map.toString();
}
}
注意 这里要开启分页功能,还需要注入相关组件:
package com.example.demo.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyBatisConfig {
/**
* MybatisPlusInterceptor
* @return
*/
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
//这是分页拦截器
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor();
paginationInnerInterceptor.setOverflow(true);// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInnerInterceptor.setMaxLimit(500L);// 设置最大单页限制数量,默认 500 条,-1 不受限制
mybatisPlusInterceptor.addInnerInterceptor(paginationInnerInterceptor);
return mybatisPlusInterceptor;
}
}
查看结果: