/**
* Copyright 2015 Santhosh Kumar Tekuri
*
* The JLibs authors license this file to you under the Apache License,
* version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*/
package jlibs.examples.jdbc;
import jlibs.jdbc.DAO;
import jlibs.jdbc.JDBC;
import jlibs.jdbc.Order;
import jlibs.jdbc.TableMetaData;
import jlibs.jdbc.annotations.*;
import jlibs.jdbc.paging.Paging;
import java.util.List;
/**
* @author Santhosh Kumar T
*/
public abstract class EmployeeDAO extends DAO<Employee> {
public EmployeeDAO(JDBC jdbc, TableMetaData table){
super(jdbc, table);
}
@Select(column="grade")
public abstract Grade findGrade(long id);
@Select(column="grade", assertMinimumCount =1)
public abstract Grade findGrade1(long id);
@Select(column="grade")
public abstract List<Grade> findGrades(int lt_age);
@Select(expression="count(*)", sql="WHERE #{grade}=${(grade)grade} AND #{age}<${age}")
public abstract int countByGradeAndAge(Grade grade, int age);
@Update
public abstract void updateGrade(long where_id, Grade grade);
@Select(ignoreNullConditions=true, pageBy=@OrderBy(column="id", order= Order.DESCENDING))
public abstract Paging<Employee> pageById(String firstName, String lastName, Integer age, int experience);
@Select(ignoreNullConditions=true, orderBy=@OrderBy(column="id", order=Order.DESCENDING))
public abstract List<Employee> searchOrderById(String firstName, String lastName, Integer age, int experience);
@Select(ignoreNullConditions=true)
public abstract List<Employee> search(String firstName, String lastName, Integer age, int experience);
@Update(ignoreNullConditions=true)
public abstract int updateAgeAndExperience(String where_firstName, String where_lastName, int age, Integer experience);
// @Upsert(ignoreNullConditions=true)
// public abstract void upsertAgeAndExperience(String where_firstName, String where_lastName, int age, Integer experience);
@Select(expression="count(*)")
public abstract int total();
@Select(expression="sum(#{experience})")
public abstract int experienceSum(int lt_age);
@Select(expression="#{age}-#{experience}")
public abstract List<Integer> ageMinusExperiences();
@Select(column="firstName")
public abstract String findFirstName(long id);
@Select(column="firstName")
public abstract List<String> findFirstNames(long id);
@Select(column="experience")
public abstract int findExperience(long id);
@Select(column="experience")
public abstract Integer findExperience1(long id);
@Select(column="experience", assertMinimumCount =1)
public abstract Integer findExperience2(long id);
@Select(column="experience")
public abstract List<Integer> findExperiences(long id);
@Select(column="experience", assertMinimumCount =5)
public abstract List<Integer> findExperiences1(long id);
@Select
public abstract Employee findByID(long id);
@Select(orderBy=@OrderBy(column = "experience"))
public abstract List<Employee> findByAgeOrderByExperience(int age);
@Select
public abstract List<Employee> findByAge(int age);
@Select
public abstract List<Employee> find(String firstName, String lastName);
@Insert
public abstract void insert1(long id, String firstName, String lastName);
@Insert
public abstract Employee insert2(long id, String firstName, String lastName, Grade grade);
@Insert
public abstract void insert(String firstName, int age);
@Update
public abstract int update1(long id, int age, String where_firstName, String where_lastName);
@Update
public abstract int update2(int age, String where_firstName, long id, String where_lastName);
@Upsert
public abstract void upsert1(long id, int age, String where_firstName, String where_lastName, Grade where_grade);
@Upsert
public abstract void upsert2(long id, int age, String where_firstName, String where_lastName);
@Delete
public abstract int delete(String firstName, String lastName);
@Delete
public abstract int delete(String firstName, int age);
@Delete(sql="WHERE #{age} BETWEEN ${fromAge} AND ${toAge} OR #{lastName}=${lastN}")
public abstract int delete(int fromAge, int toAge, String lastN);
}