您的位置:首页 > 编程语言 > Java开发

spring,连接数据库之增删改查示例

2020-01-15 11:53 435 查看

本文测试用spring的方式进行数据库的增删改查操作。
基于maven项目的pom.xml方式:

<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.1.RELEASE</version>
<scope>test</scope>
</dependency>
<!-- 用spring连接JDbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.1.RELEASE</version>
</dependency>
<!--  mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- 连接数据库 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

bean层:
Employee.java

package com.bean;

import java.io.Serializable;

public class Employee implements Serializable {
private static final long serialVersionUID = 3150943784355277187L;
private Integer id;
private String name;
private int age;

public Employee() {
}

public Employee(String name, int age) {
this.name = name;
this.age = age;
}

public Employee(Integer id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}

public Integer getId() {
return id;
}

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

public String getName() {
return name;
}

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

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Employee [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}

dao层:
EmployeeDao.java

package com.dao;

import java.util.List;
import com.bean.Employee;

public interface EmployeeDao {
void save(Employee employee);
void update(Employee employee);
void delete(Integer id);
Employee get(Integer id);
List<Employee> getAll();
int count();
}

dao实现类:
EmployeeDaoImpl.java

package com.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

import com.bean.Employee;
import com.dao.EmployeeDao;

public class EmployeeDaoImpl implements EmployeeDao {
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
jdbcTemplate = new JdbcTemplate(dataSource);
}

@Override
public void save(Employee employee) {
jdbcTemplate.update("INSERT INTO tb_employee(name,age) VALUES(?,?)",
employee.getName(), employee.getAge());
}

@Override
public void update(Employee employee) {
jdbcTemplate.update("UPDATE tb_employee SET name=?,age=? WHERE id=?",
employee.getName(), employee.getAge(), employee.getId());
}

@Override
public void delete(Integer id) {
jdbcTemplate.update("DELETE FROM tb_employee WHERE id=?", id);
}

@Override
public int count() {
Integer count = jdbcTemplate.queryForObject("SELECT count(*) FROM tb_employee", Integer.class);
return count;
}

@Override
public Employee get(Integer id) {
// 使用queryForObject方法时,如果查询结果是一个对象,那么当数据不存在 时
// 该方法会报错。
/*Employee employee = jdbcTemplate.queryForObject("SELECT * FROM tb_employee WHERE id=?",
new RowMapper<Employee>() {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setId(rs.getInt("id"));
return employee;
}
}, id);
return employee;*/

/*
List<Employee> emps = jdbcTemplate.query("SELECT * FROM tb_employee WHERE id=?", new RowMapper<Employee>(){
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setId(rs.getInt("id"));
return employee;
}
}, id);*/

// 使用Lambd表达式
List<Employee> emps = jdbcTemplate.query("SELECT * FROM tb_employee WHERE id=?", (rs, rowNum)->{
Employee employee = new Employee();
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setId(rs.getInt("id"));
return employee;
}, id);
return emps.size() > 0 ? emps.get(0) : null;
}

@Override
public List<Employee> getAll() {
List<Employee> emps = jdbcTemplate.query("SELECT * FROM tb_employee", new RowMapper<Employee>(){
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setName(rs.getString("name"));
employee.setAge(rs.getInt("age"));
employee.setId(rs.getInt("id"));
return employee;
}
});
return emps;
}
}

spring配置类:
beans.xml

<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">

<!-- 读db.properties文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 配置数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

<!-- 配置Dao -->
<bean id="employeeDao" class="com.dao.impl.EmployeeDaoImpl">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>

数据库配置文件
db.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=root

测试类
JdbcTemplateTest.java

package com.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

import com.bean.Employee;
import com.dao.EmployeeDao;

@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:beans.xml")
public class JdbcTemplateTest {
@Autowired
private EmployeeDao dao;

@Test
public void testSave() {
Employee employee = new Employee("张三", 18);
dao.save(employee );
}
@Test
public void testUpdate() {
Employee employee = new Employee(12, "张山", 19);
dao.update(employee );
}
@Test
public void testDelete() {
dao.delete(4);
}
@Test
public void testCount() {
int count = dao.count();
System.out.println(count);
}
@Test
public void testGet() {
Employee employee = dao.get(5);
System.out.println(employee);
}

@Test
public void testGetAll() {
List<Employee> all = dao.getAll();
for (Employee employee : all) {
System.out.println(employee);
}
}
}
  • 点赞
  • 收藏
  • 分享
  • 文章举报
一梦如意 发布了92 篇原创文章 · 获赞 1 · 访问量 1010 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: