公众号
关注微信公众号
移动端
创头条企服版APP

MyBatisPlus中的CRUD

3407
升学就业帮 2021-08-19 20:19 抢发第一评

添加操作

insert 方法:
说明: BaseMapper 接口中提供了数据新增insert 方法
作用:完成数据新增
参数: 封装要新增的数据对象
使用:
直接调用就可以,运行的时候根据实体类动态生成sql语句,会判断实体类中的属性值是否为null,只有非null的才会拼接在sql语句中完成新增

注意:

需要在实体类中用@TableName注解指定实体类对应的表,如果实体类和表名一致可以省略不写

需要在对应的主键属性上使用注解@TableId,表明该属性是表的主键,并且需要说明主键设置类型,比如:自增

需要在普通属性上使用注解@TableField,表明改改属性对应表的字段的名称,如果属性名称和表的字段名称一致,可以省略

@Testpublic void testInsert(){//创建一个学生Student stu = new Student();
stu.setSname("黄药师");
stu.setSage(70);
stu.setSphone("1234");
stu.setSsex("1");int insert = studentMapper.insert(stu);
System.out.println("insert = " + insert);
}

所有的属性都有的sql:

INSERT INTO t_student ( s_name, sage, ssex, sphone ) VALUES ( ?, ?, ?, ? )

@Testpublic void testInsert1(){//创建一个学生Student stu = new Student();
stu.setSname("黄药师");
stu.setSphone("aaaa");int insert = studentMapper.insert(stu);
System.out.println("insert = " + insert);
}

没有属性后动态生成的sql:

INSERT INTO t_student ( s_name, sphone ) VALUES ( ?, ? )

修改操作

UpdateById方法:

作用:更新数据到数据库中

参数: 更新的数据

注意:

根据主键ID作为条件来完成更新,并且更新实体类中有值的属性,null值的属性不参与更新

@Testpublic void testUpdate(){//创建一个学生Student stu = new Student();
stu.setSname("张无忌");
stu.setSage(24);
stu.setSid(5);int update = studentMapper.updateById(stu);
System.out.println("update = " + update);
}


查询操作

SelectById方法:通过第查询数据
参数: 要查询的数据id
返回值:查询结果的实体对象

@Testpublic void query01(){
Student student = studentMapper.selectById(1);
System.out.println("student = " + student);
}

selectByMap 方法: 根据指定的字段查询数据
参数: 指定的字段及字段值的map集合
返回值:查询结果的list集合
注意:
map中的键名为要查询的数据的字段名

@Testpublic void query02(){
Map colMap = new HashMap<>();
colMap.put("s_name","黄蓉");
colMap.put("sage",24);
List students = studentMapper.selectByMap(colMap);
System.out.println("students = " + students);
}


selectBatchIds方法:
作用: 根据id查询数据:
参数:要查询的数据的id的集合
返回值:存储查询结果的list集合

@Testpublic void query03(){
List list =new ArrayList<>();list.add(1);list.add(2);list.add(3);
List students = studentMapper.selectBatchIds(list);
System.out.println("students = " + students);
}


删除操作

deleteById() 方法 通过id删除

@Testpublic void delete01(){int i = studentMapper.deleteById(1);
System.out.println("i = " + i);
}

deleteByMap() 放 通过指定的字段完整数据删除

@Testpublic void delete02(){
Map colMap = new HashMap<>();
colMap.put("s_name","黄蓉");
colMap.put("sage",24);int i = studentMapper.deleteByMap(colMap);
System.out.println("i = " + i);
}


deleteBatchIds() 多选删除,通过符合id要求的数据全部删除

@Testpublic void delete03(){
List list =new ArrayList<>();list.add(1);list.add(2);list.add(3);int i = studentMapper.deleteBatchIds(list);
System.out.println("i = " + i);
}


原理:

问题: xxxMapper 继承了BaseMapper, BaseMapper 中提供了通用的 CRUD 方法, 方法来源于 BaseMapper, 有方法就必须有SQL, 因为 MyBatis 最终还是需要通过SQL 语句操作数据.

通过现象看到本质

StudentMapper的本质
org.apache.ibatis.binding.MapperProxy

MapperProxy 中 sqlSession –>SqlSessionFactory


SqlSessionFacotry 中→ Configuration→ MappedStatements

每一个 mappedStatement 都表示 Mapper 接口中的一个方法与 Mapper 映射文件中的一个 SQL。

MP 在启动就会挨个分析 xxxMapper 中的方法,并且将对应的 SQL 语句处理好,保存到 configuration 对象中的 mappedStatements 中.



本质:

Configuration: MyBatis 或者 MP 全局配置对象

MappedStatement:一个MappedStatement 对象对应 Mapper 配置文件中的一个


select/update/insert/delete 节点,主要描述的是一条SQL 语句

SqlMethod : 枚举对象,MP 支持的 SQL 方法

TableInfo:数据库表反射信息 ,可以获取到数据库表相关的信息

SqlSource: SQL 语句处理对象

MapperBuilderAssistant: 用于缓存、SQL 参数、查询方剂结果及处理等.

通过 MapperBuilderAssistant 将每一个 mappedStatement

添加到 configuration 中的mappedstatements 中


声明:该文章版权归原作者所有,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系。
您阅读这篇文章花了0
转发这篇文章只需要1秒钟
喜欢这篇 0
评论一下 0
凯派尔知识产权全新业务全面上线
相关文章
评论
试试以这些内容开始评论吧
登录后发表评论
凯派尔知识产权全新业务全面上线
阿里云创新中心
×
#热门搜索#
精选双创服务
历史搜索 清空

Tel:18514777506

关注微信公众号

创头条企服版APP