1.Spring 补充

1.1 Spring内部数据结构

1.数据的结构: Map 理解为容器
2.数据内容: KEY-VALUE -KEY:一般都是类名的首字母小写 helloController -Value: 一般存储的是经过反射等机制实例化的对象 Map<helloController,controller对象>
3.单例: 容器中只保存一个对象, spring容器管理对象的生命周期 和容器几乎同生共死
默认:单例对象
多例: 如果用户需要使用,则新创建一个对象交给用户使用,由用户管理对象的生命周期.

  1. bean配置文件说明
     <bean  id="唯一标识"   class="类的路径"  />  与Map集合进行关联

2.关于环境代码报错

2.1 数据库问题

Mysql数据库版本: 教师机 5.5 高版本的数据库6.0以上.

2.2 IDEA版本问题

修改mybatis的路径

3. MybatisPlus

3.1 MP介绍

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

3.2 特点说明

重点说明: MP适用于单表操作 如果遇到多表关联,则手写Sql效率更高.

3.3 MP入门案例

3.3.1 导入jar包

说明: 由于MP内部兼容了Mybatis 则引入MP之后将原来的mybatis的包删除.

<!--spring整合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency>

3.3.2 对象与表映射

3.3.3 继承公共的Mapper接口

3.3.4 修改YML配置文件

说明: springBoot应该由原来的Mybatis操作数据库,现在换成MP的机制,所以应该修改SpringBoot整合MP的操作.

3.3.4 编辑MP入门案例

对比Sql写法/MP写法的区别…

@SpringBootTest
public class TestMybatis {// sprign容器 <userMapper,代理对象>// 面向接口编程 扩展性好@Autowiredprivate UserMapper userMapper;//JDK动态代理//报错说明:com.jt.mapper.UserMapper.findAll  不匹配!!!!//关于测试类代码说明: 要求: public   返回值void  方法名称不能叫test@Testpublic void test01(){System.out.println(userMapper.getClass());List<User> userList = userMapper.findAll();   //接口的方法  数据库只能识别Sql语句System.out.println(userList);}//查询 用户的全部记录 面向对象的方式操作数据库.//只能用于单表查询@Testpublic void testFind(){//暂时不需要任何where条件  查询的是全部记录.List<User> userList = userMapper.selectList(null);System.out.println(userList);}
}

3.4 Mybatis CURD操作练习

3.4.1 编辑测试代码

  @Testpublic void insert(){User user = new User();user.setName("星期五").setAge(18).setSex("男");userMapper.insertUser(user);System.out.println("新增用户成功");}//根据name="星期五",将name="星期六"@Testpublic void update(){String oldName = "星期五";String newName = "星期六";userMapper.updateByName(oldName,newName);System.out.println("更新用户成功");}//删除用户信息 根据name属性删除数据@Testpublic void delete(){String name = "星期六";userMapper.deleteByName(name);System.out.println("删除用户成功");}

3.4.2 编辑Mapper接口

@Insert("insert into demo_user(id,name,age,sex) " +"value (null,#{name},#{age},#{sex})")void insertUser(User user);@Update("update demo_user set name = #{newName} where name=#{oldName}")void updateByName(String oldName, String newName);//Mybatis中如果传递的参数只有一个,则名称任意 一般不用.@Delete("delete from demo_user where name=#{name}")void deleteByName(String name);

3.5 MP的工作原理

1).通过注解 实现对象与表一一映射.
2).通过属性注解 实现对象的属性与表中的字段一一映射.
3).将公共的方法进行抽取,抽取到BaseMapper接口中
4).将用户操作的方法对象,转化为数据库能够识别的Sql语句.
demo1: userMapper.insert(user对象)
Sql1: insert into 表名(字段名…) value (属性值…)

 其实就是在做字符串拼接

拼接过程:
insert into 表名(字段名…) value (属性值…)
1).通过userMapper 查找父级接口BaseMapper
2).根据BaseMapper 查找泛型对象 User对象.
3).根据user对象 查找指定的注解 @TableName,获取表名
4).根据user对象的属性,动态获取表中的字段.@TableField
5).在获取字段的同时,获取属性的值,最后进行sql拼接
6).MP将拼接好的Sql交给Mybatis框架处理执行.

insert into demo_user(id,name…) value (value1,value2…)

3.6 MP练习

3.6.1 根据ID查询

     /*** 1.根据Id=23数据*/@Testpublic void select01(){User user = userMapper.selectById(23);System.out.println(user);}

3.6.2 对象查询

配置日志:

     /*** 查询 name="潘凤"  sex="男"* 结果: 1项 userMapper.selectOne()*      多项 userMapper.selectList()* Sql: where name="xxx" and sex="xxx"* queryWrapper: 条件构造器  拼接where条件* 如果遇到多条件查询,则默认的连接符and* 方式1: 可以通过对象的方式进行控制*/@Testpublic void select02(){User user = new User();user.setName("潘凤").setSex("男");QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.3 特殊字符练习

     /*** 要求: age>18岁  or sex=男的用户* 转义字符:   > gt,   < lt , = eq*            >= ge , <= le*/@Testpublic void select03(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();//编辑的是数据库字段信息queryWrapper.gt("age", 18).or().eq("sex","男");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.4 like关键字

     /*** 要求: 查询name中包含"精" 并且按照age 降序排列* Sql: like "%精%"  包含精*      like "精%"   以精开头*      like "%精"   以精结尾*/@Testpublic void select04(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.likeRight("name","精").orderByDesc("age");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.5 In关键字

     /*** 查询多个数据* 查询ID= 1 3 6 7的数据* where id in (xx,xx,xx,xx)* 如果遇到多值传参,一般采用对象的方式封装数据*/@Testpublic void select05(){Integer[] ids = {1,3,6,7};QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.in("id", ids);//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.6 不为null查询

     /*** 需求: 查询name为null的数据*/@Testpublic void select06(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.isNull("name");//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.7 动态Sql语句查询

 /*** 动态sql查询:*  要求: 根据 age 属性与sex属性进行查询.*       如果其中数据为null 则不参与where条件的拼接*     where age>18 and  sex="男"*  错误Sql:*      SELECT id,name,age,sex FROM demo_user WHERE (age > ? AND sex = ?)*      18(Integer), null*  MP实现动态查询:*       参数1: condition  boolean类型数据 true 拼接条件*                                        false 不拼接条件*       参数2: 字段名称*       参数3: 字段值*/@Testpublic void select07(){Integer age = 18;String sex = "男";//boolean flag = sex != null &amp;&amp; sex.length()>0;//条件判断boolean flag = StringUtils.hasLength(sex);QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.gt(age>0, "age", age).eq(flag,"sex",sex);//根据对象中不为null的属性 拼接where条件List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}

3.6.8 挑选字段查询

 /*** demo1:只查询 name,age字段信息* 挑选查询的字段信息* queryWrapper.select("name","age");*/@Testpublic void select08(){QueryWrapper<User> queryWrapper = new QueryWrapper<>();queryWrapper.select("name","age");//没有查询的数据以null返回List<User> userList = userMapper.selectList(queryWrapper);System.out.println(userList);}//* demo2: 只要求返回name,age字段@Testpublic void select09(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.select("name","age");List<Map<String,Object>> list = userMapper.selectMaps(queryWrapper);System.out.println(list);}//* 要求返回第一列的数据// 如果包含了条件数据 则需要通过条件构造器封装@Testpublic void select10(){List<Object> list = userMapper.selectObjs(null);System.out.println(list);}

3、MybatisPlus相关推荐

  1. 采用SpringBoot、MyBatis-Plus 、Security框架,开发的一套权限系统,实现前后端分离,完善的代码生成机制

    项目说明 harry 采用SpringBoot.MyBatis-Plus .Security框架,开发的一套权限系统,实现前后端分离,完善的代码生成机制.Harry Gitee地址 harry-vue ...

  2. 【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus

    项目实战 - 驾考(旧)- Freemarker.MyBatis-Plus 各种 Object Freemarker 简单使用 常用功能 集成到 SpringBoot MyBatis-Plus 简单使 ...

  3. 14、MyBatis-Plus入门到进阶

    1.Mybatis的问题 [简介]: 每个实体类对应一个实体类,对应一个mapper接口,对应一个mapper.xml文件,每个mapper接口都有重复的crud方法,每一个mapper.xml都有重 ...

  4. Mybatis、Mybatis-Plus传入多个参数的处理

    在使用Mybatis.Mybatis-Plus开发的过程中,我们经常会遇到传入多个参数的场景,这时如果不加处理的话就可能报错,那么,怎么规避这些问题呢,下面分享下我在项目中的处理: 方案一. dao层 ...

  5. 基于SpringBoot、MyBatis-plus实现双数据源定时同步

    1.项目目录结构 2.双数据源配置 在Application上添加注解,不自动加载默认数据源 @SpringBootApplication(exclude = {DataSourceAutoConfi ...

  6. mybatis mapper配置 bigint_SpringBoot基础架构1(SpringBoot、MyBatis-Plus与Thymeleaf)

    show me the code and talk to me,做的出来更要说的明白 我是布尔bl,你的支持是我分享的动力! 1 引入 使用 MyBatis-Plus 以及 thymeleaf 实现增 ...

  7. springboot mybatis-plus 配置 yml 、druid 配置 yml 、mybatis-plus 代码生成

    大家好,我是烤鸭: 今天分享一下 springboot mybatis-plus 和 druid 的yml 配置文件. pom <dependency><groupId>org ...

  8. mybatis、mybatisplus的常用操作

    文章目录 1. mybatis-批量增加 2. 单条件批量删除 3. 多条件批量删除 4. mp的lambda用法.分组查询 5. mybatis-plus 插入/更新操作 ①:更新操作 ②:插入或更 ...

  9. SpringBoot集成flyway、mybatis-plus(超详细)

    拿到一个新需求,要给一个开发中的项目集成flyway进行数据库版本控制,对于flyway没有什么了解,就得先搭建一个demo练习一下,先知道怎么用,再集成到老项目上: 一.新建SpringBoot项目 ...

  10. 微服务项目实战-易买网网页(电商)二、MybatisPlus与微服务注册

    目录 一.SpringBoot整合MybatisPlus 创建自动生成代码子模块 1.基于maven方式创建子模块zmall-generator,用于结合mybatis-plus生成代码. 创建商品服 ...

最新文章

  1. rsyslog服务日志报错分析1
  2. java基础教程传值_Java基础——方法传值(基本数据类型 VS 引用数据类型)
  3. DCMTK:测试DcmSCP和DcmSCU类
  4. linux远程关闭不中断
  5. hdu 1800 (map)
  6. python代做在哪找靠谱_比较靠谱的资产评估师考试去哪找
  7. [codevs1039]数的划分
  8. git 历史操作日志_Git - 查看提交历史
  9. 建议检察院服务器服务器配置 显示器,切换器 键鼠
  10. Asp.Net递归遍历页面控件实例
  11. 易语言c调用,易语言调用C++编写的DLL
  12. hdu 1087 Super Jumping! Jumping! Jumping! 解题报告
  13. wpf webbrowser获取选中文本_网页文本高亮插件 web-marker
  14. java unsafe cas_java并发Unsafe和CAS
  15. 学生信息管理系统(C++实现)
  16. 网站嵌入YouTube视频
  17. MATLAB(3)MATLA 求极限 求积分 求微分 求级数的和
  18. Django模板语言DTL中的变量和标签
  19. 一个用在手机上的简单js拖拽效果
  20. 纯CSS修改浏览器的默认滚动条样式

热门文章

  1. 理财趣事:要想财富滚滚来 先学普京打野猪
  2. 【集训队作业】LYRC
  3. 实时视频流:工作原理
  4. 如何删除双系统中的ubuntu
  5. 《甄嬛传》计谋汇总, 本文忠实于《后宫 甄嬛传》第1本~第7本+番外原文,而非电视剧。
  6. 王者战力查询接口,四大战区(文字版)
  7. 计算机组成原理 — PCI-E 外设接口标准
  8. HDU 3966 Aragorns Story
  9. 洛谷P2680 运输计划
  10. windows使用opencc中文简体和繁体互转