如果我必须设计一个Utility类(例如ByteUtils或StreamUtils或StringUtils),那么它们的最佳设计选择是什么.
PS:通过静态类,我的意思是一个带有静态方法的类(而不是内部静态类)
请就此设计选择提出建议?
什么应该是设计DAO类的最佳方法?
方法#1:将 DAO类设计为对象.
class Customer {
//customer class
}
class CustomerDAO {
public void saveCustomer(Customer customer) {
//code
}
public Customer getCustomer(int id) {
//code
}
}
//Client code
class client {
public static void main(String[] args) {
CustomerDAO customerDAO = new CustomerDAO();
Customer customer = new Customer();
customerDAO.saveCustomer(customer);
}
}
Run Code Online (Sandbox Code Playgroud)
方法#2: 使用静态方法设计DAO类(又名静态类)
class Customer {
//customer class
}
class CustomerDAO {
public static void saveCustomer(Customer customer) {
//code
}
public static Customer getCustomer(int id) {
//code
} …Run Code Online (Sandbox Code Playgroud) 考虑一个假设的情况,我必须根据userId从数据库中检索一些细节,下面给出了示例代码
private String getpassword(String username) {
PreparedStatement statement = null;
ResultSet resultSet = null;
Connection conn = null;
final String selectQuery = "SELECT password FROM " + "users WHERE username=?";
try {
conn = dataSource.getConnection();
statement = conn.prepareStatement(selectQuery);
statement.setString(1, username);
resultSet = statement.executeQuery();
if (resultSet.next()) {
}
} catch (SQLException e) {
// log it
}
//return
}
Run Code Online (Sandbox Code Playgroud)
此用户名实际上来自客户端,用户可以篡改数据(如果他愿意).因此,preparedStatements将阻止接受引号并仅将过滤后的SQL形式发送到数据库.
例如:我可以提供username ='或1 = 1,它将是一个有效的SQL语句.但是如果驱动程序从用户输入中删除引号,那么它们将阻止sql注入.
对此一般的理解是什么?
我见过一些代码库,人们编写了名为"$"的嵌套静态类?那有什么意义?
class A {
int a;
static class $B {
int b;
}
}
Run Code Online (Sandbox Code Playgroud)