/**
* Copyright 2009-2016 the original author or authors.
*
* Licensed 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 org.apache.ibatis.submitted.sqlprovider;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.jdbc.SQL;
import java.util.List;
import java.util.Map;
public class OurSqlBuilder {
public String buildGetUsersQuery(Map<String, Object> parameter) {
// MyBatis wraps a single List parameter in a Map with the key="list",
// so need to pull it out
@SuppressWarnings("unchecked")
List<Integer> ids = (List<Integer>) parameter.get("list");
StringBuilder sb = new StringBuilder();
sb.append("select * from users where id in (");
for (int i = 0; i < ids.size(); i++) {
if (i > 0) {
sb.append(",");
}
sb.append("#{list[");
sb.append(i);
sb.append("]}");
}
sb.append(") order by id");
return sb.toString();
}
public String buildGetUserQuery(Number parameter) {
// parameter is not a single List or Array,
// so it is passed as is from the mapper
return "select * from users where id = #{value}";
}
public String buildGetAllUsersQuery() {
return "select * from users order by id";
}
public String buildGetUsersByCriteriaQuery(final User criteria) {
return new SQL(){{
SELECT("*");
FROM("users");
if (criteria.getId() != null) {
WHERE("id = #{id}");
}
if (criteria.getName() != null) {
WHERE("name like #{name} || '%'");
}
}}.toString();
}
public String buildGetUsersByCriteriaMapQuery(final Map<String, Object> criteria) {
return new SQL(){{
SELECT("*");
FROM("users");
if (criteria.get("id") != null) {
WHERE("id = #{id}");
}
if (criteria.get("name") != null) {
WHERE("name like #{name} || '%'");
}
}}.toString();
}
public String buildGetUsersByNameQuery(final String name, final String orderByColumn) {
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{param1} || '%'");
}
ORDER_BY(orderByColumn);
}}.toString();
}
public String buildGetUsersByNameUsingMap(Map<String, Object> params) {
final String name = String.class.cast(params.get("param1"));
final String orderByColumn = String.class.cast(params.get("param2"));
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{param1} || '%'");
}
ORDER_BY(orderByColumn);
}}.toString();
}
public String buildGetUsersByNameWithParamNameAndOrderByQuery(@Param("orderByColumn") final String orderByColumn, @Param("name") final String name) {
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{name} || '%'");
}
ORDER_BY(orderByColumn);
}}.toString();
}
public String buildGetUsersByNameWithParamNameQuery(@Param("name") final String name) {
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{name} || '%'");
}
ORDER_BY("id DESC");
}}.toString();
}
public String buildGetUsersByNameWithParamNameQueryUsingMap(Map<String, Object> params) {
final String name = String.class.cast(params.get("name"));
final String orderByColumn = String.class.cast(params.get("orderByColumn"));
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{param1} || '%'");
}
ORDER_BY(orderByColumn);
}}.toString();
}
public String buildInsert() {
return "insert into users (id, name) values (#{id}, #{name})";
}
public String buildUpdate() {
return "update users set name = #{name} where id = #{id}";
}
public String buildDelete() {
return "delete from users where id = #{id}";
}
}