天天看点

Spring+jdbcTemplate简单的CRUD

本文首发:欢迎各位小伙伴来我的博客站逛逛

Spring中有很多概念性的内容,需要我们去花些时间去搞懂,这里只列出Spring的大纲,网上有很多写的很详细的文章,不再赘述

IOC :推荐这篇文章_谈谈对Spring IOC 的理解

AOP : 推荐这篇文章_Spring AOP详解

具体的搞懂下面这些东西,就会对SpringIOC和AOP有一些初步的了解了

- 1.如何创建SpringIOC容器对象

- 2.获取bean对象的两种方式

- 3.通过属性注入的方式配置bean

- 4.如何应用其它bean

- 5.通过引入外部属性文件来配置数据源

- 6.Spring中四个组件注解以及实现自动注入的注解

- 7.AOP术语,切入点表达式的表示方式,五种通知

- 8.声明切入点表达式,设置切面的优先级

- 9.Spring中声明事务,事务的属性

下面就用jdbcTemplate来实现一个简单的增删改查的功能

1。在工程下新建一个Module

Spring+jdbcTemplate简单的CRUD
  • 选择自动创建配置文件,所需要的library一会咱们自己创建
    Spring+jdbcTemplate简单的CRUD
  • 填上Module的名称
    Spring+jdbcTemplate简单的CRUD
  • 在Module下创建一个lib文件夹用来存放所需要的jar包
    Spring+jdbcTemplate简单的CRUD
  • 将jar包选中右键add as library创建一个library库
    Spring+jdbcTemplate简单的CRUD

接下来就是代码部分了

  • 首先需要引入dbproperties数据库的配置文件
  • 配置spring-config.xml配置文件
<!--设置自动扫描的包-->
<context:component-scan base-package="top.idalin"></context:component-scan>

<!--引入外部的属性文件-->
<context:property-placeholder location="db.properties"></context:property-placeholder>

 <!--配置数据源-->
 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
     <property name="user" value="${jdbc.username}"></property>
     <property name="password" value="${jdbc.password}"></property>
     <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
     <property name="driverClass" value="${jdbc.driverClass}"></property>
 </bean>

 <!--配置jdbcTemplate-->
 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
     <!--设置DataSource属性-->
     <property name="dataSource" ref="dataSource"></property>
 </bean>
           
  • 实体类
public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private double salary;
    private Integer deptId;

    @Override
    public String toString() {
        return "Employee{" +
                "id=" + id +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", salary=" + salary +
                ", deptId=" + deptId +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public String getLastName() {
        return lastName;
    }

    public String getEmail() {
        return email;
    }

    public double getSalary() {
        return salary;
    }

    public Integer getDeptId() {
        return deptId;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public void setDeptId(Integer deptId) {
        this.deptId = deptId;
    }
}
           
public class Department {
    private Integer id;
    private String name;

    public void setId(Integer id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }


    public Integer getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "Department{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

}
           
  • 业务逻辑层EmployeeService
public interface EmployeeService {

    public List<Employee> getEmployees();

    public Employee getEmployee(int id);

    void addEmployee(Employee employee);

    void deleteEmployee(int id);

    void updateEmployee(Employee employee);
}
           
  • 业务逻辑层的实现
@Service("employeeService")
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeDao employeeDao;

    @Override
    public List<Employee> getEmployees() {
        return employeeDao.getEmployees();
    }

    @Override
    public Employee getEmployee(int id) {
        return employeeDao.getEmployee(id);
    }

    @Override
    public void addEmployee(Employee employee) {
        employeeDao.addEmployee(employee);
    }

    @Override
    public void deleteEmployee(int id) {
        employeeDao.deleteEmployee(id);
    }

    @Override
    public void updateEmployee(Employee employee) {
        employeeDao.updateEmployee(employee);
    }
}
           
  • 数据访问层
public interface EmployeeDao {

    // 查询所有的员工信息的方法
    public List<Employee> getEmployees();

    public Employee getEmployee(int id);

    void addEmployee(Employee employee);

    void deleteEmployee(int id);

    void updateEmployee(Employee employee);
}
           
  • 数据访问层的实现(操作数据库)
@Repository("emplooyeeDao")
public class EmployeeDaoImpl implements EmployeeDao{

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public List<Employee> getEmployees() {
        String sql = "select * from employees";
        RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);

        List<Employee> employees = jdbcTemplate.query(sql, rowMapper);
        return employees;
    }

    @Override
    public Employee getEmployee(int id) {
        String sql = "select * from employees where id = ?";
        RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class);
        Employee employee = jdbcTemplate.queryForObject(sql,rowMapper,id);
        return employee;
    }

    @Override
    public void addEmployee(Employee employee) {
        // 创建SQL语句
        String sql = "insert into employees(last_name,email,salary,dept_id) values(?,?,?,?)";
        jdbcTemplate.update(sql,employee.getLastName(),employee.getEmail(),employee.getSalary(),employee.getDeptId());
    }

    @Override
    public void deleteEmployee(int id) {
        String sql = "delete from employees where id = ?";
        jdbcTemplate.update(sql,id);
    }

    @Override
    public void updateEmployee(Employee employee) {
        String sql = "update employees set last_name = ?,dept_id = ? where id = ?";
        jdbcTemplate.update(sql,employee.getLastName(),employee.getDeptId(),employee.getId());
    }
}
           
  • 测试类
    • 分别测试查询所有员工、单个员工信息,增加员工信息,删除员工信息及修改员工信息的方法
/**
 * spring与JdbcTemplate实现对数据库的增删改查
 */
public class Spring_TemplateTest {

    // 创建一个IOC容器
    ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-config.xml");


    // 测试查询所有员工的方法
    @Test
    public void testQueryAll() {
        EmployeeService employeeService = (EmployeeService) ioc.getBean("employeeService");
        List<Employee> employees = employeeService.getEmployees();
        for (Employee employee : employees) {
            System.out.println(employee);
        }
    }
    // 测试查询单个员工的方法
    @Test
    public void testQueryEmployee() {
        EmployeeService employeeService = (EmployeeService) ioc.getBean("employeeService");
        Employee employee = employeeService.getEmployee();
        System.out.println(employee);
    }
    // 测试增加一个员工的方法
    @Test
    public void testAddEmployee() {
        EmployeeService employeeService = (EmployeeService) ioc.getBean("employeeService");
        Employee employee = new Employee();
        employee.setLastName("zhaoliu");
        employee.setEmail("[email protected]");
        employee.setSalary();
        employee.setDeptId();
        employeeService.addEmployee(employee);
    }
    // 测试删除一个员工的方法
    @Test
    public void testDeleteEmployee() {
        EmployeeService employeeService = (EmployeeService) ioc.getBean("employeeService");
        employeeService.deleteEmployee();
    }
    // 测试修改员工信息的方法
    @Test
    public void testUpdateEmployee() {
        EmployeeService employeeService = (EmployeeService) ioc.getBean("employeeService");
        Employee employee = new Employee();
        employee.setId();
        employee.setLastName("admin");
        employee.setDeptId();
        employeeService.updateEmployee(employee);
    }
}
           
需要注意的点: 1. jar包版本的问题!! 2.sql语句不要写错!!

项目中的源码,欢迎fork,感谢star!

继续阅读