MyBatis註解動態SQL //TODO
阿新 • • 發佈:2018-12-10
MyBatis註解動態SQL
屬性 | 說明 |
---|---|
T SELECT(String… columns) | 開始或追加select子句 |
T FROM(String… tables) | 啟動或追加from子句 |
T JOIN(String… joins) | |
T INNER_JOIN(String… joins) | |
T LEFT_OUTER_JOIN(String… joins) | |
T RIGHT_OUTER_JOIN(String… joins) | |
T WHERE(String… conditions) | |
T OR() | |
T AND() | |
T GROUP_BY(String… columns) | |
T HAVING(String… conditions) | |
T ORDER_BY(String… columns) | |
T INSERT_INTO(String tableName) | |
T VALUES(String columns, String values) | |
T DELETE_FROM(String table) | |
T UPDATE(String table) | |
T SET(String… sets) |
資料表 amd bean
tb_employee
CREATE TABLE tb_employee ( ID INT(11) PRIMARY KEY AUTO_INCREMENT, loginname VARCHAR(18), PASSWORD VARCHAR(18), NAME VARCHAR(18) DEFAULT NULL, SEX CHAR(2) DEFAULT NULL, AGE INT(11) DEFAULT NULL, phone VARCHAR(21), sal DOUBLE, state VARCHAR(18) ) INSERT INTO tb_employee(loginname,PASSWORD,NAME,sex,age,phone,sal,state) VALUES('jack','123456','傑克','男',26,'13902019999',9800,'ACTIVE'); INSERT INTO tb_employee(loginname,PASSWORD,NAME,sex,age,phone,sal,state) VALUES('rose','123456','露絲','女',21,'13902018888',6800,'ACTIVE');
Employee
public class Employee implements Serializable {
private Integer id; // 主鍵id
private String loginname; // 登入名
private String password; // 密碼
private String name; // 真實姓名
private String sex; // 性別
private Integer age; // 年齡
private String phone; // 電話
private Double sal; // 薪水
private String state; // 狀態
}
mapper
public interface EmployeeMapper {
// 動態查詢
@SelectProvider(type=EmployeeDynaSqlProvider.class,method="selectWhitParam")
List<Employee> selectWhitParam(Map<String, Object> param);
// 動態插入
@InsertProvider(type=EmployeeDynaSqlProvider.class,method="insertEmployee")
@Options(useGeneratedKeys = true, keyProperty = "id")
int insertEmployee(Employee employee);
// 根據id查詢
@SelectProvider(type=EmployeeDynaSqlProvider.class,method="selectWhitParam")
Employee selectEmployeeWithId(Map<String, Object> param);
// 動態更新
@UpdateProvider(type=EmployeeDynaSqlProvider.class,method="updateEmployee")
void updateEmployee(Employee employee);
// 動態刪除
@DeleteProvider(type=EmployeeDynaSqlProvider.class,method="deleteEmployee")
void deleteEmployee(Map<String, Object> param);
}
DynamicSQL
public class EmployeeDynaSqlProvider {
// 動態查詢
// @SelectProvider(type=EmployeeDynaSqlProvider.class,method="selectWhitParam")
// List<Employee> selectWhitParam(Map<String, Object> param);
public String selectWhitParam(Map<String, Object> param){
return new SQL(){
{
SELECT("*");
FROM("tb_employee");
if(param.get("id") != null){
WHERE(" id = #{id} ");
}
if(param.get("loginname") != null){
WHERE(" loginname = #{loginname} ");
}
if(param.get("password") != null){
WHERE("password = #{password}");
}
if(param.get("name")!= null){
WHERE("name = #{name}");
}
if(param.get("sex")!= null){
WHERE("sex = #{sex}");
}
if(param.get("age")!= null){
WHERE("age = #{age}");
}
if(param.get("phone")!= null){
WHERE("phone = #{phone}");
}
if(param.get("sal")!= null){
WHERE("sal = #{sal}");
}
if(param.get("state")!= null){
WHERE("state = #{state}");
}
}
}.toString();
}
// 動態插入
// @InsertProvider(type=EmployeeDynaSqlProvider.class,method="insertEmployee")
// @Options(useGeneratedKeys = true, keyProperty = "id")
// int insertEmployee(Employee employee);
public String insertEmployee(Employee employee){
return new SQL(){
{
INSERT_INTO("tb_employee");
if(employee.getLoginname() != null){
VALUES("loginname", "#{loginname}");
}
if(employee.getPassword() != null){
VALUES("password", "#{password}");
}
if(employee.getName()!= null){
VALUES("name", "#{name}");
}
if(employee.getSex()!= null){
VALUES("sex", "#{sex}");
}
if(employee.getAge()!= null){
VALUES("age", "#{age}");
}
if(employee.getPhone()!= null){
VALUES("phone", "#{phone}");
}
if(employee.getSal()!= null){
VALUES("sal", "#{sal}");
}
if(employee.getState()!= null){
VALUES("state", "#{state}");
}
}
}.toString();
}
// 動態更新
// @UpdateProvider(type=EmployeeDynaSqlProvider.class,method="updateEmployee")
// void updateEmployee(Employee employee);
public String updateEmployee(Employee employee){
return new SQL(){
{
UPDATE("tb_employee");
if(employee.getLoginname() != null){
SET("loginname = #{loginname}");
}
if(employee.getPassword() != null){
SET("password = #{password}");
}
if(employee.getName()!= null){
SET("name = #{name}");
}
if(employee.getSex()!= null){
SET("sex = #{sex}");
}
if(employee.getAge()!= null){
SET("age = #{age}");
}
if(employee.getPhone()!= null){
SET("phone = #{phone}");
}
if(employee.getSal()!= null){
SET("sal = #{sal}");
}
if(employee.getState()!= null){
SET("state = #{state}");
}
WHERE(" id = #{id} ");
}
}.toString();
}
// 動態刪除
// @DeleteProvider(type=EmployeeDynaSqlProvider.class,method="deleteEmployee")
// void deleteEmployee(Map<String, Object> param);
public String deleteEmployee(Map<String, Object> param){
return new SQL(){
{
DELETE_FROM("tb_employee");
if(param.get("id") != null){
WHERE(" id = #{id} ");
}
if(param.get("loginname") != null){
WHERE(" loginname = #{loginname} ");
}
if(param.get("password") != null){
WHERE("password = #{password}");
}
if(param.get("name")!= null){
WHERE("name = #{name}");
}
if(param.get("sex")!= null){
WHERE("sex = #{sex}");
}
if(param.get("age")!= null){
WHERE("age = #{age}");
}
if(param.get("phone")!= null){
WHERE("phone = #{phone}");
}
if(param.get("sal")!= null){
WHERE("sal = #{sal}");
}
if(param.get("state")!= null){
WHERE("state = #{state}");
}
}
}.toString();
}
}