如何将jdbctemplate.queryforlist语句作为list< map< string,object>>传递给另一个方法

disbfnqx  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(571)

我正在尝试将类employeedao中方法viewemployees中的jdbctemplate.queryforlist语句发送到另一个名为employeeserviceimpl的方法。
我用的是Spring Boot。。

public class EmployeeDAO{                                         

        public List<Map<String,Object>> viewEmployees() {

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        //This is where i make the sql-statement
        List<Map<String, Object>> rows = jdbcTemplate.queryForList("SELECT * FROM employee");

        //here I want to return an List<Map<String,Object>> of rows
        return rows;
    }
}

这是我希望返回值发送到的另一个方法:

public List viewEmployees(){List<Employee> employees = new ArrayList<>();
        EmployeeDAO employeeDAO = new EmployeeDAO();
        List<Map<String, Object>> rows = employeeDAO.viewEmployees();
        //For loop of rows (Employees)
        for (Map row : rows) {
            Employee employee = new Employee();
            employee.setId((int) (row.get("id")));
            employee.setName((String) (row.get("name")));
            employee.setPosition((String) (row.get("position")));
            employee.setProvision_goal((int) (row.get("provision_goal")));
            employee.setProvision_accumulated((int) (row.get("provision_accumulated")));
            employees.add(employee);
        }
        return employees;
    }

我不断得到错误:

java.lang.IllegalArgumentException: Property 'dataSource' is required

    at org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSet(JdbcAccessor.java:160) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at org.springframework.jdbc.core.JdbcTemplate.<init>(JdbcTemplate.java:166) ~[spring-jdbc-5.0.5.RELEASE.jar:5.0.5.RELEASE]
    at com.example.demo.dao.EmployeeDAO.viewEmployees(EmployeeDAO.java:37) ~[classes/:na]
    at com.example.demo.services.EmployeeServiceImpl.viewEmployees(EmployeeServiceImpl.java:61) ~[classes/:na]
    at com.example.demo.controller.HomeController.home(HomeController.java:37) ~[classes/:na]

如何返回行?
我的数据源定义如下:

@Qualifier("dataSource")
@Autowired
DataSource dataSource;

当我结合这两种方法时,我对代码没有问题。问题似乎是当我试图返回employeedao中的行时。

0aydgbwb

0aydgbwb1#

我就是这样定义数据源的

Context initialContext = new InitialContext();
Context envContext = (Context) initialContext.lookup("java:/comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/db1");
JdbcTemplate temp = new JdbcTemplate();
temp.setDataSource(ds);

上下文.xml

<Resource auth="Container" 
   driverClassName="com.mysql.jdbc.Driver" 
   maxActive="100" 
   maxIdle="30" 
   maxWait="10000" 
   minEvictableIdleTimeMillis="30000" 
   name="jdbc/revplatformdb" 
   timeBetweenEvictionRunsMillis="20000"
   type="javax.sql.DataSource"
   password="xxx"
   url="jdbc:mysql://localhost:3306/db1"
   username="database1"/>

相关问题