前期准备:java开发工具(eclipse/IDEA),maven,一颗坚定(o´ω`o)的心。
说明:本项目将使用IDEA作为开发工具,使用maven进行项目构建,使用junit进行测试。
1. 创建maven工程
2. 向pom.xml文件中添加mysql的依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>这里需要注意的是包的版本问题,我这个包的版本比较高,可能会不太稳定。如果有其他版本需求的可以去下面这个网站去找自己想要使用的稳定版本:https://mvnrepository.com/artifact/mysql/mysql-connector-java
由于要使用junit进行测试,所以也需要加上junit的依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>3. 如果你的项目不是以下这样结构的,建议改成这样结构的,方便我们后面的工作~(*^▽^*)
这里给萌新简单解释一下每个目录的意义:
src 存放源代码的目录 main 主目录,用于存放项目中的核心代码 java 用于存放项目中的java代码 resources 用于存放项目中的配置文件 test 用于存放项目中的测试java代码
4. 现在打开我们的数据库,我们建立一个测试用数据库,同时建立一个测试用表:
create database jdbc_data; use jdbc_data; create table user( id int not null auto_increment, name varchar(20) not null, age int not null, primary key(id) );
先随便插入一条数据,用于测试
insert into user(name, age) values('createdpro', 23);5. 准备工作到此结束,接下来新建一个工具类用于统一的获取用于连接数据库的Connection的对象:
新建包:com.createdpro.util
新建类:JdbcUtil.java
代码如下:
import java.sql.*;
public class JdbcUtil {
/**
* 用于获取Connection对象,创建连接
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
// 数据库地址
String url = "jdbc:mysql://localhost:3306/jdbc_data?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
// 数据库用户名
String user = "root";
// 数据库密码
String password = "root";
// mysql驱动
String driverClass = "com.mysql.cj.jdbc.Driver";
Class.forName(driverClass);
Connection connection = DriverManager.getConnection(url, user, password);
return connection;
}
/**
* 销毁连接
* @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();
}
}
}
}6. 建立实体类,对应表结构
新建包:com.createdpro.entity
新建类:User.java
代码如下:
public class User {
private Integer id;
private String name;
private Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}7. 建立dao类,用于实现对数据库的操作
新建包:com.createdpro.dao
新建类:UserDao.java
代码如下:
import com.createdpro.entity.User;
import com.createdpro.util.JdbcUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
/**
* 查询user表中的所有数据
* @return
*/
public List<User> find() {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
// 查询sql语句
String sql = "SELECT id, name, age FROM user";
List<User> users = new ArrayList<>();
try {
connection = JdbcUtil.getConnection();
preparedStatement = connection.prepareStatement(sql);
// resultSet中保存着我们要取出的数据
resultSet = preparedStatement.executeQuery();
// 遍历,取出数据并保存在user对象中,再保存在users集合中
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
users.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 使用后销毁连接
JdbcUtil.release(resultSet, preparedStatement, connection);
}
return users;
}
/**
* 添加一条数据到数据库
* @param user
*/
public void save(User user) {
Connection connection = null;
PreparedStatement preparedStatement = null;
// 使用“?”占位符来插入参数以避免sql注入
String sql = "INSERT INTO user(name, age) VALUES(?, ?)";
try {
connection = JdbcUtil.getConnection();
preparedStatement = connection.prepareStatement(sql);
// 将传入的user中的参数加入到参数列表中
preparedStatement.setString(1, user.getName());
preparedStatement.setInt(2, user.getAge());
preparedStatement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
JdbcUtil.release(null, preparedStatement, connection);
}
}
}8. 在test目录下建立测试类
新建目录:test/java/
新建包:com.createdpro.dao
新建类:UserDaoTest.java
代码如下:
import com.createdpro.entity.User;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
/**
* 查询所有用户信息
*/
@Test
public void findTest(){
UserDao dao = new UserDao();
List<User> users = dao.find();
System.out.println("一共查询到" + users.size() + "个用户。");
for (User user: users) {
System.out.println(user);
}
}
/**
* 保存一个用户的信息
*/
@Test
public void saveTest(){
UserDao dao = new UserDao();
User user = new User();
user.setName("LiMing");
user.setAge(25);
dao.save(user);
System.out.println("保存用户信息成功!");
}
}9. 开始操作测试
右键测试类中的 findTest()方法名,同时选择Run findTest()
我们看到控制台打印出了我们之前保存在数据库中的信息
接下来测试保存数据
右键测试类中的 saveTest()方法名,同时选择Run saveTest()
出现了保存信息成功,那么我们再运行一下findTest()方法,查询一下数据是否生效
数据已经生效。