springboot 整合 mybatis plus postgresql
依赖
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--postgresql-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>
建表测试
数据库表
create table t_club
(
id serial primary key,
name varchar(32) not null,
money int,
nick_name varchar(32),
birthday TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
create_time TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP,
update_time TIMESTAMP WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
实体类
package com.my.mybatis.test.demo.po;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.util.Date;
/**
* @author wangli66
***************************************************/
@Data
@TableName("t_club")
public class ClubPo {
/**
* 主键
* @TableId中可以决定主键的类型,不写会采取默认值,默认值可以在yml中配置
* AUTO: 数据库ID自增
* INPUT: 用户输入ID
* ID_WORKER: 全局唯一ID,Long类型的主键
* ID_WORKER_STR: 字符串全局唯一ID
* UUID: 全局唯一ID,UUID类型的主键
* NONE: 该类型为未设置主键类型
*/
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
private Double money;
private String nickName;
private Date birthday;
private Date createTime;
private Date updateTime;
}
mapper
package com.my.mybatis.test.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.my.mybatis.test.demo.po.ClubPo;
/**
* @author wangli66
***************************************************/
public interface ClubMapper extends BaseMapper<ClubPo> {
}
测试类
package com.my.mybatis.test.demo.test;
import com.my.mybatis.test.demo.dao.ClubMapper;
import com.my.mybatis.test.demo.dao.MoneyMapper;
import com.my.mybatis.test.demo.dao.StudentMapper;
import com.my.mybatis.test.demo.po.ClubPo;
import com.my.mybatis.test.demo.po.MoneyPo;
import com.my.mybatis.test.demo.po.StudentPo;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.List;
/**
* @author
***************************************************/
@SpringBootTest
public class TetMP {
private Logger logger = LoggerFactory.getLogger(TetMP.class);
@Autowired
ClubMapper clubMapper;
@Test
public void test3() {
String[] nameArr = {"xiaoming","xiaohong","xiaolan","xiaohua","xiaomei"};
String[] nickArr = {"Tom","Tony","Lily","Marry","Jerry"};
for(int i=0;i<5;i++) {
ClubPo clubPo = new ClubPo();
clubPo.setName(nameArr[i]);
clubPo.setMoney(9999.0*(i+1));
clubPo.setNickName(nickArr[i]);
clubPo.setBirthday(new Date());
clueMapper.insert(clubPo);
}
ClubPo clubPo = clubMapper.selectById(1);
logger.info("按id查询:"+clubPo);
List<ClubPo> clubPos = clubMapper.selectBatchIds(Arrays.asList(1, 2, 3));
logger.info("按id批量查询:"+clubPos);
}
}
数据库表
整体流程走一遍
controller
package com.my.mybatis.test.demo.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.my.mybatis.test.demo.po.ClubPo;
import com.my.mybatis.test.demo.service.ClubService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
*
***************************************************/
@RestController
@RequestMapping("/club")
public class ClubController {
@Autowired
private ClubService clubService;
/**
* @Description: 按id查询
* @param: [id]
* @return: com.my.mybatis.test.demo.po.ClubPo
* @Date: 2020/4/23
*/
@RequestMapping("/getInfo")
public ClubPo getInfo(String id) {
return clubService.getById(id);
}
/**
* @Description: 查询全量,不分页
* @param: []
* @return: java.util.List<com.my.mybatis.test.demo.po.ClubPo>
* @Date: 2020/4/23
*/
@RequestMapping("/getAll")
public List<ClubPo> getAll() {
return clubService.list();
}
/**
* @Description: 分页查询
* @param: [current, pageSize]
* @return: com.baomidou.mybatisplus.core.metadata.IPage<com.my.mybatis.test.demo.po.ClubPo>
* @Date: 2020/4/23
*/
@RequestMapping("/page")
public IPage<ClubPo> getPage(int current, int pageSize) {
IPage<ClubPo> clubPoIPage = new Page<>();
clubPoIPage.setCurrent(current);
clubPoIPage.setSize(pageSize);
IPage<ClubPo> page = clubService.page(clubPoIPage);
return page;
}
/**
* @Description: 条件查询
* @param: [po]
* @return: java.lang.Object
* @Date: 2020/4/23
*/
@RequestMapping("/getListMap")
public Collection<ClubPo> getListMap(ClubPo po) {
Map<String,Object> param = new HashMap<>();
param.put("name",po.getName());
param.put("nickName",po.getNickName());
Collection<ClubPo> clubPos = clubService.listByMap(param);
return clubPos;
}
/**
* @Description: 保存
* @param: [po]
* @return: void
* @Date: 2020/4/23
*/
@RequestMapping("/save")
public boolean save(ClubPo po) {
boolean save = clubService.save(po);
return save;
}
/**
* @Description: 批量保存
* @param: [pos]
* @return: boolean
* @Date: 2020/4/23
*/
@RequestMapping("/batchSave")
public boolean batchSave(List<ClubPo> pos) {
boolean b = clubService.saveBatch(pos);
return b;
}
/**
* @Description: 按id进行更新,不需要更新的字段传值为null
* @param: [po]
* @return: boolean
* @Date: 2020/4/23
*/
@RequestMapping("/update")
public boolean update(ClubPo po) {
boolean b = clubService.updateById(po);
return b;
}
/**
* @Description: 按id进行批量更新,不需要更新的字段传值为null
* @param: [po]
* @return: boolean
* @Date: 2020/4/23
*/
@RequestMapping("/batchUpdate")
public boolean batchUpdate(List<ClubPo> pos) {
boolean b = clubService.updateBatchById(pos);
return b;
}
/**
* @Description: 不确定数据库中是否存在时
* 入的实体类中ID为null就会新增(ID自增),
* 实体类ID值存在,如果数据库存在ID就会更新,如果不存在就会新增
* @param: [po]
* @return: boolean
* @Date: 2020/4/23
*/
@RequestMapping("/saveOrUpdate")
public boolean saveOrUpdate(ClubPo po) {
boolean b = clubService.saveOrUpdate(po);
return b;
}
/**
* @Description: 通过id删除
* @param: [userId]
* @return: void
* @Date: 2020/4/23
*/
@RequestMapping("/delete")
public void delete(String id){
clubService.removeById(id);
}
/*-------------------------以下为复杂查询------------------------------*/
/**
* @Description: 条件查询
* @param: [po]
* @return: void
* @Date: 2020/4/23
*/
@RequestMapping("/queryByCondition")
public void queryByCondition(ClubPo po) {
// 构建warpper
QueryWrapper<ClubPo> wrapper = new QueryWrapper<>();
// 查名字叫:xiaoming
// 同sql: select id,name,nickname,money,birthday,create_time,update_time from t_club where name = "xiaoming"
wrapper.lambda().eq(ClubPo::getName,"xiaoming");
clubService.list(wrapper);
// 查生日在
wrapper = new QueryWrapper<>();
// 同sql: select id,name,nickname,money,birthday,create_time,update_time from t_club where birthday > "2020-04-23 14:27:37.317000" and birthday < "2020-04-23 14:27:37.317000"
wrapper.lambda().gt(ClubPo::getBirthday,new Date(System.currentTimeMillis()-1000));
wrapper.lambda().le(ClubPo::getBirthday,new Date(System.currentTimeMillis()+1000));
clubService.list(wrapper);
// 查名字中有xiao的用户,并按照创建时间降序排列
wrapper = new QueryWrapper<>();
// 同sql: select id,name,nickname,money,birthday,create_time,update_time from t_club where name like "%xiao%" orderby create_time desc
wrapper.lambda().like(ClubPo::getName,"xiao");
wrapper.lambda().orderByDesc(ClubPo::getCreateTime);
clubService.list(wrapper);
// 使用mapper查询所有, select * from t_club
List<Club> clubs = clubMapper.selectList(null);// 传null可查
}
}
service
package com.my.mybatis.test.demo.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.my.mybatis.test.demo.po.ClubPo;
/**
* @author
***************************************************/
public interface ClubService extends IService<ClubPo> {
}
impl
package com.my.mybatis.test.demo.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.my.mybatis.test.demo.dao.ClubMapper;
import com.my.mybatis.test.demo.po.ClubPo;
import com.my.mybatis.test.demo.service.ClubService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author
***************************************************/
@Service
@Transactional
public class ClubServiceImpl extends ServiceImpl<ClubMapper, ClubPo> implements ClubService {
}
wrapper参数
当查询条件复杂的时候,我们可以使用MP的条件构造器,请参考下面的QueryWrapper条件参数说明
查询方式 | 方法说明 |
---|---|
setSqlSelect | 设置 SELECT 查询字段 |
where | WHERE 语句,拼接 + WHERE 条件 |
and | AND 语句,拼接 + AND 字段=值 |
or | OR 语句,拼接 + OR 字段=值 |
eq | 等于= |
allEq | 基于 map 内容等于= |
ne | 不等于<> |
gt | 大于> |
ge | 大于等于>= |
lt | 小于< |
le | 小于等于<= |
like | 模糊查询 LIKE |
notLike | 模糊查询 NOT LIKE |
in | IN 查询 |
notIn | NOT IN 查询 |
isNull | NULL 值查询 |
isNotNull | IS NOT NULL |
groupBy | 分组 GROUP BY |
having | HAVING 关键词 |
orderBy | 排序 ORDER BY |
orderByAsc | ASC 排序 ORDER BY |
orderByDesc | DESC 排序 ORDER BY |
exists | EXISTS 条件语句 |
notExists | NOT EXISTS 条件语句 |
between | BETWEEN 条件语句 |
notBetween | NOT BETWEEN 条件语句 |
addFilter | 自由拼接 SQL |
last | 拼接在最后,例如:last(“LIMIT 1”) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?