SpringData入门笔记(一) - 重温jdbc操作
2017-11-05 00:00
183 查看
学习Spring Data之前,我们先通过几种基础的、常见的方式访问数据库,然后再通过Spring Data的方式访问,可以分别其中的优劣,对它们有一个更好的了解。
![](https://static.oschina.net/uploads/img/201711/05235535_8P9k.png)
JDBCUtil.java
StudentDAOImpl.java
StudentDAOTest
目标
有一个学生表,属性有id/name/age,id自增,通过spring-jdbc的方式查询所有数据,添加数据。项目结构
![](https://static.oschina.net/uploads/img/201711/05235535_8P9k.png)
maven依赖
<!-- 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);
代码编写
开发JDBCUtil工具类
功能:获取Connection,关闭Connection、Statement、ResultSetJDBCUtil.java
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.javapackage 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; } }
DAO开发
StudentDAO.javapackage 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.javapackage 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); } }
相关文章推荐
- SpringData入门笔记(五) - 修改、删除和事务
- SpringData入门笔记(三) - SpringData初尝鲜
- 重温《C++ Primer》笔记一 快速入门
- C#笔记(C#入门)
- jQuery入门基础知识学习笔记
- unity3D-游戏/AR/VR在线就业班 C#入门枚举类型学习笔记
- Go Micro 入门笔记
- 笔记:bash脚本入门
- DNN入门笔记三:使用DNN之前的配置工作
- PHP学习笔记一:快速入门
- Android: NDK编程入门笔记
- KNN--用于手写数字识别(机器学习入门笔记)
- torch入门笔记19:关于一些torch博客的索引
- C++ Primer 学习笔记:泛型算法入门 find && accumulate && equal
- Linux学习笔记一 ---- Linux基础知识认知以及初识Linux下C编程入门
- TensorFlow官方教程学习笔记之1-TensorFlow入门教程(Getting Started With TensorFlow)
- Python入门笔记
- HTML入门笔记4-段落标签和换行
- Mybatis学习笔记(三)——入门程序
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)