为Servlet设置SimpleJdbcTemplate

时间:2012-08-23 05:50:39

标签: java spring servlets jdbc spring-jdbc

我是Spring的新手,我正在研究CAS。我需要查询数据库以进行用户身份验证,但我使用servlet作为控制器。因此,我需要知道是否有任何方法可以在该servlet中设置SimpleJdbcTemplate并使用它来查询数据库。如果有如何配置web.xml文件或任何其他文件。

谢谢你。

1 个答案:

答案 0 :(得分:3)

直接向JdbcTemplateServlet注入或访问Controller并不是一个好主意。
您可以在中间插入DAO图层并将JdbcTemplate注入您的DAO将是更好的方法。
为了使用JdbcTemplate,您需要在配置中的某个位置定义DataSource(Spring上下文通过xml或Annotations)。
如果您有UserDao,那么您的弹簧配置如下

<bean class="com.xxx.dao.UserDAOImpl" id="userDAO">
   <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
   <constructor-arg ref="dataSource"/>
</bean>
and here you need to difine your "dataSource" there are multiple ways to configure it, You may get better help from google.

现在,您的UserDaoImpl看起来像

public class UserDAOImpl implements UserDAO {
   private JdbcTemplate jdbcTemplate;
   //setter and getter for jdbcTemplate

   public List<Map<String, Object>> getUsers() {
       String query = "select * from user";
       return jdbcTemplate.queryForList(query, new HashMap<String, String>());
   }
}

在您的Servlet中,您需要使用ServiceLocator

来获取此Dao的引用

在servlet类中

...
public UserDAO getUserDao() {
   return ServiceLocator.getBean(UserDAO.class);
}
...

同样有多种方法可以设计ServiceLocator,这是简单的实现。

public class ServiceLocator implements ApplicationContextAware {

    private static ApplicationContext applicationContext;

    /**
     * @return Returns the applicationContext.
     */
    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static <T> T getBean(Class<T> requiredType) throws BeansException {
        return getApplicationContext().getBean(requiredType);
    }

    /**
     * @param applicationContext The applicationContext to set.
     */
    public void setApplicationContext(ApplicationContext applicationContext) {
        ServiceLocator.applicationContext = applicationContext;
    }

}

最后,所有这些作品都是独立的,您需要单独阅读,您将在Google或Spring论坛上获得更多精确的帮助。