4. jdbcTemplate的数据查询的方法
本小节,讲解一下jdbcTemplate的数据查询方法。为了学习便利,在当前工程中增加Junit单元测试框架,以及spring-test的依赖。如下:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.3.13</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> </dependency>
然后在Test目录下的Java目录下创建jdbcTemplateTestor测试用例类,然后进行配置:
import com.haiexijun.dao.EmployeeDao; import com.haiexijun.entity.Employee; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.*; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) public class jdbcTemplateTestor { @Resource private EmployeeDao employeeDao; }
查询多条记录, 在EmployeeDao里面添加如下方法:
//查询多条记录 public List<Employee> findByDname(String dname){ String sql="select * from employee where dname=?"; //query方法用于查询多条数据 List<Employee> employees= jdbcTemplate.query(sql,new Object[]{dname},new BeanPropertyRowMapper<Employee>(Employee.class)); return employees; }
然后到jdbcTemplateTestor里面创建一个新的测试用例:
@Test public void testFindByDname(){ List<Employee> employees=employeeDao.findByDname("研发部"); System.out.println(employees); }
运行后,打印出张三和李四。
关于查询方法,我们还有一个特例,我们之前查询的都是所有的字段(*),并将这些字段名按照实体类的属性的对照关系依依进行转换,但是在实际运行过程中,有很多字段是没有与之对应的实体属性的。下面来模拟一下:
在EmployeeDao里面创建如下的方法:
//将查询结果封装的Map为List public List<Map<String,Object>> findMapByDname(String dname){ String sql="select eno as empno ,salary as s from employee where dname=?"; //把查询结果保存为list集合,每一个元素都是map,每一个Map对应一条记录 List<Map<String,Object>> list= jdbcTemplate.queryForList(sql,new Object[]{dname}); return list; }
添加一个测试用例:
@Test public void testFindMapByDname(){ List<Map<String,Object>> maps=employeeDao.findMapByDname("研发部"); System.out.println(maps); }
运行结果:
5. jdbcTemplate的数据写入的方法
这一节同样是以代码案例的方式来演示增删改查的操作。
新增数据:
下面先来演示增加数据的操作,在EmployeeDao下添加如下的方法:
数据的写入用 jdbcTemplate的update方法。
//数据的新增插入操作 public void insert(Employee employee){ String sql="insert into employee(eno,ename,salary,dname,hiredate)values(?,?,?,?,?)"; jdbcTemplate.update(sql,new Object[]{employee.getEno(),employee.getEname(),employee.getSalary(),employee.getDname(),employee.getHiredate()}); }
下面,编写测试用例来测试一下:
@Test public void testInsert(){ Employee employee=new Employee(); employee.setEno(8888); employee.setEname("赵六"); employee.setSalary(6666f); employee.setDname("研发部"); employee.setHiredate(new Date()); employeeDao.insert(employee); }
运行后,数据成功插入:
数据更新:
在EmployeeDao下添加如下代码用于数据更新:
//用于数据更新 public void update(Employee employee){ String sql="update employee set ename=?,salary=?,dname=?,hiredate=? where eno=?"; jdbcTemplate.update(sql,new Object[]{employee.getEname(),employee.getSalary(),employee.getDname(),employee.getHiredate(),employee.getEno()}); }
编写测试方法:
@Test public void testUpdate(){ Employee employee=new Employee(); employee.setEno(8888); employee.setEname("赵六"); employee.setSalary(8888f); employee.setDname("研发部"); employee.setHiredate(new Date()); employeeDao.update(employee); }
测试结果如下:
下面演示一下删除操作:
在EmployeeDao中添加如下方法:
//数据删除 public void delete(Integer eno){ String sql="delete from employee where eno = ?"; jdbcTemplate.update(sql,new Object[]{eno}); }
这里就不作测试了。
但是一涉及到写操作就要想到事务。下面就来学习。