当前位置:   article > 正文

Mybatis-Plus简述_mybatiesplus 对象集合属性

mybatiesplus 对象集合属性

 一. MP实现原理

官网:MyBatis-Plus

对象的方式操作数据库,单表几乎不写Sql.

  1. 对象与表一一对应@TableName("item")
  2. 对象的属性与表的字段一一对应@TableField("id") 如果字段名称与属性名称一致,则省略,包含驼峰规则 (@TableId(type = IdType.AUTO)主键自增)
  3. MP将常见的CURD的接口方法进行了封装,只需要Mapper层实现接口BaseMapper<Item>.
  4. MP根据自定的接口,动态的生成CURD的Sql,从此单表操作,程序员无需编辑Sql.

二. 具体配置流程:

导入jar包

说明: MybatisPlus的包 内部已经添加了Mybatis,所以包应该2选1.

  1. <!--spring整合mybatis-plus -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.4.3</version>
  6. </dependency>

实现POJO对象与表映射

  1. @Data
  2. @Accessors(chain = true)
  3. @TableName("item") //对象与表一一映射
  4. public class Item extends BasePojo{
  5. @TableId(type = IdType.AUTO)//主键自增
  6. //@TableField("id") //如果字段名称与属性名称一致,则省略,包含驼峰规则
  7. private Integer id; //商品Id号
  8. private String title; //商品标题信息
  9. private String sellPoint; //卖点信息
  10. private Integer price; //商品价格
  11. private Integer num; //商品数量
  12. private String images; //商品图片
  13. private Integer itemCatId; //商品分类ID号
  14. private Boolean status; //状态信息 0 下架 1 上架
  15. }

Mapper接口继承BaseMapper接口

  1. import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  2. //必须添加泛型,因为泛型对象与表关联
  3. public interface ItemMapper extends BaseMapper<Item> {
  4. }

修改YML映射文件

  1. #SpringBoot整合Mybatis-plus
  2. mybatis-plus:
  3. #指定别名包
  4. type-aliases-package: com.jt.pojo
  5. #扫描指定路径下的映射文件
  6. mapper-locations: classpath:/mappers/*.xml
  7. #开启驼峰映射
  8. configuration:
  9. map-underscore-to-camel-case: true
  10. # 一二级缓存默认开始 所以可以简化

 三. 测试:

1) 增

对象不为null的属性自动插入表中对应字段中

  1. /**
  2. * 2.测试数据新增入库操作
  3. * 核心: 以对象的方式操作数据库
  4. */
  5. @Test
  6. public void test02(){
  7. Item item = new Item();
  8. item.setTitle("商品标题信息")
  9. .setSellPoint("卖点信息")
  10. .setNum(100);
  11. itemMapper.insert(item);
  12. }

2) 删

3) 改

 

4) 查

①简单查询

  1. // 查询所有数据
  2. public void test01(){
  3. //查询全部数据,不需要条件
  4. List<Item> list = itemMapper.selectList(null);
  5. }
  6. // 查询id=1的数据
  7. public void test03(){
  8. Item item = itemMapper.selectById(1);
  9. }
  10. /**
  11. * 查询: 只查询主键信息,
  12. * 适用场景: 适用关联查询!!! 主键可以被其它的关联
  13. */
  14. public void test10(){
  15. List idList = itemMapper.selectObjs(null);
  16. }
  17. /**
  18. * 4.根据title/sellPoint查询数据
  19. * 查询titile="手机" and sellPoint="贵就好"
  20. * 核心:
  21. * 1.以对象的方式操作数据库.
  22. * 2.根据对象中不为null的属性,充当条件
  23. */
  24. public void test04(){
  25. //对象的方式封装数据,只能实现and连接
  26. Item item = new Item();
  27. item.setTitle("手机").setSellPoint("贵就好");
  28. //条件构造器: 动态拼接where条件的 set赋值解析之后变为 =号 默认使用and进行拼接
  29. QueryWrapper<Item> queryWrapper = new QueryWrapper<>(item);
  30. List<Item> list = itemMapper.selectList(queryWrapper);
  31. }
  32. /**
  33. * 查询 价格大于500,小于200000
  34. * 1.条件构造器的连接符:
  35. * 1.等号 = eq
  36. * 2.大于 > gt
  37. * 3.小于 < lt
  38. * 4.大于等于 >= ge
  39. * 5.小于等于 <= le
  40. * 6.不等于 != ne
  41. * 2.条件间关联用法 默认使用and连接,
  42. * 如果使用or,则写or方法
  43. */
  44. public void test05(){
  45. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  46. queryWrapper.gt("price",500)
  47. //.or()
  48. .lt("price",200000);
  49. List<Item> list = itemMapper.selectList(queryWrapper);
  50. }
  51. // 按照条件查询单条数据
  52. public void test01(){
  53. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  54. queryWrapper.gt("price",500)
  55. //.or()
  56. .lt("price",200000);
  57. Item item = itemMapper.selectOne(queryWrapper);
  58. }
  59. /**
  60. * 查询: title中包含"华为"的数据
  61. * Sql: select * from item where title like "%华为%"
  62. * 知识点:
  63. * 1. 以xxx开头 "xxx%" 右侧 LikeRight
  64. * 2. 以xxx结尾 "%xxx" 左侧 likeLeft
  65. * 3. xxx "%xxx%" like
  66. */
  67. public void test07(){
  68. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  69. queryWrapper.like("title","华为");
  70. List<Item> list = itemMapper.selectList(queryWrapper);
  71. }
  72. /**
  73. * 查询: id为 1,2,3,4的数据
  74. * 必须用引用类型的数组
  75. * Sql: select * from item where id in (1,2,3,4)
  76. */
  77. public void test08(){
  78. Integer[] ids = {1,2,3,4}; // 不能使用基本类型int
  79. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  80. queryWrapper.in("id",ids);
  81. List<Item> list = itemMapper.selectList(queryWrapper);
  82. //2.API2 数组转化为集合
  83. List idList = Arrays.asList(ids);
  84. List<Item> list2 = itemMapper.selectBatchIds(idList);
  85. }

②复杂查询

  1. /**
  2. * 查询价格大于600的商品,并且要求按照 价格降序排列.
  3. * Sql:select * from item where price>600 order by price desc
  4. */
  5. public void test06(){
  6. QueryWrapper<Item> queryWrapper = new QueryWrapper();
  7. queryWrapper.gt("price",600)
  8. .orderByDesc("price");
  9. List<Item> list = itemMapper.selectList(queryWrapper);
  10. }
  11. /**
  12. * 查询: 根据对象中不为null的数据,查询数据库
  13. * 核心知识点: 动态sql拼接
  14. */
  15. public void test09(){
  16. String title = "";
  17. String sellPoint = "工艺好";
  18. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  19. queryWrapper.eq(StringUtils.hasLength(title),"title",title);
  20. queryWrapper.eq(StringUtils.hasLength(sellPoint),"sell_point",sellPoint);
  21. List<Item> list = itemMapper.selectList(queryWrapper);
  22. }

③分页查询

  1. /**
  2. * 1.获取满足条件的记录总数
  3. * 2.进行分页操作
  4. * 原则:
  5. * 1.手写Sql 业务层级简单,Sql高效直观.
  6. * 2.利用MP实现 业务层复杂, Sql不写
  7. * Sql: select * from item limit 起始位置,条数
  8. * @param pageResult
  9. * @return
  10. */
  11. @Override
  12. public PageResult getItemList(PageResult pageResult) {
  13. QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
  14. queryWrapper.like("title", pageResult.getQuery());
  15. //2.完成分页操作
  16. //2.1 准备一个分页对象,MP基于初始化条件,获取分页其它数据
  17. IPage<Item> page = new Page<>(pageResult.getPageNum(),
  18. pageResult.getPageSize());
  19. page = itemMapper.selectPage(page,queryWrapper);
  20. //2.2 获取总数,获取记录数
  21. long total = page.getTotal();
  22. List<Item> list = page.getRecords();
  23. return pageResult.setTotal(total).setRows(list);
  24. }

 配置文件制定数据库类型

  1. @Configuration //标识配置类
  2. public class MybatisPlusConfig {
  3. //MybatisPlusInterceptor MP拦截器 负责指定数据库类型
  4. @Bean
  5. public MybatisPlusInterceptor mybatisPlusInterceptor() {
  6. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  7. interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB));
  8. return interceptor;
  9. }
  10. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/1012910
推荐阅读
相关标签
  

闽ICP备14008679号