一. 导入jar包

二. 创建数据库和表
创建一个数据库webstudy,在该数据库下创建一个user表
CREATE TABLE user (
id int NOT NULL AUTO_INCREMENT,
username varchar(45) NOT NULL,
password varchar(45) NOT NULL,
sex varchar(45) NOT NULL,
country varchar(45) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY username_UNIQUE (username)
insert into user(username,age,sex,country) values('Tom','123456','男','美国');
三. 编写数据库表对应的JavaBean对象
在pojo包下创建User类,将数据库中的内容封装成一个对象
package pojo;
public class User {
private Integer id;
private String username;
private String password;
private String sex;
private String country;
public User() {
}
public User(Integer id, String username, String password, String sex, String country) {
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.country = country;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", country='" + country + '\'' +
'}';
}
}
四. 连接数据库
1. 创建jdbc.properties文件,将其放在src下(必须是src目录下第一级),文件内容为:
url=jdbc:mysql://localhost:3306/webstudy
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=10
maxActive=10
2. 在utils包下创建一个工具类JdbcUtils.java文件,用来连接数据库
package server.utils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JdbcUtils {
private static DataSource source;
static{
try {
Properties properties = new Properties();
//读取jdbc.properties属性
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
//从流中加载数据
properties.load(is);
//创建数据库连接池
source = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() {
Connection conn = null;
try {
conn = source.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭连接
public static void closeResource(Connection conn){
try {
if(conn != null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
四. Dao —— 操作数据库
1. 在dao.impl包下编写BaseDao类,用来操作数据库(更新和查询)
package dao.impl;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import utils.JdbcUtils;
import java.sql.Connection;
import java.util.List;
public abstract class BaseDao {
private QueryRunner queryRunner = new QueryRunner();
//更新数据
public int updateData(String sql, Object ... args) {
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.update(conn, sql, args);
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeResource(conn);
}
return -1;
}
//返回一条数据
public <T> T queryOneData(Class<T> type,String sql, Object ... args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanHandler<T>(type),args);
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeResource(conn);
}
return null;
}
//返回多条数据
public <T> List<T> queryList(Class<T> type, String sql, Object ... args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new BeanListHandler<T>(type),args);
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeResource(conn);
}
return null;
}
//返回一个值(一行或一列)
public Object querySingleValues(String sql, Object ... args){
Connection conn = JdbcUtils.getConnection();
try {
return queryRunner.query(conn,sql,new ScalarHandler(),args);
} catch (Exception e) {
e.printStackTrace();
}finally {
JdbcUtils.closeResource(conn);
}
return null;
}
}
2. 在dao包下编写UserDao接口,用来将用户信息保存到数据库中
package dao;
import pojo.User;
import java.util.List;
public interface UserDao {
//根据用户名查询用户信息,如果返回null说明没有这个用户(可以返回该用户的所有信息)
public User queryUserByUsername(String username);
//根据用户名和密码查询用户信息,如果返回null说明用户名或密码错误(可以返回该用户的所有信息)
public User queryUserByUsernameAndPassword(String username,String password);
//保存用户信息
public int saveUser(User user);
//根据性别查询所有相同性别的用户信息(可以返回用户们的所有信息)(可以替换为其他属性)
public List<User> queryUserList(String sex);
//根据用户名查找用户的密码,(只能查找用户某个属性的值,这里是密码)
public Object queryUserSingleValue(String username);
}
3. 在dao.impl包下编写一个UserDaoImpl类,继承BaseDao类并实现UserDao接口
package dao.impl;
import dao.UserDao;
import pojo.User;
import java.util.List;
public class UserDaoImpl extends BaseDao implements UserDao {
@Override
public User queryUserByUsername(String username) {
String sql = "select id, username,password,sex,country from user where username = ?";
return queryOneData(User.class,sql,username);
}
@Override
public User queryUserByUsernameAndPassword(String username, String password) {
String sql = "select id, username, password, sex, country from user where username = ? and password = ?";
return queryOneData(User.class,sql,username,password);
}
@Override
public int saveUser(User user) {
String sql = "insert into user(username,password,sex,country) values(?,?,?,?)";
return updateData(sql,user.getUsername(),user.getPassword(),user.getSex(),user.getCountry());
}
@Override
public List<User> queryUserList(String sex) {
String sql = "select id, username,password,sex,country from user where sex = ?";
return queryList(User.class,sql,sex);
}
@Override
public Object queryUserSingleValue(String username) {
String sql = "select password from user where username = ?";
return querySingleValues(sql,username);
}
}
五. 编写程序通过调用DAO来操作数据库
import dao.UserDao;
import dao.impl.UserDaoImpl;
import pojo.User;
public class TestDao {
public static void main(String[] args) {
UserDao userDao = new UserDaoImpl();
if(userDao.queryUserByUsername("李四") == null){
userDao.saveUser(new User(null,"李四","12321","男","中国"));
}else{
System.out.println("该用户名已存在");
}
System.out.println(userDao.queryUserList("男"));
System.out.println(userDao.queryUserSingleValue("李四"));
}
}
本文介绍了一个使用Java进行数据库操作的完整案例,包括数据库连接配置、JavaBean对象创建、DAO层设计及具体实现等,展示了如何高效地进行增删查改等数据库操作。
282

被折叠的 条评论
为什么被折叠?



