用设计模式写三个查询不同字段的接口,并且三个接口使用的是同一个sql,查询数据库使用mybatis
时间: 2024-02-16 20:00:07 浏览: 67
MyBatis高级映射和查询缓存
好的,我可以为您解答这个问题。
针对这个问题,可以使用模板方法模式和策略模式来实现。
首先,定义一个基础类,包含一个模板方法和一个抽象方法。模板方法用于定义算法框架,抽象方法用于实现具体的查询逻辑。
```java
public abstract class BaseQuery {
public void query(String field) {
String sql = getSql(field);
// 执行查询逻辑
// ...
}
protected abstract String getSql(String field);
}
```
然后,分别定义三个子类,实现具体的查询逻辑和 SQL 语句。
```java
public class QueryByName extends BaseQuery {
@Override
protected String getSql(String field) {
return "SELECT * FROM table WHERE name = " + field;
}
}
public class QueryByAge extends BaseQuery {
@Override
protected String getSql(String field) {
return "SELECT * FROM table WHERE age = " + field;
}
}
public class QueryByGender extends BaseQuery {
@Override
protected String getSql(String field) {
return "SELECT * FROM table WHERE gender = " + field;
}
}
```
最后,在使用的时候,根据需要选择具体的子类,并调用查询方法。
```java
BaseQuery query = new QueryByName(); // 或者 QueryByAge、QueryByGender
query.query("张三");
```
以上是使用模板方法模式的实现方式。
另外,也可以使用策略模式来实现。在策略模式中,定义一个查询策略接口和多个具体的查询策略实现类,每个实现类对应一种查询方式。然后,在使用的时候,根据需要选择具体的查询策略,并调用查询方法。
```java
public interface QueryStrategy {
List<Object> query(String field);
}
public class QueryByName implements QueryStrategy {
@Override
public List<Object> query(String field) {
String sql = "SELECT * FROM table WHERE name = " + field;
// 执行查询逻辑
// ...
return results;
}
}
public class QueryByAge implements QueryStrategy {
@Override
public List<Object> query(String field) {
String sql = "SELECT * FROM table WHERE age = " + field;
// 执行查询逻辑
// ...
return results;
}
}
public class QueryByGender implements QueryStrategy {
@Override
public List<Object> query(String field) {
String sql = "SELECT * FROM table WHERE gender = " + field;
// 执行查询逻辑
// ...
return results;
}
}
public class QueryContext {
private QueryStrategy strategy;
public QueryContext(QueryStrategy strategy) {
this.strategy = strategy;
}
public List<Object> query(String field) {
return strategy.query(field);
}
}
```
使用时,可以先创建一个查询策略实例,然后将其传入查询上下文中,再调用查询方法。
```java
QueryStrategy strategy = new QueryByName(); // 或者 QueryByAge、QueryByGender
QueryContext context = new QueryContext(strategy);
context.query("张三");
```
以上是使用策略模式的实现方式。
这两种实现方式都可以达到相同的效果,您可以根据实际情况选择使用哪种方式。
阅读全文