今天记录查询返回三种类型:
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); }
运行结果:
数据库中确实只有一条记录:
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”,表示查询表中的第一条数据
测试结果:
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()方法,传的参数和上面基本相同
测试结果:
和数据库里的记录刚好对应: