public class EmployeeDaoImpl extends JdbcDaoSupport{ protected void initDao() throws Exception { super.initDao();
getJdbcTemplate().setNativeJdbcExtractor(new SimpleNativeJdbcExtractor());
}
public int getTotalNumberOfEmployees() { return getJdbcTemplate().queryForInt("SELECT COUNT(0) FROM employees");
} public long getTotalAge() { return getJdbcTemplate().queryForLong("SELECT SUM(age) FROM employee");
}
public long getAverageAge() { return getJdbcTemplate().queryForLong("SELECT AVG(age) FROM employee");
}
public long getOldestAge() { return getJdbcTemplate().queryForLong("SELECT MAX(age) FROM employee");
}
public long getYoungestAge() { return getJdbcTemplate().queryForLong("SELECT MIN(age) FROM employee");
}
}
class Employee { private Integer id;
private Name name = new Name();
private Integer age;
private Sex sex;
private Address address = new Address();
private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
public Employee() {
}
public Employee(String firstName, String lastName) { this.getName().setFirst(firstName); this.getName().setLast(lastName);
}
void setId(Integer id) { this.id = id;
}
public Integer getId() { return id;
}
public Address getAddress() { return address;
}
public Integer getAge() { return age;
}
public void setAge(Integer age) { this.age = age;
}
public Name getName() { return name;
}
public List<PhoneNumber> getPhoneNumbers() { return Collections.unmodifiableList(phoneNumbers);
}
public void addPhoneNumber(PhoneNumber phoneNumber) { this.phoneNumbers.add(phoneNumber);
}
public void removePhoneNumber(PhoneNumber phoneNumber) { this.phoneNumbers.remove(phoneNumber);
}
public void removePhoneNumber(int index) { this.phoneNumbers.remove(index);
}
public Sex getSex() { return sex;
}
public void setSex(Sex sex) { this.sex = sex;
}
}
abstract class Sex {
public static final Sex MALE = new Male();
public static final Sex FEMALE = new Female();
public boolean equals(Object o) { if (o == null) { return false;
} return getClass().equals(o.getClass());
}
}
class PhoneNumber {
}
class Address { private String line1;
private String line2;
private String city;
private String state;
private String zip;
public void setLine1(String line1) { this.line1 = line1;
}
public String getLine1() { return this.line1;
}
public void setLine2(String line2) { this.line2 = line2;
}
public String getLine2() { return this.line2;
}
public void setCity(String city) { this.city = city;
}
public String getCity() { return this.city;
}
public void setState(String state) { this.state = state;
}
public String getState() { return this.state;
}
public void setZip(String zip) { this.zip = zip;
}
public String getZip() { return this.zip;
}
}
final class Male extends Sex { protected Male() {
}
}
final class Female extends Sex { protected Female() {
}
}
class Name { private String first;
private String middle;
private String last;
public void setFirst(String first) { this.first = first;
}
public String getFirst() { return this.first;
}
public void setMiddle(String middle) { this.middle = middle;
}
public String getMiddle() { return this.middle;
}
public void setLast(String last) { this.last = last;
}