Spring学习(十):JdbcTemplate操作数据库实现查询功能

简介: Spring学习(十):JdbcTemplate操作数据库实现查询功能

今天记录查询返回三种类型:

1、查询后返回一个值

2、查询后返回一个对象

3、查询后返回一个集合


1、查询后返回一个值

     

例如:查询表中有多少条记录,返回一个int


代码间的具体逻辑见上篇博客


实体类Book:

package demo.entity;
public class Book {
    private String userId;
    private String username;
    private String ustatus;
    public String getUserId() {
        return userId;
    }
    public String getUsername() {
        return username;
    }
    public String getUstatus() {
        return ustatus;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setUstatus(String ustatus) {
        this.ustatus = ustatus;
    }
}


BookDao:

package demo.dao;
        import demo.entity.Book;
public interface BookDao {
    //添加
    public void addBook(Book book);
    //查询记录数量
    int selectCount();
}


BookDaoImpl:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Override
    public int selectCount() {
        String sql = "select count(*) from t_book";
        /*
            第一个参数:sql
            第二个参数:返回类型的class
         */
        Integer integer = jdbcTemplate.queryForObject(sql, Integer.class);
        return integer;
    }
}


BookService:

package demo.service;
import demo.dao.BookDao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
    //注入dao
    @Autowired
    private BookDao bookDao;
    //添加
    public void addBook(Book book){
        bookDao.addBook(book);
    }
    //查询表记录数
    public int findCount(){
        int count = bookDao.selectCount();
        return count;
    }
}


测试一下:

@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        BookService bookService = context.getBean("bookService", BookService.class);
        int count = bookService.findCount();
        System.out.println(count);
    }


运行结果:

20210814143554953.png


数据库中确实只有一条记录:

20210814143614206.png


2、查询后返回一个对象

     

与之前返回值的代码是一个思路,只不过返回类型不同,调用的queryForObject()方法中传的参数不同,这里就只放UserDaoImpl的代码了:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //查询一条记录
    @Override
    public Book selectBook(String id) {
        String sql = "select * from t_book where user_id=? ";
        /*
            第一个参数:sql
            第二个参数:RowMapper,是一个接口,返回不同类型的数据
                        使用该接口的实现类完成数据的封装
            第三个参数:填充占位符的值
         */
        Book book = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<Book>(Book.class),id);
        return book;
    }
}


测试时,传入id值为“1”,表示查询表中的第一条数据

测试结果:

20210814145541422.png


3、查询后返回一个集合

     

例如:返回表中所有的记录


BookDaoImpl:

package demo.dao;
import demo.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
 * 实现数据库的操作
 */
@Repository
public class BookDaoImpl implements BookDao {
    //注入jdbcTemplate
    @Autowired
    private JdbcTemplate jdbcTemplate;
    //
    @Override
    public List<Book> selectAllBook() {
        String sql = "select * from t_book";
        List<Book> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<Book>(Book.class));
        return list;
    }
}


调用的是query()方法,传的参数和上面基本相同


测试结果:

20210814151350106.png


和数据库里的记录刚好对应20210814151411909.png

相关文章
|
4月前
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
448 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
19天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
215 4
|
6月前
|
Cloud Native 关系型数据库 分布式数据库
|
6月前
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
3月前
|
安全 Java Nacos
0代码改动实现Spring应用数据库帐密自动轮转
Nacos作为国内被广泛使用的配置中心,已经成为应用侧的基础设施产品,近年来安全问题被更多关注,这是中国国内软件行业逐渐迈向成熟的标志,也是必经之路,Nacos提供配置加密存储-运行时轮转的核心安全能力,将在应用安全领域承担更多职责。
|
3月前
|
SQL XML Java
配置Spring框架以连接SQL Server数据库
最后,需要集成Spring配置到应用中,这通常在 `main`方法或者Spring Boot的应用配置类中通过加载XML配置或使用注解来实现。
282 0
|
6月前
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
148 20
|
SQL Java 关系型数据库
Spring的JdbcTemplate的简单使用(七)
Spring的JdbcTemplate的简单使用(七)
155 0
Spring的JdbcTemplate的简单使用(七)
|
消息中间件 NoSQL Java
Spring JdbcTemplate基本使用
Spring JdbcTemplate基本使用
339 0
Spring JdbcTemplate基本使用

热门文章

最新文章