上一篇文章我们把 mapper下面的crud写完了 ,现在我们来试一下IService下面的的方法,之前的类还是不动,我们新增一个service代码如下
public interface UserService extends IService<User> {
}
实现类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
要用service下面的方法肯定要注入的
@SpringBootTest
public class MybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
@Autowired
private UserService userService;
}
下面开始搞
1.添加
1.单条数据添加
boolean save(T entity);
@Test
public void test() {
User user = new User();
user.setName("王五");
userService.save(user);
}
对应的SQL
INSERT
INTO
user
( name )
VALUES
( '王五' )
2.批量添加
boolean saveBatch(Collection<T> entityList);
为了方便操作我在实体类里面生产了一个有参构造器
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User("张三",15);
User user1 = new User("张四",15);
users.add(user);
users.add(user1);
userService.saveBatch(users);
}
其实mybatisplus的批量添加就是多天SQL语句添加,对应的SQL
3.批量添加,限制批次数量(批次数量不能输入0)
boolean saveBatch(Collection<T> entityList, int batchSize);
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User("张三",15);
User user1 = new User("张四",15);
User user2 = new User("张五",15);
users.add(user);
users.add(user1);
users.add(user2);
userService.saveBatch(users,2);
}
对应的SQL
上面的第一幅图是写了数字的批量,第二幅图是没写的 ,我们发现写了批量数量的要快一些,网上对于这个有详细的解释
4.添加或者修改
boolean saveOrUpdate(T entity);
1.1修改还是通过id修改(id存在,不输入id就是添加,建议不要写这个方法)
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User(199L,"张四",15);
userService.saveOrUpdate(user);
}
对应的SQL
这个id在数据库是有的,如果没有就会添加, 程序会先执行修改,发行没有改的就会添加,下面展示一下没有这个id
1.2没有修改对象,执行添加
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User(19L,"张四",15);
userService.saveOrUpdate(user);
}
对应的SQL
5.批量添加或修改(条件构造器)
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
@Test
public void test() {
User user = new User("张六", 14);
userService.saveOrUpdate(user,new UpdateWrapper<User>()
//构造条件
.eq("id",199));
}
对应的SQL
这种和上面是一样的,如果不存在就会保存,我这里就不展示了
6.批量插入或者修改
boolean saveOrUpdateBatch(Collection<T> entityList);
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User("张三",15);
User user1 = new User("张四",15);
User user2 = new User("张五",15);
users.add(user);
users.add(user1);
users.add(user2);
userService.saveOrUpdateBatch(users);
}
对应的SQL
7.批量插入或者修改(设置批量数量)多用
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);
@Test
public void test() {
List<User> users = new ArrayList<>();
User user = new User("张三",15);
User user1 = new User("张四",15);
User user2 = new User("张五",15);
users.add(user);
users.add(user1);
users.add(user2);
userService.saveOrUpdateBatch(users,1);
}
对应的SQL
2.删除
1.根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
@Test
public void test() {
userService.remove(new QueryWrapper<User>()
.eq("id",205l));
}
对应的SQL
2.根据id删除
boolean removeById(Serializable id);
@Test
public void test() {
boolean b = userService.removeById(206);
}
对应的sql
3. 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);
@Test
public void test() {
boolean b = userService.removeByIds(Arrays.asList(207,208,209));
}
对应是SQL
4.根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
@Test
public void test() {
HashMap<String, Object> map = new HashMap<>();
map.put("id",212);
map.put("age",16);
userService.removeByMap(map);
}
对应的SQL
3.更新
1.根据id修改
boolean updateById(T entity);
@Test
public void test() {
User user = new User(210L,"张六");
userService.updateById(user);
}
对应的SQL
2.根据id批量修改
boolean updateBatchById(Collection<T> entityList);
@Test
public void test() {
User user = new User(210L,"张六");
User user1 = new User(211L,"张七");
User user2 = new User(214L,"张八");
ArrayList<User> users = new ArrayList<>();
users.add(user);
users.add(user1);
users.add(user2);
userService.updateBatchById(users);
}
对应的SQL
3.批量修改 (设置批量修改数量)
boolean updateBatchById(Collection<T> entityList, int batchSize);
@Test
public void test() {
User user = new User(210L,"张六");
User user1 = new User(211L,"张七");
User user2 = new User(214L,"张八");
ArrayList<User> users = new ArrayList<>();
users.add(user);
users.add(user1);
users.add(user2);
userService.updateBatchById(users,2);
}
对应的SQL
很明显这个一次处理两条,没有设置就一次全部修改,建议大家设置一下,减少数据库的压力
4.根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
@Test
public void test() {
userService.update(new UpdateWrapper<User>()
.set("name","李一") //修改条件
.eq("name","张六")); //查询条件
}
对应的SQL
4.根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
@Test
public void test() {
User user = new User(216L, "张六");
userService.update( user ,new UpdateWrapper<User>()
.eq("name","张五")); //查询条件
}
对应的SQL,id默认他不会修改的,所以你写不写id影响不大
4.查询
1.get
1.1根据id查询
T getById(Serializable id);
@Test
public void test() {
User byId = userService.getById(210l);
}
对应的SQL
1.2根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
@Test
public void test() {
User byId = userService.getOne(new QueryWrapper<User>().eq("id",216L));
}
对应的SQL
1.3 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
在开发中,如果你需要精准的判断是两个环境出错了可以用这个方法。
@Test
public void test() {
User byId = userService.getOne(
new QueryWrapper<User>().eq("id",217L),false);
if(byId!=null){
System.out.println("数据真实存在");
}else {
System.out.println("数据不存在,或存在多条重复数据 ");
}
}
对应的结果和SQL
1.4 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
@Test
public void test() {
Map<String, Object> map = userService.getMap(new QueryWrapper<User>().eq("name", "李一"));
for (String key : map.keySet()) {
Object value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
}
对应的输出结果,最后结果就一条数据 ,
下面我说几个常用的,不常用的我就不写了,大家可以自己琢磨
1.5查询列表
List<T> list(Wrapper<T> queryWrapper);
@Test
public void test() {
List<User> users = userService.list(new LambdaQueryWrapper<User>().
eq(User::getName, "李一"));
}
运行结果
1.6查询总记录数
int count(Wrapper<T> queryWrapper);
@Test
public void test() {
int i = userService.count(new LambdaQueryWrapper<User>().
eq(User::getName, "李一"));
System.out.println(i);
}
运行结果
条件构造器我这里