工作中遇到的问题(第七弹)

遇到的有意思的jar包

lombok

1.概念:

lombok是一个可以通过简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具,简单来说,比如我们新建了一个类,然后在其中写了几个字段,然后通常情况下我们需要手动去建立getter和setter方法啊,构造函数啊之类的,lombok的作用就是为了省去我们手动创建这些代码的麻烦,它能够在我们编译源码的时候自动帮我们生成这些方法。

2.好处:

减少冗余代码,使代码更加简洁精炼

3.如何用:

 1.lombok是一个IDE插件,首先在maven的pom文件中引进jar包:

    <dependency> 
        <groupId>org.projectlombok</groupId> 
        <artifactId>lombok</artifactId> 
        <version>1.16.10</version> 
    </dependency>

 2.以我用的idea举例,在setting->plugins 中下载lombok插件,重启IDE
 之后你就会发现在项目中只要在pojo类中添加@Data关键字,就可以不用写getter,setter方法了

4.lombok相关注解:

 1.@NonNull:可以帮我们避免空指针
  不使用lombok:

public class NonNullExample extends Something { 
    private String name; 
    public NonNullExample(@NonNull Person person) { 
        super("Hello"); 
        if (person == null) { 
            throw new NullPointerException("person"); 
        } 
        this.name = person.getName(); 
    } 
}  

  使用lombok:

import lombok.NonNull; 
public class NonNullExample extends Something { 
    private String name; 
    public NonNullExample(@NonNull Person person) { 
        super("Hello"); 
        this.name = person.getName(); 
    } 
}  

 2.@Cleanup: 自动帮我们调用close()方法
  不使用lombok:

import java.io.*; 
public class CleanupExample { 
    public static void main(String[] args) throws IOException { 
        InputStream in = new FileInputStream(args[0]); 
        try { 
            OutputStream out = new FileOutputStream(args[1]); 
            try { 
                byte[] b = new byte[10000]; 
                while (true) { 
                    int r = in.read(b); 
                    if (r == -1) break; 
                    out.write(b, 0, r); 
                } 
            } 
            finally { 
                if (out != null) { 
                    out.close(); 
                } 
            } 
        } 
        finally { 
            if (in != null) { 
                in.close(); 
            } 
        } 
    } 
} 

  使用lombok:

import lombok.Cleanup; 
import java.io.*; 
public class CleanupExample { 
    public static void main(String[] args) throws IOException { 
        @Cleanup InputStream in = new FileInputStream(args[0]); 
        @Cleanup OutputStream out = new FileOutputStream(args[1]); 
        byte[] b = new byte[10000]; 
        while (true) { 
            int r = in.read(b); 
            if (r == -1) {
            break; 
            out.write(b, 0, r); 
        } 
    } 
}  

 3.@Getter/@Setter:自动生成Getter/Setter方法
  不使用lombok:

public class GetterSetterExample { 
    private int age = 10; 
    private String name; 

    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
    protected void setName(String name) { 
        this.name = name; 
    } 
}  

  使用lombok:

import lombok.AccessLevel; 
import lombok.Getter; 
import lombok.Setter; 
public class GetterSetterExample { 
    @Getter @Setter private int age = 10; 
    @Setter(AccessLevel.PROTECTED) private String name; 
}  

 4.@NoArgsConstructor: 自动生成无参数构造函数。
 5.@AllArgsConstructor: 自动生成全参数构造函数。
 6.@Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!

h2database

1.简介:

这个数据库是开源的非常快,并且可以使用jdbc api来操作,有内嵌式和服务两种运行模式,并且是基于内存的数据库,还可以基于浏览器的客户端进行操作,jar包非常小,只需要2mb的jar包就可以运行,所以有些需要数据比较小的缓存的时候,可以考虑一下H2,毕竟搭建redis相对还是比较麻烦的,而且成本也较高。

2.使用流程:

 1.导入依赖:

<!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.197</version>
    <scope>test</scope>
</dependency>  

 2.配置运行模式:
  2.1 内嵌式(一):主要有两种,一种是内存模式,这种模式不会落地持久化,比较适合测试,关闭连接后数据库就清空

private static final String JDBC_URL = "jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1";

  2.2 内嵌式(二):持久化模式,这种模式会将数据落地持久化到指定的目录,生成与数据库同名的.mv.db文件

private static final String JDBC_URL = "jdbc:h2:./test";  

  2.3 服务式:服务式就是指定一个tcp的远程目录

private static final String JDBC_URL = "jdbc:h2:tcp://localhost/~/test”;

 3.配置连接参数:

//用户名
private static final String USER = "sa";
//连接数据库时使用的密码,默认为空
private static final String PASSWORD = "";
//连接H2数据库时使用的驱动类,org.h2.Driver这个类是由H2数据库自己提供的,在H2数据库的jar包中可以找到
private static final String DRIVER_CLASS = "org.h2.Driver";  

 4.创建连接:

// 加载H2数据库驱动
Class.forName(DRIVER_CLASS);
// 根据连接URL,用户名,密码获取数据库连接
Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);

 5.简单使用:
 现在我们就可以根据前面创建的连接,进行各种操作了,H2数据库基本类似于Mysql,所以语句也基本相同,另外H2添加自定义函数也很简单,创建一个类,类里定义一个静态的公共方法,然后执行下面的语句就可以添加一个函数了

// functionName 为H2中使用的名字,不能重名,package.className.functionName则是方法的路径,从包名到方法名都需要加上
CREATE ALIAS IF NOT EXISTS  functionName FOR "package.className.functionName"  

 6.注意:H2的视图并不是随原表更新的

3.H2的本地使用

 1.下载jar包
 这一步参考前面的导入依赖,将jar包下载到本地
 2、运行
 打开cmd.exe(window,linux未测试),然后使用java -jar jar包路径,就可以运行H2数据库了,他会自动打开网页的客户端,默认使用的是持久化模式,可以用来测试语句等。


文章作者: Kobe-Liu1
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kobe-Liu1 !
 上一篇
算法篇四(二分法和动态规划) 算法篇四(二分法和动态规划)
二分法和动态规划题目 给定一个无序的整数数组,找到其中最长上升子序列的长度。  输入: [10,9,2,5,3,7,101,18]  输出: 4  解释: 最长的上升子序
2020-06-24 Kobe-Liu1
下一篇 
算法篇三(查询数组中第二大的数) 算法篇三(查询数组中第二大的数)
查询数组中第二大的数冒泡排序 一开始的想法是冒泡排序,就是遍历两遍,重新排列数组,然后取第二大的数 代码如下: private int func1(int[] arr) { for (int i = 0; i <arr.l
2020-06-22 Kobe-Liu1
  目录