赞
踩
官网:MyBatis-Plus
以对象的方式操作数据库,单表几乎不写Sql.
导入jar包
说明: MybatisPlus的包 内部已经添加了Mybatis,所以包应该2选1.
<!--spring整合mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
实现POJO对象与表映射
@Data @Accessors(chain = true) @TableName("item") //对象与表一一映射 public class Item extends BasePojo{ @TableId(type = IdType.AUTO)//主键自增 //@TableField("id") //如果字段名称与属性名称一致,则省略,包含驼峰规则 private Integer id; //商品Id号 private String title; //商品标题信息 private String sellPoint; //卖点信息 private Integer price; //商品价格 private Integer num; //商品数量 private String images; //商品图片 private Integer itemCatId; //商品分类ID号 private Boolean status; //状态信息 0 下架 1 上架 }
Mapper接口继承BaseMapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper; //必须添加泛型,因为泛型对象与表关联 public interface ItemMapper extends BaseMapper<Item> { }
修改YML映射文件
#SpringBoot整合Mybatis-plus mybatis-plus: #指定别名包 type-aliases-package: com.jt.pojo #扫描指定路径下的映射文件 mapper-locations: classpath:/mappers/*.xml #开启驼峰映射 configuration: map-underscore-to-camel-case: true # 一二级缓存默认开始 所以可以简化
对象不为null的属性自动插入表中对应字段中
- /**
- * 2.测试数据新增入库操作
- * 核心: 以对象的方式操作数据库
- */
- @Test
- public void test02(){
- Item item = new Item();
- item.setTitle("商品标题信息")
- .setSellPoint("卖点信息")
- .setNum(100);
- itemMapper.insert(item);
- }
- // 查询所有数据
- public void test01(){
- //查询全部数据,不需要条件
- List<Item> list = itemMapper.selectList(null);
- }
- // 查询id=1的数据
- public void test03(){
- Item item = itemMapper.selectById(1);
- }
-
- /**
- * 查询: 只查询主键信息,
- * 适用场景: 适用关联查询!!! 主键可以被其它的关联
- */
- public void test10(){
- List idList = itemMapper.selectObjs(null);
- }
-
- /**
- * 4.根据title/sellPoint查询数据
- * 查询titile="手机" and sellPoint="贵就好"
- * 核心:
- * 1.以对象的方式操作数据库.
- * 2.根据对象中不为null的属性,充当条件
- */
- public void test04(){
- //对象的方式封装数据,只能实现and连接
- Item item = new Item();
- item.setTitle("手机").setSellPoint("贵就好");
- //条件构造器: 动态拼接where条件的 set赋值解析之后变为 =号 默认使用and进行拼接
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>(item);
- List<Item> list = itemMapper.selectList(queryWrapper);
- }
-
- /**
- * 查询 价格大于500,小于200000
- * 1.条件构造器的连接符:
- * 1.等号 = eq
- * 2.大于 > gt
- * 3.小于 < lt
- * 4.大于等于 >= ge
- * 5.小于等于 <= le
- * 6.不等于 != ne
- * 2.条件间关联用法 默认使用and连接,
- * 如果使用or,则写or方法
- */
- public void test05(){
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.gt("price",500)
- //.or()
- .lt("price",200000);
- List<Item> list = itemMapper.selectList(queryWrapper);
- }
- // 按照条件查询单条数据
- public void test01(){
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.gt("price",500)
- //.or()
- .lt("price",200000);
- Item item = itemMapper.selectOne(queryWrapper);
- }
-
- /**
- * 查询: title中包含"华为"的数据
- * Sql: select * from item where title like "%华为%"
- * 知识点:
- * 1. 以xxx开头 "xxx%" 右侧 LikeRight
- * 2. 以xxx结尾 "%xxx" 左侧 likeLeft
- * 3. xxx "%xxx%" like
- */
- public void test07(){
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.like("title","华为");
- List<Item> list = itemMapper.selectList(queryWrapper);
- }
-
- /**
- * 查询: id为 1,2,3,4的数据
- * 必须用引用类型的数组
- * Sql: select * from item where id in (1,2,3,4)
- */
- public void test08(){
- Integer[] ids = {1,2,3,4}; // 不能使用基本类型int
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.in("id",ids);
- List<Item> list = itemMapper.selectList(queryWrapper);
- //2.API2 数组转化为集合
- List idList = Arrays.asList(ids);
- List<Item> list2 = itemMapper.selectBatchIds(idList);
-
- }
②复杂查询
- /**
- * 查询价格大于600的商品,并且要求按照 价格降序排列.
- * Sql:select * from item where price>600 order by price desc
- */
- public void test06(){
- QueryWrapper<Item> queryWrapper = new QueryWrapper();
- queryWrapper.gt("price",600)
- .orderByDesc("price");
- List<Item> list = itemMapper.selectList(queryWrapper);
- }
-
- /**
- * 查询: 根据对象中不为null的数据,查询数据库
- * 核心知识点: 动态sql拼接
- */
- public void test09(){
- String title = "";
- String sellPoint = "工艺好";
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.eq(StringUtils.hasLength(title),"title",title);
- queryWrapper.eq(StringUtils.hasLength(sellPoint),"sell_point",sellPoint);
-
- List<Item> list = itemMapper.selectList(queryWrapper);
- }
- /**
- * 1.获取满足条件的记录总数
- * 2.进行分页操作
- * 原则:
- * 1.手写Sql 业务层级简单,Sql高效直观.
- * 2.利用MP实现 业务层复杂, Sql不写
- * Sql: select * from item limit 起始位置,条数
- * @param pageResult
- * @return
- */
- @Override
- public PageResult getItemList(PageResult pageResult) {
- QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
- queryWrapper.like("title", pageResult.getQuery());
-
- //2.完成分页操作
- //2.1 准备一个分页对象,MP基于初始化条件,获取分页其它数据
- IPage<Item> page = new Page<>(pageResult.getPageNum(),
- pageResult.getPageSize());
- page = itemMapper.selectPage(page,queryWrapper);
-
- //2.2 获取总数,获取记录数
- long total = page.getTotal();
- List<Item> list = page.getRecords();
-
- return pageResult.setTotal(total).setRows(list);
- }
-
配置文件制定数据库类型
@Configuration //标识配置类 public class MybatisPlusConfig { //MybatisPlusInterceptor MP拦截器 负责指定数据库类型 @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB)); return interceptor; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。