数据库表 dept(id,name)
用 分层开发的思路 进行数据的增删改
在pom.xml 增加
<dependencies> <!--增加依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.30</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> </dependencies>
编写实体层
package entity;
public class Dept {
private int id;
private String name;
public Dept() {
}
public Dept(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Dept{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
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;
}
}
编写业务接口
package service;
import entity.Dept;
import java.sql.SQLException;
import java.util.List;
public interface IDeptService {
/**
* 查询全部
* @return 数据库表 dept的全部数据
*/
List<Dept> queryAll();
/**
* 按照编号删除 部门信息
* @param id 部门编号
* @return 受影响的行数, >0 执行成功, 否则 失败
*/
int delById(int id);
/**
* 按照编号修改 部门名称
* @param dept 包含 编号及新名称
* @return 受影响的行数 , >0 执行成功, 否则 失败
*/
int updateById(Dept dept);
/**
* 根据部门编号获得部门名称
* @param id 部门编号
* @return 部门名称
*/
String getNameById(int id) throws SQLException;
/**
* 增加部门
* @param name 部门名称
* @return 受影响的行数
*/
int save(String name);
}
编写业务的实现类
package service.impl;
import entity.Dept;
import service.IDeptService;
import util.DBUtils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
* Dept的业务层
*/
public class DeptServiceImpl implements IDeptService {
@Override
public List<Dept> queryAll() {
//定义sql
String sql = "SELECT * FROM dept";
//获得数据库连接对象
DBUtils utils = new DBUtils();
Connection conn = utils.getConn();// 获得数据库的连接对象
Statement st = null;
ResultSet rs = null;
List<Dept> deptList = new ArrayList<>();//定义集合
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
// 由于本次sql 是查询全部,因此需要 while遍历
while (rs.next()) {
String name = rs.getString("name");
int id = rs.getInt("id");
// 将 查询结果放到 集合中
Dept dept = new Dept(id,name);
deptList.add(dept);
}
return deptList;
} catch (Exception e) {
System.out.println("------" + e.getMessage());
}
//关闭
utils.closeAll(rs, st, conn);
return null;
}
@Override
public int delById(int id) {
//组装sql
StringBuffer buffer = new StringBuffer();
buffer.append(" delete from dept ");
buffer.append(" where id=? ");
//创建DBUtils 对象
DBUtils db = new DBUtils();
return db.execute(buffer.toString(), new Object[]{id});
}
@Override
public int updateById(Dept dept) {
//组装sql
StringBuffer buffer = new StringBuffer();
buffer.append(" update dept ");
buffer.append(" set name=? ");
buffer.append(" where id=? ");
//创建DBUtils 对象
DBUtils utils = new DBUtils();
return utils.execute(buffer.toString(), new Object[]{dept.getName(), dept.getId()});
}
@Override
public String getNameById(int id) {
//定义sql
String sql = "SELECT name FROM `dept` where id=" + id;
//获得数据库连接对象
DBUtils utils = new DBUtils();
Connection conn = utils.getConn();// 获得数据库的连接对象
Statement st = null;
ResultSet rs = null;
String name = null;
try {
st = conn.createStatement();
rs = st.executeQuery(sql);
// 由于本次sql 是按照主键查询,结果要么有 一个, 要么没有, 因此不需要循环
if (rs.next()) {
name = rs.getString("name");
}
} catch (Exception e) {
System.out.println("------" + e.getMessage());
}
//关闭
utils.closeAll(rs, st, conn);
return name;
}
@Override
public int save(String name) {
DBUtils dbUtils = new DBUtils();
StringBuffer buffer = new StringBuffer();
buffer.append(" insert into dept(name) ");
buffer.append(" values(?) ");
return dbUtils.execute(buffer.toString(), new Object[]{name});
}
}
编写工具类
package util;
import java.sql.*;
/**
* 数据库连接的工具类
*/
public class DBUtils {
// 数据库连接的4个属性
public static final String USERNAME= "root"; //用户名
public static final String PASSWORD = "密码";// 密码
public static final String URL="jdbc:mysql://localhost:3306/数据库名";// 数据库的连接地址
public static final String DRIVER = "com.mysql.cj.jdbc.Driver"; // 注意 8-5.5 写法不同
/**
* 获得数据库的连接对象Connection
* @return Connection
*/
public Connection getConn(){
Connection connection = null;
try{
if(connection==null || connection.isClosed()){
Class.forName(DRIVER); // 加载驱动
connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
}
}catch (Exception e){
System.out.println("-----数据库连接失败----"+e.getMessage());
}
return connection;
}
/**
* 关闭所有的 连接对象
* @param rs
* @param st
* @param conn
*/
public void closeAll(ResultSet rs, Statement st,Connection conn){
try{
// 关闭连接
if(rs !=null){
rs.close();
}
if(st!=null){
st.close();
}
if(conn !=null){
conn.close(); //关闭连接
}
}catch (Exception e){
System.out.println("--------关闭失败----"+e.getMessage());
}
}
// insert delete update 均返回 受影响的行数
/**
* 增加, 删除, 修改 均需要调用本方法,
* @param sql 执行 sql
* @param params sql 需要拼接的参数
* @return 受影响的行数, 如果 行数>=1 表示 sql执行成功, 否则 就是执行 失败
*/
public int execute(String sql,Object[] params){
//获得数据库的连接
Connection conn = this.getConn();
PreparedStatement st = null;
ResultSet rs = null;
try{
st = conn.prepareStatement(sql);
//组装sql
for(int i =0;i< params.length;i++){
st.setObject(i+1,params[i]);
}
//返回受影响的行数
return st.executeUpdate();
}catch (Exception e){
System.out.println("-----执行失败-----"+e.getMessage());
}finally {
this.closeAll(rs,st,conn);
}
return 0;
}
}
编写测试类
import entity.Dept;
import org.junit.Test;
import service.IDeptService;
import service.impl.DeptServiceImpl;
import java.sql.SQLException;
import java.util.List;
public class TestDept {
@Test
public void testQueryAll(){
IDeptService service = new DeptServiceImpl();
List<Dept> list = service.queryAll();
for(Dept dept:list){
System.out.println(dept);
}
}
@Test
public void testDelById(){
IDeptService service = new DeptServiceImpl();
int result = service.delById(5);
if(result>0){
System.out.println("删除success");
}else{
System.out.println("删除失败");
}
}
@Test
public void testUpdateById(){
IDeptService service = new DeptServiceImpl();
Dept dept = new Dept(3,"新财务部");
int result = service.updateById(dept);
if(result>0){
System.out.println("更新success");
}else{
System.out.println("更新失败");
}
}
@Test
public void testGetNameById() throws SQLException {
IDeptService service = new DeptServiceImpl();
String name = service.getNameById(3);
System.out.println("查询结果为----"+name);
}
@Test
public void testSave(){
IDeptService service = new DeptServiceImpl();
int count = service.save("规划部");
//根据 count的取值进行 判断
if(count>=1){
System.out.println("添加 部门 成功");
}else{
System.out.println("添加 部门 失败啊");
}
}
}