怎么添加操作MyBatisPlus中的CRUD呢?

添加操作

insert 方法:

说明: BaseMapper 接口中提供了数据新增insert 方法

作用:完成数据新增

参数: 封装要新增的数据对象

使用:

直接调用就可以,运行的时候根据实体类动态生成sql语句,会判断实体类中的属性值是否为null,只有非null的才会拼接在sql语句中完成新增

注意:

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

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

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

@Test
public 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 ( ?, ?, ?, ? )

@Test
public 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值的属性不参与更新

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

打开百度APP看高清图片

查询操作

SelectById方法:通过第查询数据

参数: 要查询的数据id

返回值:查询结果的实体对象

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

selectByMap 方法: 根据指定的字段查询数据

参数: 指定的字段及字段值的map集合

返回值:查询结果的list集合

注意:

map中的键名为要查询的数据的字段名

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

selectBatchIds方法:

作用: 根据id查询数据:

参数:要查询的数据的id的集合

返回值:存储查询结果的list集合

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

删除操作

deleteById() 方法 通过id删除

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

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

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

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

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

原理:

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

通过现象看到本质

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

MapperProxy 中 sqlSession –>SqlSessionFactory

SqlSessionFacotry 中→ Configuration→ MappedStatements

每一个 mappedStatement 都表示 Mapper 接口中的一个方法与 Mapper 映射文件中的一个 SQL(www.xhyx.net)。

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 中

主营产品:切割设备,发泡设备,塑料加工机械,砂轮,加料再生破碎机