一、导入jar包
- mysql-connector-java-8.0.16.jar
- spring-jdbc-5.1.0.RELEASE.jar
- spring-test-5.1.0.RELEASE.jar
domain(Student)
package com.revanwang.jdbc.domain;
import lombok.Data;
@Data
public class Student {
private Long id;
private String name;
private Integer age;
}
二、JdbcTemplate
数据库配置
db.properties
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=admin
jdbc.url=jdbc:mysql:///springdemo?useSSL=true&serverTimezone=UTC
jdbc.maxActive=5
applicationContext.xml
dao(StudentDAOImpl)
package com.revanwang.jdbc.dao.impl;
import com.revanwang.jdbc.dao.IStudentDAO;
import com.revanwang.jdbc.domain.Student;
import lombok.Setter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class StudentDAOImpl implements IStudentDAO {
@Setter
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public void save(Student student) {
String sql = "INSERT INTO Student (name, age) VALUES(?, ?)";
this.jdbcTemplate.update(sql, student.getName(), student.getAge());
}
@Override
public void delete(Student student) {
String sql = "DELETE FROM Student WHERE id = ?";
this.jdbcTemplate.update(sql, student.getId());
}
@Override
public void update(Student student) {
String sql = "UPDATE Student SET name = ?, age = ? WHERE id = ?";
this.jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getId());
}
@Override
public Student get(Long id) {
String sql = "SELECT * FROM Student WHERE id = ?";
List students = this.jdbcTemplate.query(sql, new RowMapper() {
@Override
public Student mapRow(ResultSet result, int i) throws SQLException {
Student student = new Student();
student.setId(result.getLong("id"));
student.setName(result.getString("name"));
student.setAge(result.getInt("age"));
return student;
}
}, id);
return students.size() == 1 ? students.get(0) : null;
}
@Override
public List getList() {
String sql = "SELECT * FROM Student";
List studentList = this.jdbcTemplate.query(sql, new RowMapper() {
/**
* 把数据库中一行数据封装成 Student 对象
* 自动把每一行封装的Student对象存储在List集合中,并返回集合
*/
@Override
public Student mapRow(ResultSet resultSet, int i) throws SQLException {
Student student = new Student();
student.setId(resultSet.getLong("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
return student;
}
});
return studentList;
}
}
service(StudentServiceImpl)
package com.revanwang.jdbc.service.impl;
import com.revanwang.jdbc.dao.IStudentDAO;
import com.revanwang.jdbc.domain.Student;
import com.revanwang.jdbc.service.IStudentService;
import lombok.Setter;
import java.util.List;
public class StudentServiceImpl implements IStudentService {
@Setter
private IStudentDAO studentDAO;
@Override
public void save(Student student) {
studentDAO.save(student);
}
@Override
public void delete(Student student) {
studentDAO.delete(student);
}
@Override
public void update(Student student) {
studentDAO.update(student);
}
@Override
public Student get(Long id) {
return studentDAO.get(id);
}
@Override
public List getList() {
return studentDAO.getList();
}
}
Action(StudentAction)
package com.revanwang.jdbc.action;
import com.revanwang.jdbc.domain.Student;
import com.revanwang.jdbc.service.IStudentService;
import lombok.Setter;
import java.util.List;
public class StudentAction {
@Setter
private IStudentService studentService;
public void save(Student student) {
this.studentService.save(student);
}
public void delete(Student student) {
this.studentService.delete(student);
}
public void update(Student student) {
this.studentService.update(student);
}
public Student get(Long id) {
return this.studentService.get(id);
}
public List getList() {
return this.studentService.getList();
}
}
JdbcTest
package com.revanwang.jdbc.test;
import com.revanwang.jdbc.action.StudentAction;
import com.revanwang.jdbc.domain.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class JdbcTest {
@Autowired
private ApplicationContext ctx;
@Test
public void testSave() {
Student student = new Student();
student.setName("WRW");
student.setAge(28);
StudentAction action = ctx.getBean("studentAction", StudentAction.class);
action.save(student);
}
@Test
public void testDelete() {
Student student = new Student();
student.setId(1L);
StudentAction action = ctx.getBean("studentAction", StudentAction.class);
action.delete(student);
}
@Test
public void testUpdate() {
Student student = new Student();
student.setId(4L);
student.setName("乔峰");
student.setAge(119);
StudentAction action = ctx.getBean("studentAction", StudentAction.class);
action.update(student);
}
@Test
public void testGet() {
StudentAction action = ctx.getBean("studentAction", StudentAction.class);
Student student = action.get(2L);
System.out.println(student);
}
@Test
public void testGetList() {
StudentAction action = ctx.getBean("studentAction", StudentAction.class);
List studentList = action.getList();
for (Student student:studentList) {
System.out.println(student);
}
}
}
三、JdbcDaoSupport
使用继承的方式来获取JdbcTemplate
package com.revanwang.jdbc.dao.impl;
import com.revanwang.jdbc.dao.IStudentDAO;
import com.revanwang.jdbc.domain.Student;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
public class StudentDAOImpl extends JdbcDaoSupport implements IStudentDAO {
@Override
public void save(Student student) {
String sql = "INSERT INTO Student (name, age) VALUES(?, ?)";
super.getJdbcTemplate().update(sql, student.getName(), student.getAge());
}
@Override
public void delete(Student student) {
String sql = "DELETE FROM Student WHERE id = ?";
super.getJdbcTemplate().update(sql, student.getId());
}
@Override
public void update(Student student) {
String sql = "UPDATE Student SET name = ?, age = ? WHERE id = ?";
super.getJdbcTemplate().update(sql, student.getName(), student.getAge(), student.getId());
}
@Override
public Student get(Long id) {
String sql = "SELECT * FROM Student WHERE id = ?";
List students = super.getJdbcTemplate().query(sql, new RowMapper() {
@Override
public Student mapRow(ResultSet result, int i) throws SQLException {
Student student = new Student();
student.setId(result.getLong("id"));
student.setName(result.getString("name"));
student.setAge(result.getInt("age"));
return student;
}
}, id);
return students.size() == 1 ? students.get(0) : null;
}
@Override
public List getList() {
String sql = "SELECT * FROM Student";
List studentList = super.getJdbcTemplate().query(sql, new RowMapper() {
/**
* 把数据库中一行数据封装成 Student 对象
* 自动把每一行封装的Student对象存储在List集合中,并返回集合
*/
@Override
public Student mapRow(ResultSet resultSet, int i) throws SQLException {
Student student = new Student();
student.setId(resultSet.getLong("id"));
student.setName(resultSet.getString("name"));
student.setAge(resultSet.getInt("age"));
return student;
}
});
return studentList;
}
}