实体类以及表结构

在mybatis-config.xml中注册mapper接口

--------------------------
动态查询@SelectProvider
EmployeeMapper接口

package Intefaceproxy.Dyno;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.SelectProvider;
import model.Employee;
public interface EmployeeMapper {
//动态查询 type:指定一个类 method:使用这个类中的selectWhitParamSql方法返回的sql字符串 作为查询的语句
@SelectProvider(type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider.class,method="selectWhitParamSql")
List<Employee> selectWithParam(Map<String,Object> param);
}

返回sql语句的类

package Intefaceproxy.Dyno;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
public class EmployeeDynaSqlProvider {
//方法中的关键字是区分大小写的 SQL SELECT WHERE
//该方法会根据传递过来的map中的参数内容 动态构建sql语句
public String selectWhitParamSql(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();
}
}

测试:

当然也可以传递employee对象
接口:
?
//传递employee对象
@SelectProvider (type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider. class ,method= "selectWhitEmployeeSql" )
List<Employee>selectWithEmployee(Employee employee);
|
返回sql的类
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
//selectWhitEmployeeSql
public String selectWhitEmployeeSql(Employee employee) {
return new SQL() {
{
SELECT( "*" );
FROM( "tb_employee" );
if (employee.getId()!= null ) {
WHERE( "id=#{id}" );
}
if (employee.getLoginname()!= null ) {
WHERE( "loginname=#{loginname}" );
}
if (employee.getPassword()!= null ) {
WHERE( "password=#{password}" );
}
if (employee.getName()!= null ) {
WHERE( "name=#{name}" );
}
if (employee.getSex()!= null ) {
WHERE( "sex=#{sex}" );
}
}
}.toString();
}
|
测试:

------------------------------
动态插入@InsertProvider
?
1
2
3
4
|
//动态插入
@InsertProvider (type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider. class ,method= "insertEmployeeSql" )
@Options (useGeneratedKeys= true ,keyProperty= "id" )
int insertEmployee(Employee employee);
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//insertEmployeeSql
public String insertEmployeeSql(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
?
1
2
3
|
//动态更新
@UpdateProvider (type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider. class ,method= "updateEmployeeSql" )
void updateEmployee(Employee employee);
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
//updateEmployeeSql
public String updateEmployeeSql(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
?
1
2
3
|
//动态删除
@DeleteProvider (type=Intefaceproxy.Dyno.EmployeeDynaSqlProvider. class ,method= "deleteEmployeeSql" )
void deleteEmployee(Employee employee);
|
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
//deleteEmployeeSql
public String deleteEmployeeSql(Employee employee) {
return new SQL() {
{
DELETE_FROM( "tb_employee" );
if (employee.getLoginname()!= null ) {
WHERE( "loginname=#{loginname}" );
}
if (employee.getPassword()!= null ) {
WHERE( "password=#{password}" );
}
if (employee.getName()!= null ) {
WHERE( "name=#{name}" );
}
}
}.toString();
}
|
测试:

----------------------------------
查看更多随笔:http://www.cnblogs.com/Joke-Jay/
转自https://www.cnblogs.com/Joke-Jay/p/8524722.html