学习Spring Data以前,咱们先经过几种基础的、常见的方式访问数据库,而后再经过Spring Data的方式访问,能够分别其中的优劣,对它们有一个更好的了解。java
有一个学生表,属性有id/name/age,id自增,经过spring-jdbc的方式查询全部数据,添加数据。mysql
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency>
create database spring_data; create table student( id int not null auto_increment, name varchar(20) not null, age int not null, primary key(id) ); insert into student (name, age) values("zhangsan", 20); insert into student (name, age) values("lisi", 21); insert into student (name, age) values("wangwu", 22);
功能:获取Connection,关闭Connection、Statement、ResultSetspring
JDBCUtil.javasql
package com.dotleo.util; import java.sql.*; /** * 数据库工具类 * @author LiuFei * @create 2017-11-05 21:13 */ public class JDBCUtil { /** * 获取Connection * @return Connection 获取到的jdbcConnection */ public static Connection getConnection() throws ClassNotFoundException, SQLException { /** * 不建议你们把配置硬编码到代码中 * * 最佳实践: 配置性的建议写到.properties配置文件中 */ String driverClass = "com.mysql.jdbc.Driver"; //驱动类 String url = "jdbc:mysql://localhost:3306/spring_data"; //数据库url String username = "root"; //数据库用户 String password = "liufei"; //密码 Class.forName(driverClass); Connection connection = DriverManager.getConnection(url, username, password); return connection; } /** * 释放db相关的资源 * @param resultSet * @param statement * @param connection */ public static void release(ResultSet resultSet, Statement statement, Connection connection) { if(resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } } if(statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } } if(connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }
Student.java数据库
package com.dotleo.entity; /** * Student 实体类 * @author LiuFei * @create 2017-11-05 21:35 */ public class Student { private int id; //主键 private String name; //姓名 private int age; //年龄 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 int getAge() { return age; } public void setAge(int age) { this.age = age; } }
StudentDAO.javamaven
package com.dotleo.dao; import com.dotleo.entity.Student; import java.util.List; /** * 学生类DAO * @author LiuFei * @create 2017-11-05 21:38 */ public interface StudentDAO { /** * 查询全部学生 * @return 全部学生 */ public List<Student> query(); /** * 添加一个学生 * @param student 学生 */ public int save(Student student); }
StudentDAOImpl.java工具
package com.dotleo.dao; import com.dotleo.entity.Student; import com.dotleo.util.JDBCUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; /** * Student类DAO实现类,经过最原始的jdbc方式操做 * @author LiuFei * @create 2017-11-05 21:41 */ public class StudentDAOImpl implements StudentDAO{ public List<Student> query() { List<Student> students = new ArrayList<Student>(); Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null; String sql = "select id, name , age from student"; try { connection = JDBCUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { int id = resultSet.getInt("id"); String name = resultSet.getString("name"); int age = resultSet.getInt("age"); Student student = new Student(); student.setId(id); student.setName(name); student.setAge(age); students.add(student); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(resultSet, preparedStatement, connection); } return students; } public int save(Student student) { int result = 0; Connection connection = null; PreparedStatement preparedStatement = null; String sql = "insert into student (name, age) values (?, ?)"; try { connection = JDBCUtil.getConnection(); preparedStatement = connection.prepareStatement(sql); preparedStatement.setString(1, student.getName()); preparedStatement.setInt(2, student.getAge()); result = preparedStatement.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtil.release(null, preparedStatement, connection); } return result; } }
JDBCUtilTest.java学习
package com.dotleo.util; import org.junit.Assert; import org.junit.Test; import java.sql.Connection; import java.sql.SQLException; /** * @author LiuFei * @create 2017-11-05 21:21 */ public class JDBCUtilTest { @Test public void testGetConnection() throws SQLException, ClassNotFoundException { Connection connection = JDBCUtil.getConnection(); Assert.assertNotNull(connection); } }
StudentDAOTest测试
package com.dotleo.dao; import com.dotleo.entity.Student; import org.junit.Test; import java.util.List; /** * @author LiuFei * @create 2017-11-05 21:57 */ public class StudentDAOTest { @Test public void testQuery() { StudentDAO studentDAO = new StudentDAOImpl(); List<Student> studentList = studentDAO.query(); for (Student student : studentList ) { System.out.println("id: " + student.getId() + "name: " + student.getName() + "age: " + student.getAge()); } } @Test public void testSave() { StudentDAO studentDAO = new StudentDAOImpl(); Student student = new Student(); student.setName("maliu"); student.setAge(23); int result = studentDAO.save(student); System.out.println(result); } }