Spring框架针对dao层的jdbcTemplate操作crud之query查询数据操作 —— 查询表,返回结果为对象的list集合

本文介绍了如何使用Spring框架的JdbcTemplate进行数据库查询操作,特别是展示如何执行query方法,结合自定义RowMapper实现将查询结果转换为User对象的List集合。通过在JdbcTemplateDemo类中定义queryAllObject()方法,配合MyRowMapper类处理ResultSet,最终在Servlet类中调用此功能,展示查询结果。

用JdbcTemplate的方法完成, 查询数据库表,把用户表sw_user所有数据以List<User>集合返回

在JdbcTemplateDemo类中增加查询返回所有对象集合的方法queryAllObject()

数据源DriverManagerDataSource不变

jdbcTemplate的方法有所改变,使用query(sql, new MyRowMapper());

其中第二个参数是一个接口RowMapper<User>的实现类,可以使用匿名内部类,我使用的是单独的类MyRowMapper的对象

它要实现重载的方法mapRow(ResultSet rs, int num)只做两件事

一用ResultSet得到所需User对象数据

二用User进行封装得到对象并返回


 

浏览器得到查询效果图:

JdbcTemplateDemo类:

package com.swift;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.stereotype.Component;

@Component(value="jdbcTemplateDemo")
public class JdbcTemplateDemo {
    
    public List<User> queryAllObject(){
        DriverManagerDataSource dataSource=new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        dataSource.setUrl("jdbc:mysql://localhost:3306/sw_database");
        
        JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
        String sql="select * from sw_user";
        List<User> list=jdbcTemplate.query(sql, new MyRowMapper());
        return list;
        
    }
    
    public User queryOneObject() {
        
        DriverManagerDataSource dataSource=new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/sw_database");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        
        JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
        String sql="select * from sw_user where username=? and password=?";
        User user=jdbcTemplate.queryForObject(sql, new MyRowMapper(), "zhangsan","123456");
        return user;
        
    }
    
    public boolean delete(String username) {
    DriverManagerDataSource dataSource=new DriverManagerDataSource();
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/sw_database");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    
    JdbcTemplate jdbcTemplate=new JdbcTemplate(dataSource);
    int count=jdbcTemplate.update("delete from sw_user where username=?", username);
    if(count!=0) {
        return true;
    }
    return false;
    }
}

//没有用匿名内部类,注意MyRowMapper后没有<User>

class MyRowMapper implements RowMapper<User> {

    @Override
    public User mapRow(ResultSet rs, int num) throws SQLException {
        
        String username=rs.getString("username");
        String password=rs.getString("password");
        User user=new User(username,password);
        return user;
    }
    
}

Servlet类调用该JdbcTemplateDemo类

package com.swift;

import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

@WebServlet("/demo")
public class ServletDemo extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    public ServletDemo() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.getWriter().append("Served at: ").append(request.getContextPath());
        
        //使用JdbcTemplat的queryForObject方法
        ApplicationContext context=new ClassPathXmlApplicationContext("aop.xml");
        JdbcTemplateDemo jdbcTemplateDemo=(JdbcTemplateDemo) context.getBean("jdbcTemplateDemo");
        List<User> list=jdbcTemplateDemo.queryAllObject();
        for(User user:list) {
            response.getWriter().append(user.toString());
            response.getWriter().println();
        }
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

}

所用到的xml配置文件在前面随笔中及相关包

 

<think>嗯,用户想在Eclipse中开发一个Java Web项目,集成SpringSpring JDBC框架,用JdbcTemplate实现CRUD功能。首先,我得回忆一下Spring JDBC的基本配置步骤。记得需要添加相关的依赖,比如Spring Core、Spring JDBC,还有数据库驱动,比如MySQL的驱动。然后配置数据源和JdbcTemplate的Bean,对吧? 用户可能对Eclipse的具体操作不太熟悉,所以需要详细步骤。比如创建Dynamic Web Project,配置Tomcat服务器,还有Maven的pom.xml文件添加依赖。之前引用中提到过JdbcTemplate的配置方式,比如通过Java配置类或者XML配置文件。用户示例中的SpringConfig类用了@Configuration和@Bean,这应该是一个基于Java的配置方法,比较现代,可能比XML更直观。 接下来是创建实体类和DAO。用户需要处理用户信息的增删改查,所以User类和UserDao接口是必须的。在UserDaoImpl中注入JdbcTemplate,然后实现各个CRUD方法。记得要处理异常,SpringJdbcTemplate会抛出DataAccessException,需要适当处理。 然后是Service和Controller,这部分可能用户需要结合Spring MVC。但问题可能集中在如何集成SpringJdbcTemplate,所以重点应该在配置和数据访问。用户可能需要了解如何将JdbcTemplate注入到DAO中,比如通过@Autowired或者构造函数注入。 测试部分也很重要,用户可能不知道怎么在Web应用中测试,可以建议写简单的测试类或者使用main方法进行测试。另外,部署到Tomcat的步骤,可能需要导出WAR包或者配置服务器运行环境。 用户的问题还可能涉及到常见错误,比如数据源配置不正确,驱动类找不到,或者SQL语句错误。需要提醒检查数据库连接URL、用户名密码,以及依赖是否正确添加。 最后,生成相关问题的时候,要考虑到用户可能接下来会问如何分页查询、事务管理,或者整合其他框架比如MyBatis,或者性能优化方面的问题。根据引用内容,之前提到的静态方法中使用jdbctemplate,可能需要解释单例模式或者Util类的设计是否合理,不过用户现在的问题主要是基础配置,所以相关问题应该围绕配置优化、异常处理、事务等。</think>### 在Eclipse中使用Spring JDBC实现CRUD的步骤 #### 一、环境准备 1. **创建Java Web项目** - Eclipse中新建`Dynamic Web Project` - 配置Tomcat服务器 - 添加Maven支持(`pom.xml`配置依赖) 2. **添加依赖(`pom.xml`)** ```xml <!-- Spring核心 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.20</version> </dependency> <!-- Spring JDBC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.20</version> </dependency> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> ``` #### 二、Spring配置 1. **Java配置类(替代XML)** ```java @Configuration @ComponentScan("com.example") public class AppConfig { @Bean public DataSource dataSource() { MysqlDataSource ds = new MysqlDataSource(); ds.setURL("jdbc:mysql://localhost:3306/test?serverTimezone=UTC"); ds.setUser("root"); ds.setPassword("123456"); return ds; } @Bean public JdbcTemplate jdbcTemplate(DataSource dataSource) { return new JdbcTemplate(dataSource); } } ``` > 通过`@Bean`注解创建数据源和JdbcTemplate对象[^4] #### 三、实现CRUD功能 1. **实体类定义** ```java public class User { private Integer id; private String name; private String email; // 省略getter/setter } ``` 2. **DAO实现** ```java @Repository public class UserDaoImpl implements UserDao { @Autowired private JdbcTemplate jdbcTemplate; @Override public void addUser(User user) { String sql = "INSERT INTO users(name, email) VALUES(?,?)"; jdbcTemplate.update(sql, user.getName(), user.getEmail()); } @Override public List<User> findAll() { return jdbcTemplate.query("SELECT * FROM users", (rs, rowNum) -> new User(rs.getInt("id"), rs.getString("name"), rs.getString("email"))); } } ``` > 使用`JdbcTemplate`的`update()`和`query()`方法实现数据操作[^3] #### 四、服务与整合 1. **Service类注入DAO** ```java @Service public class UserService { @Autowired private UserDao userDao; public List<User> getAllUsers() { return userDao.findAll(); } } ``` 2. **Web调用(示例Servlet)** ```java @WebServlet("/users") public class UserServlet extends HttpServlet { @Autowired private UserService userService; @Override public void init() throws ServletException { SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, getServletContext()); } protected void doGet(HttpServletRequest request, HttpServletResponse response) { List<User> users = userService.getAllUsers(); // 转发到JSP显示数据 } } ``` > 通过`SpringBeanAutowiringSupport`实现Servlet与Spring整合[^2] #### 五、数据库表结构 ```sql CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL ); ``` #### 六、部署测试 1. 启动Tomcat服务器 2. 访问`http://localhost:8080/项目名/users` 3. 使用Postman测试API接口
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值