目录
后端
1、Spring家族
(1)SpringMVC
作用: SpringMVC框架是web层框架,主要是简化web层(表现层)开发
<!--springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
(2)SpringIOC
IOC—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想。原本由开发者自己管理对象的权利,现在将这个控制权利交给IOC容器进行创建对象,封装数据,和管理对象之间的依赖,这就是控制反转。
IOC主要应用于业务层。
<!--spring框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
SpringMVC中的jar包已经包含spring-context
(3)SpringAOP
AOP (Aspect Oriented Programming) 即面向切面编程
作用: 在不修改源码的情况下,可以对目标对象的方法进行增强
<!--aop: spring整合第三方的面向切面编程组件-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
(4)CGLIB
CGLIB普通类动态代理,生成继承类。
maven
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
(5)JDBCTemplate
JdbcTemplate是Spring提供的一个模板类,它是对jdbc的封装。用于支持持久层的操作。
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
</dependencies>
(6)fileUpload(SpringMVC文件上传)
springMVC文件上传,就是用到了Apache的文件fileUpload上传组件实现。简化了上传文件的过程。
<!--添加Apache文件上传支持包-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
(7)SpringMVCjosn数据的自动转换
@Requestbosdy和@Responsebody,需要导入jackson
<!--添加jackson支持包: springMVC框架操作json数据时调用的技术-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
(8)Spring整合junit 包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version> <!--spring框架对junit有要求,junit必须使用4.12及以上版本-->
<scope>test</scope>
</dependency>
<!--
spring整合junit包:spring-test
注意:使用这个整个包,要求依赖的junit的包必须是4.12及版本以上
-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
(9)spring整合redis
解决当String类型的值是对象时候无法储存的问题
maven
<!-- ================ spring 整合 Redis================== -->
<!-- 1、java连接Redis的jar包,也就是使用jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.3</version>
</dependency>
<!-- 2、spring整合Redis的jar包,注意版本的对应关系 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.9</version>
</dependency>
<!-- 日志记录 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
2、Tomcat插件
作用: 开启tomcat服务器
<!--插件配置-->
<build>
<plugins>
<!--tomcat7的插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
<uriEncoding>UTF-8</uriEncoding>
<server>tomcat7</server>
</configuration>
</plugin>
</plugins>
</build>
3、Servlet
作用: 在于交互式地浏览和修改数据,生成动态Web内容。
<!--版本3之后才能使用注解servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
4、Beanutils
封装实体类
maven
<!-- commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.3</version>
</dependency>
5、jackson
JavaScript Object Notation js对象标记
是一种轻量级的数据交换格式,通过json可以实现前后端传输数据
jackson主要用于json数据与java对象的转换
<!--添加jackson支持包: springMVC框架操作json数据时调用的技术-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
6、Junit
作用: 测试代码。
注意: spring框架对junit有要求,junit必须使用4.12及以上版本
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version> <!--spring框架对junit有要求,junit必须使用4.12及以上版本-->
<scope>test</scope>
</dependency>
7、Mybatis
<!--mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
8、commons-io
作用: 简化文件流的传输
IOUtils.copy(inputStream,response.getOutputStream());
<!--apache的commons-io: 文件下载操作流使用-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
9、log4j日志包
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
10、Jedis
简易版操作redis的java客户端
jar包
maven
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
11、Mysql
mysql连接驱动包,注意版本5和版本8的配置文件有所不同
5.xx版本
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/springdb?characterEncoding=utf8
jdbc.username = root
jdbc.password = root
jdbc.initialSize = 3
jdbc.maxActive = 50
jdbc.minIdle = 3
jdbc.maxWait = 6000
8.xx版本之后
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springdb?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=UTF8
jdbc.username=root
jdbc.password=root
其中Timezone这个参数必加,这是个时区设置,也能理解,这样设置最起码数据库取时间能取到北京时间了
12、lombok
由于lombok是在.class文件的时候使用的,所以idea需要装插件lombok
1、 @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
2、@NoArgsConstructor无参的构造器
3、@AllArgsConstructor全参的构造器
maven
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
13、commons-lang3
随机生成字符串。
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.5</version>
</dependency>
//1. 调用工具类随机生成4个数字
String authCode = RandomStringUtils.randomNumeric(4);
14、阿里云短信包
发送短信。
maven
<!-- 阿里云短信包 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-sms</artifactId>
<version>3.0.0-rc1</version>
</dependency>
工具类
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
/**
* 发送短信息的工具类
*/
public class SmsUtils {
//这里要换成在阿里云申请的:accessKeyId和secret
private static String accessKeyId = "换成你的accessKeyId";
private static String secret = "换成你的secret";
/**
* 发送短信的方法
* @param phoneNumbers 11位电话号码,格式:15900000000
* @param signName 签名名称
* @param templateCode 模板CODE
* @param authCode 要发的验证码
* @return 返回的信息字符串
*/
public static String send(String phoneNumbers, String signName, String templateCode, String authCode) {
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, secret);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers", phoneNumbers);
request.putQueryParameter("SignName", signName);
request.putQueryParameter("TemplateCode", templateCode);
request.putQueryParameter("TemplateParam", "{\"code\":\"" + authCode + "\"}");
String code = null; //返回的字符串
try {
//得到返回的响应对象
CommonResponse commonResponse = client.getCommonResponse(request);
//得到返回的JSON字符串
//{"Message":"OK","RequestId":"E3C3BE8F-2294-4541-A3F3-A98A29BB6F55","BizId":"375420194646745909^0","Code":"OK"}
String json = commonResponse.getData();
//返回的JSON字符串转成Map对象
ObjectMapper mapper = new ObjectMapper();
Map map = mapper.readValue(json, Map.class);
System.out.println(map);
//获取键为Message的值
code = (String) map.get("Code");
} catch (Exception e) {
e.printStackTrace();
}
return code;
}
public static void main(String[] args) {
String code = SmsUtils.send("换成你的电话", "签名", "模板", "验证码");
System.out.println(code);
}
}
15、pagehelp
分页,自动生成PageInfo实体类
maven
<!-- 引入mybatis的 pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.2</version>
</dependency>
16、wxpay微信支付
maven
<!-- 微信支付 -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>3.0.9</version>
</dependency>
PayUtils
/**
* 微信支付工具类
*/
public class PayUtils {
private static WXPay wxPay;
// 支付成功回调地址
private static String notifyUrl = "http://换成你的外网地址/payNotify";
// 初始化微信支付
static {
try {
PayConfig payConfig = new PayConfig();
payConfig.setAppID("公众账号ID"); // 公众账号ID
payConfig.setMchID("商户号"); // 商户号
payConfig.setKey("生成签名的密钥"); // 生成签名的密钥
wxPay = new WXPay(payConfig);
} catch (Exception e) {
throw new RuntimeException(e.getMessage());
}
}
/**
* 生成微信订单支付URL
* @param orderId 订单的ID
* @param totalPay 支付金额
* @return 生成的URL
*/
public static String createOrder(String orderId, Integer totalPay) {
Map<String, String> data = new HashMap<>();
// 商品描述
data.put("body", "xxx支付中心-商品支付");
// 订单号
data.put("out_trade_no", orderId);
//金额,单位是分
data.put("total_fee", totalPay.toString());
//调用微信支付的终端IP
data.put("spbill_create_ip", "127.0.0.1");
//回调地址
data.put("notify_url", notifyUrl);
// 支付有效时间10分钟
Date now = new Date();
Date now_10 = new Date(now.getTime() + 600000); //10分钟后的时间
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");//可以方便地修改日期格式
String nowTime_10 = dateFormat.format(now_10);
data.put("time_expire", nowTime_10);
// 交易类型为扫码支付
data.put("trade_type", "NATIVE");
// 利用wxPay工具,完成下单
Map<String, String> result = null;
try {
result = wxPay.unifiedOrder(data);
} catch (Exception e) {
throw new RuntimeException("微信下单失败", e);
}
// 校验业务状态
checkResultCode(result);
// 下单成功,获取支付链接
String url = result.get("code_url");
if (StringUtils.isBlank(url)) {
throw new RuntimeException("微信下单失败,支付链接为空");
}
return url;
}
/**
* 检查业务状态
* @param result
*/
public static void checkResultCode(Map<String, String> result) {
String resultCode = result.get("result_code");
if ("FAIL".equals(resultCode)) {
throw new RuntimeException("【微信支付】微信支付业务失败");
}
}
}
18、jackson-xml的转换
javkson和xml之间的转换,主要用于wxpay。
微信返回xml的数据,后端进行解析。
后端也得向微信传输xml格式的数据。
maven
<!--jackson xml的转换工具 -->
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.9.9</version>
</dependency>
19、zookeeper
注意事项:如果出现zookeeper not connected主要是jdk版本和zookeeper版本不匹配,jdk1.8以后,pom中zookeeper依赖不能超过3.4+,不然就会报错。此外3.3+的版本依赖包阿里云中没有,所以建议使用3.4+版本的。
<!-- zookeeper的api管理依赖 -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<!-- zookeeper依赖 -->
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.6</version>
</dependency>
20、commons-codec
密码加密工具类
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</dependency>
user.setPassword(DigestUtils.md5Hex("123456")); // md5加密
21、日期处理包
DateTime类被final修饰,是不可变类,能够保证线程安全。
maven
<!-- 日期处理包 -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
</dependency>
new DateTime(System.currentTimeMillis()).toString("yyyy年MM月dd日 HH:mm")