赞
踩
<!--mybatisplus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<!--druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.11</version>
</dependency>
#设置数据源 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/4031 username: root password: 123456 #设置下划线命名改为小驼峰命名 mybatis: configuration: map-underscore-to-camel-case: true #设置访问端口号 server: port: 80
//该注解设置代理对象
@Mapper //继承BaseMapper<泛型>抽象类
public interface UserDao extends BaseMapper<User> {
}
public class User {
//对应数据库主键的属性必须名为id或者加上@TableId表示
@TableId
private Long userId;
private String userName;
private Double userBalance;
}
@Service public class UserServiceImpl implements UserService { @Autowired private UserDao userDao; @Override public Result queryUser() { //BaseMapper<泛型>抽象类自带的查询方法 List<User> users = userDao.selectList(null); int code=users==null?Code.QUERY_ERR:Code.QUERY_OK; return new Result(code,null,users); } @Override public Result getUserById(Integer userId) { User user = userDao.selectById(userId); int code= user==null?Code.QUERY_ERR:Code.QUERY_OK; return new Result(code,null,user); } @Override public Result saveUser(User user) { //BaseMapper<泛型>抽象类自带的添加方法 int insert = userDao.insert(user); int code= insert>0?Code.SAVE_OK:Code.SAVE_ERR; return new Result(code,null,insert); } @Override public Result updateUser(User user) { //BaseMapper<泛型>抽象类自带的修改方法 int update = userDao.updateById(user); int code= update>0?Code.UPDATE_OK:Code.UPDATE_ERR; return new Result(code,null,update); } @Override public Result deleteUser(Integer userId) { //BaseMapper<泛型>抽象类自带的删除方法 int i = userDao.deleteById(userId); int code= i>0?Code.DELETE_OK:Code.DELETE_ERR; return new Result(code,null,i); } }
@RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping public Result queryUser() { return userService.queryUser(); } @GetMapping("/{id}") public Result getUserById(@PathVariable Integer id) { return userService.getUserById(id); } @PostMapping public Result saveUser(@RequestBody User user) { return userService.saveUser(user); } @PutMapping public Result updateUser(@RequestBody User user){ return userService.updateUser(user); } @DeleteMapping("/{id}") public Result deleteUser(@PathVariable Integer id){ return userService.deleteUser(id); } }
public Result pageSelect(Integer current,Integer size) {
IPage page=new Page<>(current,size);
IPage<User> page1 = userDao.selectPage(page,null);
int code=page1.getRecords()==null?Code.QUERY_ERR:Code.QUERY_OK;
return new Result(code,null,page1);
}
@Configuration
public class MpConfig {
@Bean
public MybatisPlusInterceptor mpInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
自带分页查询的原理是在基本查询时进行拦截并进行切面编程加入limit语句实现分页
@GetMapping("/{current}/{size}")
public Result pageUser(@PathVariable("current") Integer current,
@PathVariable("size") Integer size){
return userService.pageSelect(current,size);
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HYMfI7h7-1663767549762)(C:\Users\冯瑞涛\AppData\Roaming\Typora\typora-user-images\1663205836197.png)]
访问和返回方法
关闭多余日志在 application.yml文件中写入
spring:
main: #关闭spring日志
banner-mode: off
mybatis-plus:
global-config: #关闭mybatis-plus日志
banner: false
创建Wrapper接口的实现类对象来给查询加条件(以下代码为业务层代码)
第一个实现类(QueryWrapper)写法⬇
@Override
public Result conditionSelect(User user) {
//QueryWrapper对象常规用法
QueryWrapper<User> wrapper =new QueryWrapper<>();
wrapper.lt("userBalance",50);
wrapper.gt("userBalance",100);
List<User> users = userDao.selectList(wrapper);
int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
return new Result(code,null,users);
}
第二种写法(lambda写法)⬇
public Result conditionSelect(User user) {
// QueryWrapper lambda用法
QueryWrapper<User> wrapper =new QueryWrapper<>();
wrapper.lambda().lt(User::getUserBalance,50);
wrapper.lambda().gt(User::getUserBalance,100);
List<User> users = userDao.selectList(wrapper);
int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
return new Result(code,null,users);
}
第二个实现类(LambdaQueryWrapper)写法⬇
public Result conditionSelect(User user) {
//可替代上方lambda写法
LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper();
wrapper.lt(User::getUserBalance,100);
wrapper.gt(User::getUserBalance,100);
List<User> users = userDao.selectList(wrapper);
int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
return new Result(code,null,users);
}
and条件
//直接写入两相反条件即可
wrapper.lt(User::getUserBalance,100);
wrapper.gt(User::getUserBalance,100);
//连接写法
wrapper.lt(User::getUserBalance,100).gt(User::getUserBalance,100);
or条件
wrapper.lt(User::getUserBalance,100).or();//在第一个条件后加.or()即可
wrapper.gt(User::getUserBalance,100);
条件个数不定查询
//Wrapper接口下的所有方法均由一个boolean类型的参数可限定条件是否加入查询
//常规写法
if(user.balance!=null){
wrapper.lt(User::getUserBalance,100);
wrapper.gt(User::getUserBalance,100);
}
//wrapper写法(直接在条件加入语句中第一个参数位置写入条件)
wrapper.lt(user.balance!=null,User::getUserBalance,100);
wrapper.gt(user.balance!=null,User::getUserBalance,100);
模糊查询语句
wrapper.like(User::getUserName,"张");//用like方法进行模糊查询
查询投影
//通过select方法来实现查询投影(需要查询哪些字段写哪些字段)
wrapper.select(User::getUserId,User::getUserName);
特殊查询投影
//仅有QueryWrapper实现类可实现该种查询
QueryWrapper<User> wrapper =new QueryWrapper<>();
//查询统计数
wrapper.select("count(*) as count");
//使用selectMaps方法结果会成为map集合返回
List<Map<String, Object>> users = userDao.selectMaps(wrapper);
分组统计查询
QueryWrapper<User> wrapper =new QueryWrapper<>();
wrapper.select("count(*) as count");
wrapper.groupBy("roleId");//使用groupby方法分组
List<Map<String, Object>> users = userDao.selectMaps(wrapper);
查询条件统计(lambda实现类对象条件下)
1.等匹配
wrapper.eq(User::getUserName,"张三")
2.范围查询
//between语句
wrapper.between语句(User::getUserBalance,50,100)
//实体类名与表名不同时使用
@TableName(value = "db_user")
//实体类属性名与表属性名不同时使用
@TableField(value = "pwd")
//指定实体类中某个字段为主键时使用
@TableId
//实体类该字段不参与查询时使用
@TableField(select = false)
注解方式
@TableId(type = IdType.NONE)
/*type的值有:
IdType.AUTO:按数据库指定策略生产id
IdType.NONE:无生成策略
IdType.ASSIGN_ID:mybatisplus生成策略为(时间戳+服务器mac码+12位序列号)
IdType.ASSIGN_UUID:自己手写一个UUID类型的id生成策略
IdType.INPUT:自己输入一个id*/
application.yml文件配置
mybatis-plus:
global-config:
db-config:
id-type: none
#可能的值同注解一样
注解方式
//在实体类中的主键属性上方写
@TableName(value = "表名")
application.yml文件配置通用
mybatis-plus:
global-config:
db-config:
table-prefix: 表前缀名
先在实体类与数据库表中添加状态字段:
注解方式
public class User {
private Long userId;
private String userName;
private Double userBalance;
//逻辑删除专用注解value(未删除值)delval(已删除值)
@TableLogic(value = "0",delval = "1")
private Integer state;
//状态字段,字段名随意,需要与数据库中字段名相同
}
application.yml文件配置通用
mybatis-plus:
global-config:
db-config:
logic-delete-field: state #指定逻辑删除状态字段
logic-not-delete-value: 0 #未删除的值
logic-delete-value: 1 #已删除的状态值
mybatisplus批量删除
public Result sumDelete(){
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//mybatisplus自带的批量删除方法(需要一个存有需删除数据id的集合作为参数)
int i = userDao.deleteBatchIds(list);
int code = i > 0 ? Code.DELETE_OK : Code.DELETE_ERR;
return new Result(code,null,i);
}
字段
logic-not-delete-value: 0 #未删除的值
logic-delete-value: 1 #已删除的状态值
mybatisplus批量删除
```java
public Result sumDelete(){
List<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//mybatisplus自带的批量删除方法(需要一个存有需删除数据id的集合作为参数)
int i = userDao.deleteBatchIds(list);
int code = i > 0 ? Code.DELETE_OK : Code.DELETE_ERR;
return new Result(code,null,i);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。