[Blog]插件使用分析

spring-boot-devtools

springboot开发工具,严格意义上不算是插件,在本项目中的主要作用是做项目的热部署

使用

Maven依赖

  • 因为 spring-boot-devtools 一般只使用于开发环境,在生产环境是需要禁用的,

  • 设置 optional=true(maven) 或是 developmentOnly(gradle),在生产环境启动服务时(比如通过 java -jar 方式启动),spring-boot-devtools 会被禁用

      <dependencies>
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <optional>true</optional>
          </dependency>
      </dependencies>
    

添加文件

在/resources/META-INF 下添加文件spring-devtools.properties,只一行内容

restart.include.shiro-redis=/shiro-[\\w-\\.]+jar

lombok

  • 提高开发效率
  • 防止没有技术含量的模板代码影响代码美观
  • 可以自动生成getter/setter/toString等方法,只需写pojo的实体属性

使用

引入相应的maven包

<dependency>

          <groupId>org.projectlombok</groupId>

          <artifactId>lombok</artifactId>

          <version>1.16.18</version>

          <scope>provided</scope>

    </dependency>
  • Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中
  • Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件

添加IDE工具对Lombok的支持

  • IDEA中引入Lombok支持如下

  • 点击File-- Settings设置界面,安装Lombok插件

在这里插入图片描述

  • 点击File-- Settings设置界面,开启 AnnocationProcessors(让Lombok注解在编译阶段起到作用)

在这里插入图片描述

注解使用

一般在实体类上加上该注解,一般使用@Data注解是@ToString @EqualsAndHashCode @Getter @Setter @RequiredArgsConstructor的集合

Hutool

  • Hutools严格意义上来说并不是插件,是一个Java类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅
  • 减少代码搜索成本,避免网络上参差不齐的代码出现导致的bug

使用

在本项目中,主要是在对用户密码进行加密的时候使用到Hutool
引入Hutool后

	SecureUtil.md5()

MybatisPlus

  • 是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生

  • 封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法

SpringBoot集成MP

MP通用CRUD

创建 EmployeeMapper 接口, 并继承 BaseMapper 接口

Insert

直接调用insert方法传入实体

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({"classpath:spring/spring-dao.xml"})
public class test {
    @Autowired
    private EmplopyeeDao emplopyeeDao;
    @Test
    public void testInsert(){
        Employee employee = new Employee();
        employee.setLastName("东方不败");
        employee.setEmail("dfbb@163.com");
        employee.setGender(1);
        employee.setAge(20);
        emplopyeeDao.insert(employee);
        //mybatisplus会自动把当前插入对象在数据库中的id写回到该实体中
        System.out.println(employee.getId());
    }
}

update

@Test
public void testUpdate(){
        Employee employee = new Employee();
        employee.setId(1);
        employee.setLastName("更新测试");
        //emplopyeeDao.updateById(employee);//根据id进行更新,没有传值的属性就不会更新
        emplopyeeDao.updateAllColumnById(employee);//根据id进行更新,没传值的属性就更新为null
}
  • updateById方法,没有传值的字段不会进行更新,比如只传入了lastName,那么age、gender等属性就会保留原来的值
  • updateAllColumnById方法,会更新所有的列,没有传值的列会更新为null

select

根据id查询
		Employee employee = emplopyeeDao.selectById(1);	
根据条件查询一条数据
Employee employeeCondition = new Employee();
employeeCondition.setId(1);
employeeCondition.setLastName("更新测试");
//若是数据库中符合传入的条件的记录有多条,那就不能用这个方法,会报错
Employee employee = emplopyeeDao.selectOne(employeeCondition);
  • 这个方法的sql语句就是where id = 1 and last_name = 更新测试,若是符合这个条件的记录不止一条,那么就会报错
根据查询条件返回多条数据
	Map<String,Object> columnMap = new HashMap<>();
	columnMap.put("last_name","东方不败");//写表中的列名
	columnMap.put("gender","1");
	List<Employee> employees = emplopyeeDao.selectByMap(columnMap);
	System.out.println(employees.size());
  • 封装一个<string,Object>的map,第一个参数为表字段(而非实体属性名),第二个字段为条件
  • selectByMap方法返回值用list集合接收
通过id批量查询
	List<Integer> idList = new ArrayList<>();
	idList.add(1);
	idList.add(2);
	idList.add(3);
	List<Employee> employees = emplopyeeDao.selectBatchIds(idList);
	System.out.println(employees);
  • 把需要查询的id都add到list集合中,然后调用selectBatchIds方法,传入该list集合,最后结果也要用一个list接收

delete

根据id删除
emplopyeeDao.deleteById(1);
根据条件删除
Map<String,Object> columnMap = new HashMap<>();
columnMap.put("gender",0);
columnMap.put("age",18);
emplopyeeDao.deleteByMap(columnMap);
  • 将删除条件封装成map,调用deleteByMap方法传入map
根据id批量删除
List<Integer> idList = new ArrayList<>();
 idList.add(1);
 idList.add(2);
 emplopyeeDao.deleteBatchIds(idList);
  • 把需要删除的id用list封装好,调用deleteByBatchIds,传入list即可

分页查询

List<Employee> employees = emplopyeeDao.selectPage(new Page<>(1,2),null);
System.out.println(employees);
  • selectPage方法就是分页查询,在page中传入分页信息,后者为null的分页条件,这里先让其为null,讲了条件构造器再说其用法
  • 这个分页其实并不是物理分页,而是内存分页。也就是说,查询的时候并没有limit语句。等配置了分页插件后才可以实现真正的分页

条件构造器(EntityWrapper)

  • 以上基本的 CRUD 操作,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作
  • 复杂的查询条件(如带分页),则通过条件构造器EntityWrapper
分页查询年龄在18 - 50且gender为0、姓名为tom的用户
List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3),
     new EntityWrapper<Employee>()
        .between("age",18,50)
        .eq("gender",0)
        .eq("last_name","tom")
);
  • new 一个page对象传入分页信息
  • 分页条件,new 一个EntityWrapper对象,调用该对象的相关方法

思考

对于Java程序员而言,学会使用插件,挖掘好的插件,是降低学习难度提高开发效率的必经途径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值