`
IT阿狸
  • 浏览: 67137 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring-JDBC,带一小例子

阅读更多

一、包结构(需要导的库)

 

二、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

Spring-JDBC.zip

  • 大小: 24.6 KB
分享到:
评论

相关推荐

    sharding-jdbc-example

    在Sharding-JDBC的例子中,我们可以通过Spring的Namespace来定义数据源、规则配置等,使得配置更加简洁易懂。例如,可以在XML配置文件中使用sharding标签来声明数据分片策略,以及使用sharding:rule标签来定义具体的...

    spring-security-jdbc

    在本文中,我们将深入探讨其与JDBC(Java Database Connectivity)的集成,即Spring Security JDBC,它是Spring Security实现用户认证和授权的一种常见方式。 首先,让我们理解Spring Security的基本架构。Spring ...

    SpringBoot整合hive-jdbc示例

    这个例子中,我们定义了一个REST API,通过调用`HiveJdbcClient`的`query`方法执行查询语句,并返回结果。 ### 7. 注意事项 1. 确保Hive Server2已经在运行,并且配置的URL、用户名和密码正确。 2. Hadoop的相关...

    spring jdbc.zip

    在Spring框架中,Spring JDBC(Java Database Connectivity)模块扮演着重要的角色,它为开发者提供了一种更高效、更简洁的方式来处理数据库操作。本篇将深入探讨Spring JDBC的核心概念、使用方法以及它如何通过...

    springMVC-JDBC例子

    在本示例中,我们探讨的是“springMVC-JDBC例子”,这主要涉及Spring框架的一个重要组成部分——Spring MVC,以及如何结合JDBC进行数据库操作。Spring MVC是Spring框架中的一个模块,专门用于构建Web应用程序,它...

    Spring-JPA,带一小例子

    标题 "Spring-JPA,带一小例子" 涉及到的是Spring框架中的一个持久层技术——Java Persistence API(JPA)。JPA是Java EE平台的一部分,用于管理关系数据库中的数据,它提供了一种面向对象的方式来操作数据库,简化...

    springBoot和sharding-jdbc、mybatis整合demo

    这个项目提供了一个实际操作的例子,帮助开发者理解如何在SpringBoot应用中集成Sharding-JDBC和MyBatis,实现数据库的分库分表。通过这种方式,可以有效地解决单一数据库的性能瓶颈,提升系统处理能力和稳定性。对于...

    spring-boot 各种集成各种demo例子

    Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它提供了预配置的库、自动配置、内嵌服务器等功能,使得开发者可以快速地创建生产级别的独立 Java 应用。在...

    infinispan-cachestore-jdbc-8.2.3.Final.zip

    接下来,我们转向Spring Integration Java DSL,这个项目(spring-integration-java-dsl.zip)是一个Spring框架的扩展,它提供了Java API来构建Spring Integration流程,使得集成工作更加直观和简洁。Spring ...

    spring boot jdbc的sql文例子

    在Spring Boot框架中,JDBC(Java Database Connectivity)是一个常用的数据访问组件,它允许开发者直接执行SQL语句来与数据库进行交互。本篇文章将详细探讨Spring Boot JDBC的使用,包括如何配置、创建数据源、执行...

    spring-boot2-example:spring-boot2-例子

    联系方式: 本人精心整理spring boot 2.x多个实例,全部调试通过,希望对大家学习spring boot 2有所帮助,很多实例可以...07-spring-boot-jdbc-blob//springjdbc二进制字段读写 08-spring-boot-jdbc-singleField//springjd

    spring-boot 各种demo例子(最新)

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、RabbitMQ、Quartz 等,让开发者可以“开箱即用”。Spring ...

    spring-Acgei的一个小例子之二

    #### 一、Spring与Acegi Security概述 在本文档中,我们将深入了解如何利用Spring框架的IoC(Inverse of Control,控制反转)容器来实现Acegi Security的安全管理功能。Acegi Security是一个用于Java应用程序的安全...

    Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

    spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=root spring.jpa.hibernate.ddl-auto=update # Spring Security 配置 spring.security....

    spring连接数据库aop-jdbc

    Spring 提供了一个JDBC抽象层,简化了传统的JDBC编码,减少了错误和冗余。它包含了JDBC数据源、事务管理、异常翻译以及SQL语句的参数绑定等功能。通过`JdbcTemplate`或`NamedParameterJdbcTemplate`,开发者可以更...

    spring jdbc示例代码

    Spring JDBC是Spring框架的一部分,它提供了一种更高级的方式来处理传统的Java JDBC(Java Database Connectivity),以简化数据库操作。本示例代码将展示如何在Spring环境中使用JDBC进行数据的增删改查操作,并对比...

    SpringJDBC.rar_SpringJDBC_spring jdbc

    通过这个SpringJDBC.rar的案例,初学者可以学习到如何配置DataSource,如何创建JdbcTemplate实例,以及如何编写和执行SQL语句。同时,实践中还可以了解到如何将Spring JDBC整合到Spring Boot项目中,以及如何处理...

    spring中jdbc的操作

    首先,Spring JDBC的核心是JdbcTemplate类,它是Spring提供的一种模板方法模式实现,封装了大量的JDBC操作,如执行SQL语句、处理结果集等,避免了繁琐的JDBC代码和手动管理连接。JdbcTemplate通过提供一系列的模板...

Global site tag (gtag.js) - Google Analytics