Service CRUD
作者:互联网
一、保存数据
1.保存单个实体到数据库
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 UserBean entity = new UserBean(); 7 entity.setUserId(9999); 8 entity.setName("save-" + System.currentTimeMillis()); 9 entity.setSex("男"); 10 entity.setAge(40); 11 entity.setBorthday(new Date()); 12 boolean flag = userService.save(entity); 13 System.out.println("flag=" + flag); 14 }
2.一次保存多个实体到数据库
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 List<UserBean> userBeanList = new ArrayList<>(); 7 userBeanList.add(new UserBean(9991, "name-9991", "女", 20)); 8 userBeanList.add(new UserBean(9992, "name-9992", "男", 30)); 9 userBeanList.add(new UserBean(9993, "name-9993", "男", 40)); 10 boolean flag = userService.saveBatch(userBeanList); 11 System.out.println("flag=" + flag); 12 }
3.批量保存,将数据分成多个批次,每个批次数量为2
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 List<UserBean> userBeanList = new ArrayList<>(); 7 userBeanList.add(new UserBean(9994, "name-9994", "女", 20)); 8 userBeanList.add(new UserBean(9995, "name-9995", "男", 30)); 9 userBeanList.add(new UserBean(9996, "name-9996", "女", 32)); 10 userBeanList.add(new UserBean(9997, "name-9997", "女", 29)); 11 userBeanList.add(new UserBean(9998, "name-9998", "男", 33)); 12 boolean flag = userService.saveBatch(userBeanList, 2); 13 System.out.println("flag=" + flag); 14 }
二、保存或更新数据
1.更新或新增单个实体
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 UserBean entity = new UserBean(9991, "name-update", "男", 40); 7 boolean flag = userService.saveOrUpdate(entity); 8 System.out.println("flag=" + flag); 9 }
saveOrUpdate(T entity) 方法的实现代码如下:
1 /** 2 * TableId 注解存在更新记录,否插入一条记录 3 * 4 * @param entity 实体对象 5 * @return boolean 6 */ 7 @Transactional(rollbackFor = Exception.class) 8 @Override 9 public boolean saveOrUpdate(T entity) { 10 if (null != entity) { 11 TableInfo tableInfo = TableInfoHelper.getTableInfo(this.entityClass); 12 Assert.notNull(tableInfo, "error: can not execute. because can not find cache of TableInfo for entity!"); 13 String keyProperty = tableInfo.getKeyProperty(); 14 Assert.notEmpty(keyProperty, "error: can not execute. because can not find column for id from entity!"); 15 Object idVal = ReflectionKit.getFieldValue(entity, tableInfo.getKeyProperty()); 16 return StringUtils.checkValNull(idVal) || Objects.isNull(getById((Serializable) idVal)) ? save(entity) : updateById(entity); 17 } 18 return false; 19 }
判断实体 @TableId 注解修饰的 ID 字段记录是否存在。如果不存在,则执行 save 方法,保存数据;
如果存在,则执行 update 方法,更新数据。
2.根据 Wrapper 查询对象批量更新数据
1 @Test 2 void contextLoads() { 3 UserBean entity = new UserBean(); 4 entity.setName("name-update"); 5 6 UpdateWrapper<UserBean> wrapper = new UpdateWrapper<>(); 7 wrapper.gt("user_id", 9992); 8 wrapper.le("user_id", 9999); 9 10 boolean flag = userService.saveOrUpdate(entity, wrapper); 11 System.out.println("flag=" + flag); 12 }
3.批量插入或更新数据
1 @Test 2 void contextLoads() { 3 List<UserBean> userBeanList = new ArrayList<>(); 4 userBeanList.add(new UserBean(9992, "username-update")); 5 userBeanList.add(new UserBean(9993, "username-update")); 6 userBeanList.add(new UserBean(9994, "username-update")); 7 boolean flag = userService.saveOrUpdateBatch(userBeanList); 8 System.out.println("flag=" + flag); 9 }
4.批量插入或更新数据,并且指定每个批次大小为 3
1 @Test 2 void contextLoads() { 3 List<UserBean> userBeanList = new ArrayList<>(); 4 userBeanList.add(new UserBean(9992, "username-update")); 5 userBeanList.add(new UserBean(9993, "username-update")); 6 userBeanList.add(new UserBean(9994, "username-update")); 7 userBeanList.add(new UserBean(9995, "username-update")); 8 userBeanList.add(new UserBean(9996, "username-update")); 9 userBeanList.add(new UserBean(9997, "username-update")); 10 userBeanList.add(new UserBean(9998, "username-update")); 11 userBeanList.add(new UserBean(9000, "username-save")); 12 boolean flag = userService.saveOrUpdateBatch(userBeanList, 3); 13 System.out.println("flag=" + flag); 14 }
三、删除数据
// 根据 entity 条件,删除记录 boolean remove(Wrapper<T> queryWrapper); // 根据 ID 删除 boolean removeById(Serializable id); // 根据 columnMap 条件,删除记录 boolean removeByMap(Map<String, Object> columnMap); // 删除(根据ID 批量删除) boolean removeByIds(Collection<? extends Serializable> idList);
1.根据 ID 删除数据
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 boolean flag = userService.removeById(9991); 7 System.out.println("flag=" + flag); 8 }
2.根据多个ID批量删除数据
1 @Test 2 void contextLoads() { 3 List<Integer> ids = Arrays.asList(9000, 9992, 9993); 4 boolean flag = userService.removeByIds(ids); 5 System.out.println("flag=" + flag); 6 }
3.根据 QueryWrapper 查询条件删除数据
1 @Test 2 void contextLoads() { 3 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 4 wrapper.eq("name", "name-update"); 5 boolean flag = userService.remove(wrapper); 6 System.out.println("flag=" + flag); 7 }
4.根据 Map 条件对象删除数据
1 @Test 2 void contextLoads() { 3 Map<String,Object> conditionMap = new HashMap<>(); 4 conditionMap.put("name", "username-update"); 5 6 boolean flag = userService.removeByMap(conditionMap); 7 System.out.println("flag=" + flag); 8 }
四、更新数据
// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset boolean update(Wrapper<T> updateWrapper); // 根据 whereEntity 条件,更新记录 boolean update(T entity, Wrapper<T> updateWrapper); // 根据 ID 选择修改 boolean updateById(T entity); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList); // 根据ID 批量更新 boolean updateBatchById(Collection<T> entityList, int batchSize);
1.根据用户 ID 更新用户数据
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 UserBean entity = new UserBean(11, "tom"); 7 boolean flag = userService.updateById(entity); 8 System.out.println("flag=" + flag); 9 }
2.批量更新用户信息,依然根据用户ID进行更新(这里的用户ID即主键)
1 @Test 2 void contextLoads() { 3 List<UserBean> entityList = new ArrayList<>(); 4 entityList.add( new UserBean(11, "name-update-11")); 5 entityList.add( new UserBean(12, "name-update-12")); 6 entityList.add( new UserBean(13, "name-update-13")); 7 entityList.add( new UserBean(14, "name-update-14")); 8 9 boolean flag = userService.updateBatchById(entityList); 10 System.out.println("flag=" + flag); 11 }
3.根据 UpdateWrapper 对象构建的条件进行更新
1 @Test 2 void contextLoads() { 3 UpdateWrapper<UserBean> wrapper = new UpdateWrapper<>(); 4 wrapper.ge("user_id", 11); 5 wrapper.le("user_id", 14); 6 7 UserBean entity = new UserBean(); 8 entity.setName("name-" + System.currentTimeMillis()); 9 10 boolean flag = userService.update(entity, wrapper); 11 System.out.println("flag=" + flag); 12 }
五、获取单条数据
在 IService 接口中提供了很多以 get 开头的方法,这些方法用来从数据库中获取一条记录
如:根据ID获取数据记录。当数据库返回多于一条数据,则抛出错误信息。方法定义如下:
// 根据 ID 查询 T getById(Serializable id); // 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1") T getOne(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 T getOne(Wrapper<T> queryWrapper, boolean throwEx); // 根据 Wrapper,查询一条记录 Map<String, Object> getMap(Wrapper<T> queryWrapper); // 根据 Wrapper,查询一条记录 <V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
1.根据数据ID、 QueryWrapper、Map 条件查询数据
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 System.out.println("===================== getById ==================="); 7 System.out.println( userService.getById(1) ); 8 9 System.out.println("===================== getOne ==================="); 10 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 11 wrapper.eq("user_id", 2); 12 System.out.println( userService.getOne(wrapper) ); 13 14 System.out.println("===================== getMap ==================="); 15 Map<String, Object> resultMap = userService.getMap(wrapper); 16 System.out.println(JSONObject.toJSONString(resultMap)); 17 18 System.out.println("===================== getObj ==================="); 19 userService.getObj(wrapper, new Function<Object, UserBean>() { 20 @Override 21 public UserBean apply(Object o) { 22 System.out.println(JSONObject.toJSONString(o)); 23 return null; 24 } 25 }); 26 }
2.通过指定 throwEx=true 参数,然后测试当返回多条数据时是否抛出异常
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 7 wrapper.lt("user_id", 10); 8 9 // 第二个参数 10 // 如果返回的结果集多余一条数据,则抛出如下错误: 11 // TooManyResultsException 12 UserBean userBean = userService.getOne(wrapper, true); 13 System.out.println(userBean); 14 }
六、获取数据列表
在 IService 接口中提供了很多 list 开头的方法,这些方法将根据查询条件获取多条数据。这些方法的定义如下:
// 查询所有 List<T> list(); // 查询列表 List<T> list(Wrapper<T> queryWrapper); // 查询(根据ID 批量查询) Collection<T> listByIds(Collection<? extends Serializable> idList); // 查询(根据 columnMap 条件) Collection<T> listByMap(Map<String, Object> columnMap); // 查询所有列表 List<Map<String, Object>> listMaps(); // 查询列表 List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 查询全部记录 List<Object> listObjs(); // 查询全部记录 <V> List<V> listObjs(Function<? super Object, V> mapper); // 根据 Wrapper 条件,查询全部记录 List<Object> listObjs(Wrapper<T> queryWrapper); // 根据 Wrapper 条件,查询全部记录 <V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);
1.使用不带任何参数的 list() 方法查询数据表所有记录
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 List<UserBean> userBeanList = userService.list(); 7 System.out.println("size=" + userBeanList.size()); 8 }
2.查询用户ID大于 10,小于 20 且性别为“男”的用户列表
1 @Autowired 2 private UserService userService; 3 4 @Test 5 void contextLoads() { 6 QueryWrapper<UserBean> wrapper = new QueryWrapper<>(); 7 wrapper.gt("user_id", 10); 8 wrapper.lt("user_id", 20); 9 wrapper.eq("sex", "男"); 10 11 List<UserBean> userBeanList = userService.list(wrapper); 12 for(UserBean userBean : userBeanList) { 13 System.out.println(userBean); 14 } 15 }
标签:Service,userBeanList,CRUD,UserBean,flag,userService,new,entity 来源: https://www.cnblogs.com/ang0/p/16147172.html