页面一:
package com.oracle.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
*
* DBTools: database 数据库 工具类
*
* @author Administrator
*
* 理解封装的好处
*
*/
public class DBTools {
//将 三个参数 提取出去 作为全局 静态 常量 变量
private static final String URL = "jdbc:mysql://localhost:3306/java18?characterEncoding=utf8&useSSL=false&serverTimezone=UTC";
private static final String USERNAME = "root";
private static final String PASSWORD = "root";
//java中静态块儿只执行一次
static{
try {
//类 加载时 只运行 一次
Class.forName("com.mysql.jdbc.Driver");
} catch (Exception e) {
e.printStackTrace();
}
}
//最终的目的就是 获取 Connection 设计 个方法 来 获取 连接
//封装 通过这个 方法 获取 Connection 对象
public static Connection getConnection(){
Connection conn = null;//初始化一个 Connection
try {
conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//资源的关闭 关闭 资源 不需要 返回值
// 关闭 什么呢 ? Connection , Statement , ResultSet 所以 要当作 入参传入进来
public static void close(Connection conn,Statement stat,ResultSet rs){
//在方法入参 的地方 定义 形参 ,
try {
if(null != rs){ // 这样写 不会出现 空指针异常
rs.close();
}
if(null != stat){
stat.close();
}
if(null != conn){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
页面二:
package com.oracle.entity;
/**
* 类名 尽量不要使用 t_user
* 导致 你的数据库表 名 要规范 user
*
* @author Administrator
*
* 1.将数据库表 和 java 实体进行 映射 User
* 2.数据库表中的字段 和 java实体中的 属性 一致
*/
public class User {
//数据库表中的字段 和 java实体中的 属性 一致
private Integer id;
private String uname;
private String password;
//无参数
public User(){}
//也可以添加 构造方法 / 构造函数 看你心情
public User(Integer id, String uname, String password) {
this.id = id;
this.uname = uname;
this.password = password;
}
//私有属性 必须 添加getter setter方法 (属性的访问器)
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
//添加toString 方法 用来打印 对象的基本信息
@Override
public String toString() {
return "User [id=" + id + ", uname=" + uname + ", password=" + password
+ "]";
}
}
页面三:
package com.oracle.daoImpl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.oracle.entity.User;
import com.oracle.util.DBTools;
/**
* crud 增删改查
*
* 4个 ,5个 参数 以上 都会 被封装成 一个 实体
*
* @author Administrator
*/
public class UserDaoImpl {
private Connection conn = null;// 全局变量
private Statement stat = null;// 全局变量
private ResultSet rs = null;// 全局变量
/**
* 添加新用户
*/
public void addUser(User user) {
String sql = "insert into user(id,uname,password) values(null,'"
+ user.getUname() + "','" + user.getPassword() + "')";
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
stat.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally {
// 关闭资源
DBTools.close(conn, stat, rs);
}
}
/**
* 刪除用户信息
*/
public void deleteById(int id) {
String sql = "delete from user where id = " + id;
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
stat.executeUpdate(sql);
// 资源关闭
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
}
/**
* 修改用户信息
*
*
*/
public void udpateUser(User user) {
String sql = "update user set uname = '" + user.getUname()
+ "', password = '" + user.getPassword() + "' where id = "
+ user.getId();
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
stat.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
}
/**
* 查询所有 无条件查询 没有入参 ,必须有返回值
*/
public List<User> getAllUser() {
List<User> list = new ArrayList<>();
User user = null;
String sql = "select * from user";
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("password"));
// 将结果集中的 所有记录 添加到 集合中
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
return list;
}
/**
* 有条件确切查询用户信息
*/
public User getUserByNameAndPwd(String uname, String password) {
User user = null;
String sql = "select * from user where uname = '" + uname
+ "' and password = '" + password + "'";
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("password"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
return user;
}
/**
* 有条件模糊查询用户信息
*
* select * from user where uname like '%小%'
*
*/
public List<User> getUserByLike(String a) {
List<User> list = new ArrayList<>();
User user = null;
String sql = "select * from user where uname like '%" + a + "%'";
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("password"));
// 向集合中添加user
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
return list;
}
/**
* 分页查询用户信息:返回值 是 集合 List<User> 入参 开始行 ,页大小 如何 计算 开始行:(pageNo-1)*pageSize
*
*
* select * from user limit 开始行 , 页大小;
*/
public List<User> getUserByLimit(int startRow, int pageSize) {
List<User> list = new ArrayList<>();
User user = null;
String sql = "select * from user limit " + startRow + "," + pageSize;
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("password"));
// 向集合中添加user
list.add(user);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
return list;
}
/**
* 分页查询和模糊查询放在一起查询用户信息 返回值 一定是集合 , 入参 3 个
*
* select * from user where uname like ? limit startRow,pageSize;
*/
public List<User> getUserByLikeWithLimit(String a, int startRow,
int pageSize) {
List<User> list = new ArrayList<>();
User user = null;
String sql = "select * from user where uname like '%" + a
+ "%' limit " + startRow + "," + pageSize;
conn = DBTools.getConnection();
try {
stat = conn.createStatement();
rs = stat.executeQuery(sql);
while (rs.next()) {
user = new User();
user.setId(rs.getInt("id"));
user.setUname(rs.getString("uname"));
user.setPassword(rs.getString("password"));
// 向集合中添加user
list.add(user);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBTools.close(conn, stat, rs);
}
return list;
}
}
页面四:
package com.oracle.test;
import java.util.List;
import org.junit.Test;
import com.oracle.daoImpl.UserDaoImpl;
import com.oracle.entity.User;
public class MyTest {
/**
* 新的测试方法 : 单元测试
* junit 使用到一个 注解 @Test注解 用来修饰方法的
* 单元测试 必须在类中 这个类 没有main 函数 也就是 主方法
*
* 语法结构 :方法 必须是 void 无返回值 方法名 随便起 必须有 @Test注解修饰
* @param args
*
* 访问修饰符 有几个?
* private, protected ,什么也不写 ,public
*
*/
/**登录用户信息
* junit 单元测试
*/
UserDaoImpl userDaoImpl = new UserDaoImpl(); //全局变量
@Test
public void login(){
try {
User user = userDaoImpl.getUserByNameAndPwd("Mike","127");
if(null != user){
System.out.println("登录成功");
}else{
System.out.println("登录失败");
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 添加用户信息
*/
@Test
public void testAdd(){
User user = new User();
//给属性赋值
user.setUname("浩维");
user.setPassword("123123");
//添加
userDaoImpl.addUser(user);
System.out.println("执行完毕");
}
/**
* 删除用户信息
*/
@Test
public void testDelete(){
userDaoImpl.deleteById(9);
System.out.println("删除成功");
}
/**
* 修改用户信息
*/
@Test
public void testUpdate(){
User user = new User();
//不给name 赋值为什么是 null
user.setId(4);
user.setPassword("780");
user.setUname("许航");
userDaoImpl.udpateUser(user);
}
/**
*查询所有的用户信息
*/
@Test
public void getUsers(){
List<User> list = userDaoImpl.getAllUser();
for (User user : list) {
System.out.println(user);
}
}
/**
* 通过名字和密码查询
*/
@Test
public void getUserByNameAndPwd(){
User user = userDaoImpl.getUserByNameAndPwd("Jhon", "129");
System.out.println(user);
}
/**
* 模糊查询代码
*/
@Test
public void getUserByLike(){//模糊查询
List<User> list = userDaoImpl.getUserByLike("o");
for (User user : list) {
System.out.println(user);
}
}
/**
* 分页查询用户信息
*/
@Test
public void getUserByLimit(){//分页查询
int pageNo = 1;
int pageSize = 4;
int startRow = (pageNo - 1)*pageSize;
List<User> list = userDaoImpl.getUserByLimit(startRow, pageSize);
for (User user : list) {
System.out.println(user);
}
}
/**
* 模糊及分页查询
*/
@Test
public void getUserByLikeWithLimit(){
String a = "o";
int pageNo = 2;
int pageSize = 1;
int startRow = (pageNo - 1)*pageSize;
List<User> list = userDaoImpl.getUserByLikeWithLimit(a, startRow, pageSize);
for (User user : list) {
System.out.println(user);
}
}
}