添加/更新模块
项目目录结构
1、新建maven工程:
Group Id:org.apache.maven.archetypes
Artifact Id:maven-archetype-quickstart
Version:1.1
2、引入依赖:
pom.xml:
<groupId>pers.zhentao</groupId>
<artifactId>AddRecord</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>AddRecord</name>
<url>http://maven.apache.org</url>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<forceJavacCompilerUse>true</forceJavacCompilerUse>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.38</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
</dependencies>
3、lambda函数输入DTO
Record.java
/**
* 通讯录实体类
*
* @author zhangzhentao1995@163.com
* 2017-10-30
*/
public class Record {
private Integer addressBookId;
private String name;
private String phoneNumber;
private String address;
private String telephoneNumber;
private String note;
private Date createTime;
private Integer createdBy;
//getters and setters...
}
4、lambda函数输出DTO
ResponseData.java
/**
* 返回消息
*
* @author zhangzhentao1995@163.com
* 2017-10-30
*/
public class ResponseData {
public static final Integer RESPONSE_CODE_SUCCESS = 1000;
public static final Integer RESPONSE_CODE_ERROR = 1001;
public static final Integer RESPONSE_CODE_SYS_EXCEPTION = 1002;
private Integer code;
private String message;
private List<Record> rows;
private Map<Object, Object> map;
public ResponseData(Integer code, String message) {
this.code = code;
this.message = message;
}
public ResponseData(Integer code, List<Record> rows) {
this.rows = rows;
this.code = code;
}
//getters and setters...
}
5、lambda处理程序
LambdaFunctionHandler.java
/**
* Lambda处理程序
*
* @author zhangzhentao1995@163.com
* 2017-10-30
*/
public class LambdaFunctionHandler implements RequestHandler<Record, ResponseData> {
public ResponseData handleRequest(Record input, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("[" + new Date() + "]input:" + JSONObject.toJSONString(input));
try {
IAddRecordService service = new AddRecordServiceImpl();
service.addRecord(input,context);
return new ResponseData(ResponseData.RESPONSE_CODE_SUCCESS, "add success");
} catch (AddRecordException e) {
logger.log("[" + new Date() + "]exception:" + e.getMsg());
return new ResponseData(ResponseData.RESPONSE_CODE_ERROR, "add failed.");
}
}
}
6、service接口
IAddRecordService.java
/**
* 添加记录接口
*
* @author zhangzhentao1995@163.com
* 2017-10-30
*/
public interface IAddRecordService {
/**
* 添加记录
* @param record
* @exception AddRecordException
*/
public void addRecord(Record record, Context context) throws AddRecordException;
}
7、接口实现类
AddRecordServiceImpl.java
public class AddRecordServiceImpl implements IAddRecordService {
/**
* RDS数据库配置信息
*/
private final String driver = "com.mysql.cj.jdbc.Driver";
private String url = null;
private String username = null;
private String password = null;
private final String INSERT_SQL = "insert into address_book (name,phone_number,address,telephone_number,note,created_by) value (?,?,?,?,?,?)";
private final String UPDATE_SQL = "update address_book set name=?,phone_number=?,address=?,telephone_number=?,note=? where address_book_id=?";
@Override
public void addRecord(Record record, Context context) throws AddRecordException {
url = System.getenv("DB_URL");
username = System.getenv("USERNAME");
password = System.getenv("PASSWORD");
if(url == null || username == null || password == null) {
throw new AddRecordException(AddRecordException.SYS_ERROR_CODE, "db config is null.");
}
try {
Class.forName(driver);
} catch (ClassNotFoundException e) {
throw new AddRecordException(AddRecordException.SYS_ERROR_CODE, "mysql driver not found.");
}
Connection conn;
try {
conn = DriverManager.getConnection(url, username, password);
PreparedStatement statement;
if (record.getAddressBookId() == null) {
statement = conn.prepareStatement(INSERT_SQL);
if (record.getCreatedBy() != null) {
statement.setInt(6, record.getCreatedBy());
} else {
statement.setInt(6, -1);
}
} else {
statement = conn.prepareStatement(UPDATE_SQL);
statement.setInt(6, record.getAddressBookId());
}
statement.setString(1, record.getName());
statement.setString(2, record.getPhoneNumber());
statement.setString(3, record.getAddress());
statement.setString(4, record.getTelephoneNumber());
statement.setString(5, record.getNote());
int count = statement.executeUpdate();
conn.close();
if (count != 1) {
throw new AddRecordException(AddRecordException.DB_ERROR_CODE, "insert/update record faile.");
}
} catch (SQLException e) {
throw new AddRecordException(AddRecordException.DB_ERROR_CODE, e.getMessage());
}
}
}
8、异常类
/**
* 添加异常类
*
* @author zhangzhentao1995@163.com
* 2017-10-30
*/
public class AddRecordException extends Exception {
private static final long serialVersionUID = -7268991732813176830L;
public static final Integer INFO_ERROR_CODE = 1001;
public static final Integer SYS_ERROR_CODE = 2001;
public static final Integer DB_ERROR_CODE = 2002;
private Integer code;
private String msg;
public AddRecordException(String message) {
super(message);
}
public AddRecordException(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
9、maven打包
在项目根目录下,打开命令行,执行命令:
mvn package
执行完成后,项目target文件夹下会出现jar包:XXXX-0.0.1-SNAPSHOT.jar
10、创建Lambda函数,配置处理程序路径,配置环境变量,上传jar包
11、配置测试事件,测试事件1为插入操作(未传入主键),测试事件2为更新操作(传入主键)。
——测试事件1:
——测试结果1:
——测试事件2:
——测试结果2:
至此,添加/更新模块完成。