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

SpringData入门笔记(一) - 重温jdbc操作

2017-11-05 00:00 183 查看
学习Spring Data之前,我们先通过几种基础的、常见的方式访问数据库,然后再通过Spring Data的方式访问,可以分别其中的优劣,对它们有一个更好的了解。

目标

有一个学生表,属性有id/name/age,id自增,通过spring-jdbc的方式查询所有数据,添加数据。

项目结构



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

JDBCUtil.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.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;
}
}

DAO开发

StudentDAO.java

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);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring Data jdbc