在本代码中,每当调用storeEmployeeRecord()时,它都会读取jdbcTemplate,然后执行进一步的步骤来存储用户在表单中输入的数据,但问题是getEmployeeById()每当我调用此方法时它返回null。我还发现jdbcTemplate的一个问题是我的第一个方法是能够读取它,但是getEmployeeById()方法没有读取jdbcTemplate并将其diplaying为null
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.naman.commandbean.Employee;
import org.naman.commandbean.SearchEmployeeResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementSetter;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public int storeEmployeeRecord(final Employee employee) {
System.out.println("In storeEmployeeRecord jdbcTemplate= " + jdbcTemplate);
final String query = "insert into EMP_TBL values(?,?,?)";
return jdbcTemplate.update(query, new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, employee.getEno());
ps.setString(2, employee.getName());
ps.setDouble(3, employee.getSalary());
}// end setValues
});// end update
}// end storeEmployeeRecord
public List<SearchEmployeeResult> getEmployeeById(final Integer eno) {
final String QUERY_TO_RETRIEVEBY_ENO = "select * from EMP_TBL where eno=?";
System.out.println("In DAO_________jdbcTemplate= " + jdbcTemplate);
return jdbcTemplate.query(QUERY_TO_RETRIEVEBY_ENO, new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, eno);
System.out.println("PreparedStatement_______value set");
}// end PreparedStatementSetter
}, new RowMapper<SearchEmployeeResult>() {
public SearchEmployeeResult mapRow(ResultSet rs, int rowNum) throws SQLException {
SearchEmployeeResult employeeResult = new SearchEmployeeResult();
employeeResult.setEno(rs.getInt(1));
employeeResult.setName(rs.getString(2));
employeeResult.setSalary(rs.getDouble(3));
System.out.println("All the values are in SearchEmployeeResult.....returning values");
return employeeResult;
}// end mapRow
}); // end RowMapper
}
}// end class
[错误控制台预览:] [1]
这是Bean配置文件
@Configuration
@PropertySource("classpath:db.properties")
public class DbConfiguration {
@Autowired
private Environment environment;
@Autowired
private DataSource dataSource;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(environment.getProperty("db.DriverClassName"));
dataSource.setUrl(environment.getProperty("db.Url"));
dataSource.setUsername(environment.getProperty("db.Username"));
dataSource.setPassword((environment.getProperty("db.Password")));
System.out.println(environment.getProperty("db.Password"));
return dataSource;
}// end dataSource
@Bean
public JdbcTemplate setJdbcTemplate() {
return new JdbcTemplate(dataSource);
}// end JdbcTemplate
}// end class
这是服务类
import java.util.List;
import org.naman.commandbean.Employee;
import org.naman.commandbean.SearchEmployeeResult;
import org.naman.dao.EmployeeDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class EmployeeService {
@Autowired
private EmployeeDAO employeeDAO;
public int save(Employee employee) {
return employeeDAO.storeEmployeeRecord(employee);
}// end save
public List<SearchEmployeeResult> getEmployeeById(Integer eno) {
return new EmployeeDAO().getEmployeeById(eno);
}// end getEmployeeById
}// end class
这是控制器
import java.util.List;
import javax.validation.Valid;
import org.naman.commandbean.Employee;
import org.naman.commandbean.SearchEmployee;
import org.naman.commandbean.SearchEmployeeResult;
import org.naman.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class MyController {
@Autowired
private EmployeeService employeeService;
@RequestMapping(path = "/store", method = RequestMethod.GET)
public String displayForm(Employee employee, Model model) {
model.addAttribute("employee", employee);
return "employeeDataCapture";
}
@RequestMapping(path = "/store", method = RequestMethod.POST)
public String processData(@Valid Employee employee, BindingResult errors, Model model) {
if (errors.hasErrors()) {
return "employeeDataCapture";
} // end if
int saveEmloyeeDetails = employeeService.save(employee);
model.addAttribute("employeeData", saveEmloyeeDetails);
return "employeeDataSuccess";
}
@RequestMapping(path = "/search", method = RequestMethod.GET)
public String displayAllEmployeesFrom(SearchEmployee searchEmployee, Model model) {
model.addAttribute("searchEmployee", searchEmployee);
return "search";
}// end displayAllEmployeesFrom
@RequestMapping(path = "/search", method = RequestMethod.POST)
private String employeeSearchResult(@Valid SearchEmployee searchEmployee, BindingResult errors, Model model) {
if (errors.hasErrors()) {
return "search";
} // end if
List<SearchEmployeeResult> result = employeeService.getEmployeeById(searchEmployee.getEno());
model.addAttribute("searchResult", result);
return "searchResult";
}
}//end class
答案 0 :(得分:0)
可能有3点需要解决:
移除@Autowired private DataSource dataSource;
中的DbConfiguration
,您已经采用@Bean
方法配置DataSource
删除DAO中的setJdbcTemplate
方法。您在字段中找到了@Autowire
。
将@ComponentScan(basePackages = "org.naman")
添加到您的DbConfiguration
。这将扫描组件(包含@Repository
和@Service
等的每个类,并将依赖项注入其中。
实际修复:
将您的方法改为:public List<SearchEmployeeResult> getEmployeeById(Integer eno) {
return employeeDAO.getEmployeeById(eno);
}
您从不自己创建您的Bean。这就是Spring的用途。 Spring jdbcTemplate
未设置getEmployeeById
,因此它为空。