1 MybatisPlus (MB)学习

1.1 User类(pojo)

package com.jt.pojo;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;import java.io.Serializable;@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
//1 将对象与表进行关联
//规则:如果表名与对象名一致时,名称可以省略
//     如果字段名与属性名一致,则注解可以省略
//序列化接口的作用:保证对象网络传输的有效性 网络传输(不同的服务器之间传递同一个对象)
//对象与表关联
@TableName("demo_user")
public class User implements Serializable {//序列化@TableId(type = IdType.AUTO)             //table + 主键     //主键自增/非空/UUID /生成唯一编号private Integer id;@TableField("name")//标识属性与字段的映射private String name;@TableField("age")private Integer age;@TableField("sex")private String sex;
}

1.2 UserMapper 接口(要使用MP 除了要在pml中导包,还要在接口中继承 BaseMapper<User>)

package com.jt.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;
import org.apache.ibatis.annotations.Mapper;import java.util.List;
/*@Mapper//将接口交给Spring管理,spring创建对象*/
/*1 继承BaseMapper时,必须添加泛型对象
* 2 自己的方法不要与接口方法重名
* */
public interface UserMapper extends BaseMapper<User> {List<User> findAll();void insert1(User user);void update1(String name,String name1);List<User> findList(Integer age,String sex);
}

1.2.1 inser语句 按照id查询(需要先将接口注入)

package com.jt.test;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.net.PortUnreachableException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;@SpringBootTest
public class BaseMapper {@Autowiredprivate UserMapper userMapper;//查询id查询数据库 id = 231@Testpublic void selectById(){int id = 231;userMapper.selectById(id);}}
@Testpublic void selectById(){int id = 231;userMapper.selectById(id);}

1.2.2 按照属性查询(使用构造器,创建对象封装数据)

 @Testpublic void select01(){//1 通过创建对象封装数据User user = new User();user.setName("小乔").setSex("女");//2 构建条件构造器 根据条件不为null的对象属性 构造Sql语句: sql:select * from demo_user where name = "小乔" and sex = "女"select from deQueryWrapper queryWrapper = new QueryWrapper(user);//where name = "小乔" and sex = "女"List<User> userlist = userMapper.selectList(queryWrapper);System.out.println(userlist);}

注意 : 构建条件构造器 根据条件不为null的对象属性

1.2.3 逻辑运算符查询

 /**逻辑运算符: = eq, > qt , < lt , >= ge <= le != ne** 如果不加泛型,则不可以链式查询  queryWrapper.eq("name", "小乔").eq("sex", "女");* */@Testpublic void select02(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();QueryWrapper<User> user = queryWrapper.eq("name", "小乔").eq("sex", "女");List<User> users = userMapper.selectList(user);System.out.println(users);}

注意:创建出来的构造器需要添加泛型,负责不能链接查询

1.2.4 万能转义字符  <![CDATA[]] Mybatis 写法>

  /*万能转义字符 <![CDATA[]]> */@Testpublic void select03(){//1 mybatis写法List<User> user = userMapper.findList(18, "女");System.out.println(user);//2 mp写法QueryWrapper<User> queryWrapper = new QueryWrapper<>();QueryWrapper<User> queryWrapper1 = queryWrapper.lt("age", 18).eq("sex", "女");List<User> users = userMapper.selectList(queryWrapper1);System.out.println(users);}

注意:mybatis 写法,需要下UserMapper.xml文件与接口,而MP方法不需要接口,与xml文件

1.2.4.1 UserMapper接口

package com.jt.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jt.pojo.User;
import org.apache.ibatis.annotations.Mapper;import java.util.List;
/*@Mapper//将接口交给Spring管理,spring创建对象*/
/*1 继承BaseMapper时,必须添加泛型对象
* 2 自己的方法不要与接口方法重名
* */
public interface UserMapper extends BaseMapper<User> {List<User> findList(Integer age,String sex);
}

1.2.4.2 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.UserMapper"><!--Oracle中 ;号必定报错  不要加;号  --><!--转移字符  < &lt/*万能转义字符 <![CDATA[]]> */--><select id="findList" resultType="User"><![CDATA[select * from demo_user where age < #{age} and sex = #{sex}]]></select>
</mapper>

1.2.5 模糊查询(左查询对应什么什么开头,右查询对应什么什么结尾)

 /**关键字like:like "%xxxx%"*       以军开头:lika ”军%“ 对应:queryWrapper.likeLeft*       以军结尾:like ”%军“ 对应:queryWrapper.likeRight* */@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper();queryWrapper.like("name", "君");List<User> list = userMapper.selectList(queryWrapper);System.out.println(list);}

1.2.6 查询排序

 @Testpublic void select05(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq("sex", "女").orderByDesc("age");List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);}

1.2.7 动态Sql 前端传值

/**动态Sql查询,如果数据有值,则拼接where条件*           如果数据无值,则不拼接where条件 查询所有*   语法:condition:true 则拼接where条件*                  false 不拼接where条件*  */@Testpublic void select06(){String name = null;int age = 0;boolean nameFlag = name == null ? false:true;boolean ageFlag = name == null ? false:true;QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.eq(nameFlag, "name", name).eq(ageFlag, "age", age);List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);}

注意: boolean nameFlag = name == null ? false:true;

如果nameFlag有值为true,如果无值返回false

queryWrapper.eq(nameFlag, "name", name).eq(ageFlag, "age", age);

如果nameFlag 的值为false则不拼接where条件

例如: 如果name = null age = 20 则sql语句为

select * from demo_user where id = 20  如果name,age都为null,则查询所有

1.2.8 查询多个的值

@Testpublic void select07(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", 1,2,3,4);//查4个/* queryWrapper.in("id", "1,2,3,4");//查1个*/List<User> users = userMapper.selectList(queryWrapper);
}

注意;queryWrapper.in("id", "1,2,3,4"); 只查询id = "1,2,3,4" 的数据 ,错写法

 @Testpublic void select08(){//数字转集合 Arrays.asList(arry)  基本类型的数组没有arrays,只能通过下标来查找。Integer[] arry = new Integer[]{1,4,5,6};List<Integer> ids = Arrays.asList(arry);List<User> users = userMapper.selectBatchIds(ids);System.out.println(users);}

1.2.9 根据业务,只需要主键的查询

@Testpublic void select09(){QueryWrapper<User> queryWrapper = new QueryWrapper();queryWrapper.eq("sex", "男");/*List<User> users = userMapper.selectList(queryWrapper);System.out.println(users);*/List<Object> ids = userMapper.selectObjs(queryWrapper);System.out.println(ids);}

1.2.10 update 语句 : 修改操作(Byid 传入的是一个对象)

@Testpublic void test1(){User user = new User();//Sql:update demo_user set name = "车臣", age = 10,sex = "男" where id = 231user.setId(234).setName("车臣").setAge(10).setSex("男");//byid 表示Id只当作where条件//其他不为空的null的属性,当作set条件userMapper.updateById(user);}

1.2.11 update 语句 : 修改操作(Byid 传入2个值,第一个为对象,相当于SQL语句中华的set语句,第二个为构造器,改那个值,相当于Sql语句中的 where 语句)

   /** 2  将name = "阿富汗" 改为 name =*   arg1: 实体对象 set条件的数据*   arg2:  updatewrapper 动态拼接where条件* */@Testpublic void text02(){User user = new User();user.setName("阿富汗").setAge(40).setSex("911");UpdateWrapper<User> UpdateWrapper = new UpdateWrapper<>();UpdateWrapper.eq("name", "塔利班");userMapper.update(user, UpdateWrapper);System.out.println("刷新数据");}

1.3 Mybatis 传参

1.3.1 规则

/***  规则:*      1.Mybatis 原生只支持单值传参*      2.如果是多值,则想办法封装为单值*          方法:  1.封装为对象*                2.封装为Map集合<K,V> ={minAge: 18,maxAge:100}*  补充说明: 现在mybatis版本 如果多值传参 则自动封装为Map集合*           Key:参数名称  value: 参数的值*/

1.3.2 用对象封装

1.3.2.1 测试类

/*** Mybatis 参数传递说明* 查询: sex="男" age > 18岁*/@Testpublic void test05(){//参数使用对象进行封装User user = new User();user.setSex("男").setAge(18);List<User> users = userMapper.select01(user);System.out.println(users);}

1.3.2.2 接口

package com.jt.mapper;import com.jt.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;
/*@Mapper//将接口交给Spring管理,spring创建对象*/
public interface UserMapper {List<User> select01(User user);}

1.3.2.3 映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.UserMapper"><!--Oracle中 ;号必定报错  不要加;号  --><!--查询: sex="男" age > 18岁取值符号: #号 有预编译效果 能用#号不用$ 自动的为参数添加一对 引号""#号用法: #{属性/key} --><select id="select01" resultType="User">select * from demo_user where sex = #{sex} and age &lt; #{age}</select></mapper>

1.3.3 用Map数组封装

1.3.3.1 测试类

/*** Mybatis 参数传递说明* 查询: age < 18  or age > 100* 思考: 1.是否可以封装为对象??  不可以!!**/@Testpublic void test06(){Integer minAge = 18;Integer maxAge = 100;List<User> users = userMapper.select02(minAge, maxAge);System.out.println(users);}

1.3.3.2 接口

package com.jt.mapper;import com.jt.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;
/*@Mapper//将接口交给Spring管理,spring创建对象*/
public interface UserMapper {List<User> select02(@Param("minAge") Integer minAge ,@Param("maxAge") Integer maxAge) ;}

1.3.3.3 映射文件

 <select id="select02" resultType="User">select * from demo_user where age &lt; #{minAge} or age > #{maxAge}</select>

1.3.4 如果只有一个参数(不是对象/map),则名称可以任意 Mybatis认为只有一个参数,不会有错.

1.3.4.1 测试类

  /*** Mybatis 参数传递说明* 查询name="王昭君"* 他不属于*//*<!--说明: 如果只有一个参数(不是对象/map),则名称可以任意 Mybatis认为只有一个参数,不会有错. -->*/@Testpublic void test07(){String name = "王昭君";userMapper.select03(name);}

1.3.4.2 接口

package com.jt.mapper;import com.jt.pojo.User;
import org.apache.ibatis.annotations.Param;import java.util.List;
/*@Mapper//将接口交给Spring管理,spring创建对象*/
public interface UserMapper {List<User> select03(String name);
}

1.3.4.3 映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jt.mapper.UserMapper"><!--Oracle中 ;号必定报错  不要加;号  --><!--查询: sex="男" age > 18岁取值符号: #号 有预编译效果 能用#号不用$ 自动的为参数添加一对 引号""#号用法: #{属性/key} --><select id="select03" resultType="User">select * from demo_user where name = #{aaa}</select></mapper>

2 关于查询总结

1.MP核心: 以对象的方式操作数据库

2.条件构造器: new QueryWrapper<>(); 动态拼接where条件.

3.拼接规则: 根据对象中不为null的属性充当where条件.

4.特殊转义字符: = eq, > gt, < lt, >= ge, <= le,!= ne

5.xml文件中的万能的转义字符: <![CDATA[ sql语句 ]]>

6.关键字: like order by in

7.动态Sql语法:
condition: true 拼接where条件
false 不拼接where条件

MybatisPlus操作相关推荐

  1. Mybatis-plus操作json字段实战

    后端动态列设计与实现三部曲,这是最后一步,使用java语言,结合mybatis-plus神技操作json字段. 简单介绍下mybatis-plus,大厂中mybatis使用的非常多,而mybatis- ...

  2. Mybatis-Plus操作数据库

    目录 一.使用mybatis-Plus前期准备 二.使用mybatis-Plus分装方法 1.1.根据id进行增删改查 1.2.根据条件构造器进行删除.修改.查询 三.mybatis-Plus使用注解 ...

  3. mybatisplus 操作另一个数据库的数据_c#连接sql数据库以及操作数据库

    1.概述 http://ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤: 第一,使用SqlConnection对象连接数据库: 第二,建立SqlCommand对象,负责SQL语句的执行 ...

  4. MybatisPlus操作模板

    1. 添加相关依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId& ...

  5. mybatisplus 操作另一个数据库的数据_MySQL数据库的基础操作

    一.基本概念 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件). 数据表(table) - 某种特定类型数据的结构化清单. 模式(schema) - 关于 ...

  6. mybatisplus 操作另一个数据库的数据_MySQL的数据库操作详解

    一.mysql查看数据库 在 MySQL 中,可使用 SHOW DATABASES 语句来查看或显示当前用户权限范围以内的数据库.查看数据库的语法格式为: SHOW DATABASES [LIKE ' ...

  7. mybatisplus 操作另一个数据库的数据_实例分析:python操作数据库项目

    本文根据一个项目实例,记录分享一下python将数据库的内容提取显示到程序界面的过程及相关设置,探索python操作数据库的用法.主要分享内容:1.显示数据库内容.2.修改数据库内容.3.表格控件指定 ...

  8. Mybatis-Plus批量插入数据太慢,使用rewriteBatchedStatements属性优化,堪称速度与激情!

    rewriteBatchedStatements神秘属性 前言 一.rewriteBatchedStatements参数 二.批量添加员工信息 1.普通saveBatch批量插入 2.设置rewrit ...

  9. Spring Boot 2 学习笔记(2 / 2)

    Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...

最新文章

  1. 清华大学大数据研究中心2020年RONG奖学金答辩会成功举办
  2. python 3d绘图平面_python 用 matplotlib 在 3D 空间中绘制平面 实例详解
  3. C六:指针可以比较大小
  4. LWIP裸机环境下实现TCP与UDP通讯(转)
  5. php artisan 出错,Laravel 5.2 php artisan migrate:回滚错误
  6. 为什么会有那么多的人选择Java?学Java到底好不好?
  7. 打印pdf就一页_PDF 文件转换工具
  8. 算法图解:如何判断括号是否有效?
  9. 对windows更多的理解
  10. iOS开发过程中常见错误问题及解决方案
  11. 定制clojure的REPL
  12. php学习第一讲----php是什么?
  13. Java中Properties类的操作配置文件
  14. Nutch1.2二次开发详细攻略(二)【图文】------Windows平台下Nutch1.2的搭建
  15. WIN2016群集存储
  16. Talk预告 | 港科大(广州)助理教授王泽宇: 提升数字内容创作中的创意实现与迭代过程
  17. php博客添加live2d,在Hexo博客上添加可爱的Live 2D模型
  18. 英语学习必备:Eudic欧路词典 for Mac增强版
  19. 比原链CEO朗豫:DeFi让用户真正理解区块链,意义重大
  20. nginx单点故障的 处理方案keepalived

热门文章

  1. datagrip连接mysql报错[08S01]
  2. 微型计算机原理作业,微机原理作业习题集
  3. 人人都是艺术家!谈谈那些奇怪的字符(上
  4. java 获取当前方法的调用栈
  5. 游戏设计自学记录(7)
  6. php 去掉json外层 方括号,从 JSON 中删除方括号 - WITHOUT_ARRAY_WRAPPER 选项
  7. python实现将文件上传到virustotal获取报告
  8. windwos编程_CreateFile
  9. halcon ABB机械手 手眼标定
  10. 【Keras之父】DL用于Text