Appearance
foreach
xml
<if test="statusList != null and statusList.size()>0">
and stage_status in
<foreach collection="statusList" item="status" open="(" separator="," close=")">
#{status}
</foreach>
</if>
choose
xml
<choose>
<when test="title != null">
AND title like #{title}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
bind
xml
<select id="selectBlogsLike" resultType="Blog">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'"/>
SELECT * FROM BLOG WHERE title LIKE #{pattern}
</select>
toString和比较
xml
<if test="investmentType=='2'.toString()">
and total_investment >= 100000 and total_investment <= 500000
</if>
<if test="startDate != null and startDate != ''">
and create_time <![CDATA[ >= ]]> #{startDate}
</if>
注解
java
@Select({"<script>",
"select * from table where del_flag=0 and username in ",
"<foreach collection='usernames' item='username' separator=',' close=')' open='('>#{username}</foreach> ",
"<if test=\"nickname != null and nickname != ''\"> and nickname like concat('%', #{nickname}, '%') </if>",
"</script>"})
provider
- 方式一
java
@SelectProvider(type = UserSqlBuilder.class, method = "buildGetUsersByName")
List<User> getUsersByName(String name);
public class UserSqlBuilder {
public static String buildGetUsersByName(final String name) {
return new SQL(){{
SELECT("*");
FROM("users");
if (name != null) {
WHERE("name like #{value} || '%'");
}
ORDER_BY("id");
}}.toString();
}
}
- 方式二
java
//同名可以不加method
@SelectProvider(type = UserSqlBuilder.class")
List<User> selectPersonSql(String name);
public String selectPersonSql() {
return new SQL()
.SELECT("P.ID", "A.USERNAME", "A.PASSWORD", "P.FULL_NAME", "D.DEPARTMENT_NAME", "C.COMPANY_NAME")
.FROM("PERSON P", "ACCOUNT A")
.INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID", "COMPANY C on D.COMPANY_ID = C.ID")
.WHERE("P.ID = A.ID", "P.FULL_NAME like #{name}")
.ORDER_BY("P.ID", "P.FULL_NAME")
.toString();
}
sql
ALTER TABLE
sql
# 删除users表phone字段
ALTER TABLE users DROP COLUMN phone;
case
sql
SELECT CASE sex WHEN 1 THEN '男' WHEN 2 THEN '女' ELSE '未知' END AS gender FROM table;
SELECT name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END AS level FROM table;
find_in_set
sql
select * from sys_dept where find_in_set('101', ancestors)