一、包结构(需要导的库)
二、entity
package org.e276.entity;
import java.sql.Date;
/**
* 员工实体类
* @author miao
*
*/
public class Employee {
private int id;
private String name;
private boolean sex;
private Date birthday;
private double salary;
private int departId;
public Employee() {
super();
}
public Employee(int id, String name, boolean sex, Date birthday, double salary, int departId) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.birthday = birthday;
this.salary = salary;
this.departId = departId;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isSex() {
return sex;
}
public void setSex(boolean sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public int getDepartId() {
return departId;
}
public void setDepartId(int departId) {
this.departId = departId;
}
@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", sex=" + sex + ", birthday=" + birthday
+ ", salary=" + salary + ", departId=" + departId + "]";
}
}
三、dao接口
package org.e276.dao;
import java.util.List;
import java.util.Map;
import org.e276.entity.Employee;
/**
* 实现所有的接口
*/
public interface EmployeeDao {
// 查询所有的用户,使用RowMapper可映射多行数据
public List<Employee> getAllEmployees();
// 查询薪水在3000-5000之间的有条件查询,用RowCallbackHandler,也可以用RowMapper
public List<Employee> getEmployeesBetweenSalary(double low, double up);
// 女或男职员有多少个,单值数据查询
public int getEmployeeCountBySex(boolean sex);
// 一次插入多名职员
public int[] saveEmployees(final Employee[] employees);
// 删除员工
public int deleteEmployee(int id);
// 修改 e必须是final类型
public int updateEmployee(final Employee e);
// 根据ID得到职员,查询单值对象
public Employee getEmployeeById(int id);
// 查询工资小于money的员工
public List<Employee> getEmployeeLessSalary(double money);
// 多表链接查询,封装成Map
public List<Map<String, Object>> findEmployeeInfo();
}
四、daoImpl实现类
package org.e276.dao.impl;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import org.e276.dao.EmployeeDao;
import org.e276.entity.Employee;
import org.e276.mapper.EmployeeMapper;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.namedparam.BeanPropertySqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;
/**
* 实现类
* @author miao
*
*/
public class EmployeeDaoImpl extends NamedParameterJdbcDaoSupport implements EmployeeDao {
/**
* 查询所有的用户,使用RowMapper可映射多行数据
*/
public List<Employee> getAllEmployees() {
return super.getJdbcTemplate().query(
"select id, name, sex, salary, birthday, depart_id from employee",
new EmployeeMapper());
}
/**
* 查询薪水在3000-5000之间的有条件查询,用RowCallbackHandler,也可以用RowMapper
*/
public List<Employee> getEmployeesBetweenSalary(double low, double up) {
return super
.getJdbcTemplate()
.query("select id, name, sex, salary, birthday, depart_id from employee where salary between ? and ?",
new EmployeeMapper(), low, up);
}
/**
* 女或男职员有多少个
*/
public int getEmployeeCountBySex(boolean sex) {
return super.getJdbcTemplate()
.queryForInt("select count(*) from employee where sex=?", sex);
}
/**
* 一次插入多名职员
*/
public int[] saveEmployees(final Employee[] employees) {
String sql = "insert into employee(id, name, sex, salary, birthday, depart_id) values (emp_seq.nextval, ?, ?, ?, ?, ?)";
return super.getJdbcTemplate().batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int index) throws SQLException {
Employee emp = employees[index];
ps.setString(1, emp.getName());
ps.setBoolean(2, emp.isSex());
ps.setDouble(3, emp.getSalary());
ps.setDate(4, emp.getBirthday());
ps.setInt(5, emp.getDepartId());
}
@Override
public int getBatchSize() {
return employees.length;
}
});
}
/**
* 删除员工
*/
public int deleteEmployee(int id) {
return super.getJdbcTemplate().update("delete employee where id = ?", id);
}
/**
* 修改员工 , e必须是final类型
*/
public int updateEmployee(Employee employee) {
return super.getNamedParameterJdbcTemplate().update(
"update employee set name = :name, sex = :sex, salary = :salary where id = :id",
new BeanPropertySqlParameterSource(employee));
}
/**
* 根据ID得到职员
*/
public Employee getEmployeeById(int id) {
return super.getJdbcTemplate().queryForObject(
"select id, name, sex, salary, birthday, depart_id from employee where id=?",
new EmployeeMapper(), id);
}
/**
* 查询工资小于money的员工
*/
public List<Employee> getEmployeeLessSalary(double money) {
return super.getJdbcTemplate().query(
"select id, name, sex, salary, birthday, depart_id from employee where salary<?",
new EmployeeMapper(), money);
}
/**
* 多表链接查询,封装成Map
*/
public List<Map<String, Object>> findEmployeeInfo() {
String sql = "select department.name as dname, t.birthday as birthday, t.salary as salary, t.sex as sex, t.name as ename from employee t, department where department.id = t.depart_id";
return super.getJdbcTemplate().queryForList(sql);
}
}
五、RowMapper
package org.e276.mapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.e276.entity.Employee;
import org.springframework.jdbc.core.RowMapper;
/**
* 实现RowMapper接口
* @author miao
*
*/
public class EmployeeMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("id"));
employee.setName(rs.getString("name"));
employee.setSex(rs.getBoolean("sex"));
employee.setSalary(rs.getDouble("salary"));
employee.setBirthday(rs.getDate("birthday"));
employee.setDepartId(rs.getInt("depart_id"));
return employee;
}
}
六、Spring的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <!-- 数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"> </property> <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"> </property> <property name="username" value="y2" /> <property name="password" value="bdqn" /> </bean> <!-- jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> <!-- 以下属性可选 --> <property name="queryTimeout" value="10" /> <property name="maxRows" value="100" /> </bean> <!-- dao --> <bean id="employeeDao" class="org.e276.dao.impl.EmployeeDaoImpl"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
七、测试类
package org.e276.test;
import java.sql.Date;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.e276.dao.EmployeeDao;
import org.e276.dao.impl.EmployeeDaoImpl;
import org.e276.entity.Employee;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试类
* @author miao
*
*/
public class TestJDBC {
// 上下文
static ApplicationContext context;
// 调用接口
EmployeeDao employeeDao;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
context = new ClassPathXmlApplicationContext("applicationContext.xml");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
context = null;
}
@Before
public void setUp() throws Exception {
employeeDao = context.getBean(EmployeeDaoImpl.class);
}
@After
public void tearDown() throws Exception {
employeeDao = null;
}
/**
* 查询所有的用户
*/
@Test
public void getAllEmployees() {
List<Employee> employees = employeeDao.getAllEmployees();
for (Employee employee : employees) {
System.out.println(employee);
}
}
/**
* 查询薪水在3000-5000之间的有条件查询
*/
public void getEmployeesBetweenSalary() {
List<Employee> employees = employeeDao.getEmployeesBetweenSalary(3000d, 5000d);
for (Employee employee : employees) {
System.out.println(employee);
}
}
/**
* 女或男职员有多少个
*/
public void getEmployeeCountBySex() {
int men = employeeDao.getEmployeeCountBySex(true);
System.out.println("男职员有:" + men + "个");
int women = employeeDao.getEmployeeCountBySex(false);
System.out.println("女职员有:" + women + "个");
}
/**
* 一次插入多名职员
*/
public void saveEmployees() {
Employee[] employees = new Employee[] {
new Employee(0, "小伙伴", true, new Date(43529434432L), 500d, 3),
new Employee(0, "大伙伴", true, new Date(43522344432L), 2500d, 4),
new Employee(0, "中伙伴", true, new Date(43529564432L), 1500d, 5) };
int num[] = employeeDao.saveEmployees(employees);
System.out.println(Arrays.toString(num));
}
/**
* 根据id删除员工
*/
public void deleteEmployee() {
int num = employeeDao.deleteEmployee(1);
if (num > 0) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
}
/**
* 根据id修改员工
*/
public void updateEmployee() {
Employee employee = new Employee(3, "大PPPP孩", false, new Date(43529564432L), 3550d, 5);
int count = employeeDao.updateEmployee(employee);
if (count > 0) {
System.out.println("更新成功!");
} else {
System.out.println("更新失败!");
}
}
/**
* 根据ID得到职员
*/
public void getEmployeeById() {
Employee employee = employeeDao.getEmployeeById(3);
System.out.println("该职员是:" + employee);
}
/**
* 查询工资小于money的员工
*/
public void getEmployeeLessSalary() {
List<Employee> employees = employeeDao.getEmployeeLessSalary(4000d);
for (Employee employee : employees) {
System.out.println("工资小于4000块的名单如下:");
System.out.print("姓名:" + employee.getName() + "\t");
System.out.println("工资:" + employee.getSalary() + "¥");
}
}
/**
* 多表链接,封装成Map
*/
public void findEmployeeInfo() {
List<Map<String, Object>> employees = employeeDao.findEmployeeInfo();
for (Map<String, Object> emp : employees) {
System.out.print(emp.get("ename") + "\t");
System.out.print(emp.get("dname") + "\t");
System.out.print(emp.get("sex") + "\t");
System.out.print(emp.get("salary") + "\t");
System.out.println(emp.get("birthday") + "\t");
System.out.println("-------------------------------------------------------");
}
}
}
八、demo