1. Database Table Structure |
EMPLOYEE TABLE:
CREATE TABLE `employee` (
`EMPLOYEE_KEY` bigint PRIMARY KEY,
`EMP_ID` varchar(100) DEFAULT NULL,
`NAME` varchar(100) DEFAULT NULL,
`DEPT_CODE` varchar(100) DEFAULT NULL,
`BASIC_SAL` decimal(8,2) DEFAULT NULL,
`DATE_OF_JOINING` date DEFAULT NULL,
`ADDRESS` varchar(500) DEFAULT NULL
) DEPENDANT:
CREATE TABLE `dependant` (
`DEPENDANT_KEY` bigint PRIMARY KEY,
`DEPENDANT_ID` varchar(100) DEFAULT NULL,
`DEPENDANT_NAME` varchar(100) DEFAULT NULL,
`EMP_ID` varchar(100) DEFAULT NULL,
`RELATION_WITH_EMP` varchar(100) DEFAULT NULL,
`AGE` decimal(5,2) DEFAULT NULL
) |
2. JAVA BEAN CLASSES |
Employees:
public class Employees {
private List<Employee> employeeList = new ArrayList();
} Employee :
public class Employee {
Dependants dependants;
private String address;
private Double basicSal;
private Date dateOfJoining;
private String deptCode;
private String empId;
private Long employeeKey;
private String name;
} Dependants:
public class Dependants {
private List<Dependant< dependantList = new ArrayList();
}
Dependant:
public class Dependant {
Hospitalisations hospitalisations;
private String age;
private Long employeeKey;
private String dependantId;
private Long dependantKey;
private String dependantName;
private String empId;
private String relationWithEmp;
private String tableName;
}
|
3. DAO Class |
DAO Code:
package jdbc.example.pagintion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.stereotype.Repository;
import jdbc.example.dependant.bean.Dependant;
import jdbc.example.dependant.bean.Dependants;
import jdbc.example.employee.bean.Employee;
@Repository("getEmpListApiDAO")
public class GetEmpListApiDAO {
private static Logger log = LoggerFactory.getLogger(GetEmpListApiDAO.class);
private int pageSize = 2;
@Autowired
private JdbcTemplate jdbcTemplate;
public List<Employee> getEmpListWithPagenation(Employee employee, String lastRecordKeyValue) {
String pageMinKey;
String pageMaxKey;
List<Object> minMaxKyList = getMinMaxKeyFromHeaderTableForAPage(employee, lastRecordKeyValue);
if (minMaxKyList.isEmpty())
return new ArrayList<Employee>();
pageMinKey = "" + minMaxKyList.get(0);
pageMaxKey = "" + minMaxKyList.get(1);
String extendedWhereClause = "";
List<Object> paramList = new ArrayList();
String str = "";
str = str + "SELECT\n";
str = str + " EMPLOYEE.*,\n";
str = str + " DEPENDANT.*\n";
str = str + "FROM\n";
str = str + " EMPLOYEE,\n";
str = str + " DEPENDANT \n";
str = str + "WHERE\n";
str = str + " 1 = 1 \n";
str = str + " AND EMPLOYEE.EMP_ID = DEPENDANT.EMP_ID AND EMPLOYEE.BASIC_SAL > 1000 \n";
String getEmpListApiQueryWithPagenation = str;
String orderBy = " ASC ";
extendedWhereClause = extendedWhereClause + " AND EMPLOYEE.NAME >= '" + pageMinKey + "' AND EMPLOYEE.NAME <= '"
+ pageMaxKey + "' ";
extendedWhereClause = extendedWhereClause + " ORDER BY EMPLOYEE.NAME " + orderBy;
getEmpListApiQueryWithPagenation = getEmpListApiQueryWithPagenation + extendedWhereClause;
System.out.println("getEmpListApiQueryWithPagenation=" + getEmpListApiQueryWithPagenation);
return jdbcTemplate.query(getEmpListApiQueryWithPagenation, paramList.toArray(),
new ResultSetExtractor<List<Employee>>() {
@Override
public List<Employee> extractData(ResultSet rs) throws SQLException, DataAccessException {
List<Employee> list = new ArrayList<Employee>();
Map<Long, Employee> employeeKeyEmployeeMap = new HashMap<Long, Employee>();
Map<Long, Dependant> dependantKeyDependantMap = new HashMap<Long, Dependant>();
while (rs.next()) {
Long employeeKey = rs.getLong("EMPLOYEE_KEY");
Employee employee = employeeKeyEmployeeMap.get(employeeKey);
if (employee == null) {
employee = new Employee();
list.add(employee);
employee.setEmployeeKey(employeeKey);
log.info("employeeKey=" + employee.getEmployeeKey());
employee.setEmployeeKey(rs.getLong("EMPLOYEE_KEY"));
employee.setBasicSal(rs.getDouble("BASIC_SAL"));
employee.setDateOfJoining(rs.getDate("DATE_OF_JOINING"));
employee.setDeptCode(rs.getString("DEPT_CODE"));
employee.setEmpId(rs.getString("EMP_ID"));
employee.setName(rs.getString("NAME"));
}
Long dependantKey = rs.getLong("DEPENDANT_KEY");
Dependant dependant = dependantKeyDependantMap.get(dependantKey);
log.info("dependantKeyML=" + dependantKey);
if (dependant == null) {
dependant = new Dependant();
if (employee.getDependants() == null)
employee.setDependants(new Dependants());
if (employee.getDependants().getDependantList() == null)
employee.getDependants().setDependantList(new ArrayList<Dependant>());
employee.getDependants().getDependantList().add(dependant);
dependantKeyDependantMap.put(dependantKey, dependant);
dependant.setDependantKey(dependantKey);
dependant.setDependantKey(rs.getLong("DEPENDANT_KEY"));
dependant.setAge(rs.getString("AGE"));
dependant.setDependantId(rs.getString("DEPENDANT_ID"));
dependant.setDependantName(rs.getString("DEPENDANT_NAME"));
dependant.setRelationWithEmp(rs.getString("RELATION_WITH_EMP"));
}
}
return list;
}
});
}
public List<Object> getMinMaxKeyFromHeaderTableForAPage(Employee employee, String lastRcordKeyValue) {
List<Object> paramList = new ArrayList();
if (lastRcordKeyValue == null)
lastRcordKeyValue = "0";
String str = "";
str = str + "SELECT\n";
str = str + " EMPLOYEE.*,\n";
str = str + " DEPENDANT.*\n";
str = str + "FROM\n";
str = str + " EMPLOYEE,\n";
str = str + " DEPENDANT \n";
str = str + "WHERE\n";
str = str + " 1 = 1 \n";
str = str + " AND EMPLOYEE.EMP_ID = DEPENDANT.EMP_ID EMPLOYEE.BASIC_SAL > 1000 \n";
String getEmpListApiQueryWithPagenation = str;
String orderBy = " ASC ";
String extendedWhereClause = " ";
extendedWhereClause = extendedWhereClause + " AND EMPLOYEE.NAME >= '" + lastRcordKeyValue + "' ";
extendedWhereClause = extendedWhereClause + " ORDER BY EMPLOYEE.NAME " + orderBy + " LIMIT " + pageSize + " ";
getEmpListApiQueryWithPagenation = getEmpListApiQueryWithPagenation + extendedWhereClause;
System.out.println("minMaxSql=" + getEmpListApiQueryWithPagenation);
return jdbcTemplate.query(getEmpListApiQueryWithPagenation, paramList.toArray(),
new ResultSetExtractor<List<Object>>() {
@Override
public List<Object> extractData(ResultSet rs) throws SQLException, DataAccessException {
Object minKey = null;
Object maxKey = null;
List<Object> list = new ArrayList<Object>();
int count = 1;
while (rs.next()) {
if (count == 1) {
minKey = rs.getString("NAME");
count++;
}
maxKey = rs.getString("NAME");
}
if (minKey == null)
return list;
list.add(minKey);
list.add(maxKey);
return list;
}
});
}
}
|
4. Service Class |
Service Code:
package jdbc.example.pagintion;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionException;
import jdbc.example.employee.bean.Employee;
@Service("getEmpListApiService")
public class GetEmpListApiService {
@Autowired
private GetEmpListApiDAO getEmpListApiDAO;
private static Logger log = LoggerFactory.getLogger(GetEmpListApiService.class);
public List<Employee> getEmplistWithPagenation(Employee employee, String lastRecordKey)
throws TransactionException {
try {
return getEmpListApiDAO.getEmpListWithPagenation(employee, lastRecordKey);
} catch (Exception ex) {
throw ex;
}
}
}
|
Here only service, bean classes and DAO code is given. Entire
example code will be available for download very soon. Please provide your feedback here
|