目录
1、BaseMapper
我们在上篇讲过,自己创建的Mapper接口需要继承我们的BaseMapper,其为我们提供了非常丰富而方法。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.baomidou.mybatisplus.core.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteById(T entity);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<?> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {
List<T> ts = this.selectList(queryWrapper);
if (CollectionUtils.isNotEmpty(ts)) {
if (ts.size() != 1) {
throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);
} else {
return ts.get(0);
}
} else {
return null;
}
}
default boolean exists(Wrapper<T> queryWrapper) {
Long count = this.selectCount(queryWrapper);
return null != count && count > 0L;
}
Long selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}
2.测试插入
@Test
public void testInsert(){
User user = new User(null,"张三丰",140,"wudang@128.com");
int insert = userMapper.insert(user);//返回的是受影响的行数
System.out.println(insert);
}
sql语句
INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
数据库插入成功
3、删除
@Test
public void testDelete(){
int i = userMapper.deleteById(1L);//根据主键id进行删除
System.out.println(i);
Map<String,Object> map = new HashMap<>();
map.put("name","Tom");
map.put("age",28);
//根据map来删除,注意,map里面的字段与数据库字段需要保持一致哦
int i1 = userMapper.deleteByMap(map);
System.out.println(i1);
}
sql语句分别为
DELETE FROM user WHERE id=?
DELETE FROM user WHERE name = ? AND age = ?
4、修改
@Test
public void testUpdate(){
User user = new User(4L,"hhhh",null,null);
// user.setId(2L);
// user.setName("jackson");
userMapper.updateById(user);
}
注意:为null的字段不会被修改,如果是""则会被修改
5、查询
@Test
public void testSelect(){
// 根据主键ID来查询
User user = userMapper.selectById(4L);
System.out.println(user);
System.out.println();
List<Long> ids = Arrays.asList(4l,5l,6l);
// 根据id批量查询
List<User> users = userMapper.selectBatchIds(ids);
//使用Java8新特性方法引用输出,如果想学Java8新特性的可以去前面看我的文章哦
users.forEach(System.out::println);
System.out.println();
Map<String,Object> map = new HashMap();
map.put("name","田七");
// 通过map查询
List<User> userList = userMapper.selectByMap(map);
userList.forEach(System.out::println);
}
6、自定义方法
很多时候我们需要自己定义方法,那怎么办呢?之前我们在讲Mybatis的时候知道,如果我们自己在mapper接口中写了方法后需要在mapper.xml文件中去写sql语句,这里也是一样的。第一篇文章的时候我们就说过了,mp只是对Mybatis的增强而不做任何改变。
①在UserMapper接口中定义我们自己的方法
②在xml文件中写sql
这里需要注意,我们的xml写在哪儿呢?这需要我们在application.yml配置文件中进行配置。其实,也不用配置,因为我们有个默认的地方。
这个就是默认的路径,所以我们不需要写,任何配置。只需要在其路径中写我们的xml文件就行。
如果按照默认的话,xml一定要写在resources下面的mapper文件下面,记得,这个地方的文件夹一定要叫mapper
③测试
@Test
public void testMap(){
Map<String, Object> map = userMapper.getMapById(9L);
System.out.println(map);
}
输出结果为:
{name=赵六, id=9, email=44}