栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDBC小记 练手项目-Faker

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDBC小记 练手项目-Faker

文章目录
  • 工程目录结构
  • 数据库表结构
  • 依赖与配置说明
  • 模块结构简单说明
  • 项目源代码
    • druid.properties
    • JDBCUtils.java
    • Faker.java
    • baseDao.java
    • FakerDao.java
    • FakerDaoImpl.java
  • 测试代码
    • QueryTest.java
    • GenFakers.java
    • fakers.txt


工程目录结构

数据库表结构


依赖与配置说明
  • 数据库驱动 jar 包 mysql-connector-java-5.1.37.jar 一定要跟数据库版本匹配
  • Druid 配置文件
    • url 末尾参数:
    • ?useSSL=false&serverTimezone=UTC —连接失败
    • &useUnicode=true&characterEncoding=utf8 —中文乱码
    • 数据库名、用户名、密码、最大连接数 根据具体情况更改
    • 也就是下面代码块 { } 中的部分。实际配置时不用 { }
url=jdbc:mysql://localhost:3306/{db_name}?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
username={user_name}
password={pass_word}
driverClassName=com.mysql.jdbc.Driver

initialSize={10}
maxActive={10}

模块结构简单说明

  • Beans 与数据库表对应的对象 ORM1
  • Faker 对应数据库中的 faker 表
    • 属性:对应数据表中的字段(可以不同名),但是查询的时候,需要采用别名显示查询结果
    • Setter、Getter
    • toString:用于打印Faker对象
    • 以及构造方法【图没截全,代码文末展示】

  • Dao2
  • 访问数据信息的类和接口 Data Access Object
  • 部包含任何业务相关的信息
  • baseDao
    • 抽象父类
    • 定义了对数据的CRUD(Create、Retrival、Update、Delete)
  • FakerDao
    • 一个接口
    • 规定了一系列 针对 faker 表 Faker 对象 的操做(包括但不限于增 删 改 查)

  • dao.impl
  • Dao 的实现
  • 继承 baseDao 抽象父类 ;使用 FakerDao 接口
  • FakerDaoImpl
  • 继承 baseDao 对数据库的增删改查基本方法
  • 并运用到 重写 FakerDao 接口定义的操做中
  • 实现对具体 Faker 对象 / faker 表 的操作

  • utils
  • 通用工具包
  • JDBCUtils
  • 需要配置 druid.properties 配置文件
  • 运用 Druid 实现数据库连接,关闭操作
  • 主要用来实现:
    • 返回数据库连接对象
    • 关闭数据库连接

项目源代码

druid.properties
JDBCUtils.java
Faker
baseDao.java
FakerDao.java
FakerDaoImpl.java


druid.properties
url=jdbc:mysql://localhost:3306/{db_name}?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
username={user_name}
password={pass_word}
driverClassName=com.mysql.jdbc.Driver

initialSize={10}
maxActive={10}

JDBCUtils.java
package com.这个包.utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;

import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;


public class JDBCUtils {

    public static DataSource source;
    static{
        try{
            Properties pros = new Properties();
            InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
            pros.load(is);
            source = DruidDataSourceFactory.createDataSource(pros);
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    
    public static Connection getConnection() throws Exception{
        Connection conn = source.getConnection();
        return conn;
    }

    
    public static void closeResource(Connection conn, Statement ps, ResultSet rs){
        DbUtils.closeQuietly(conn);
        DbUtils.closeQuietly(ps);
        DbUtils.closeQuietly(rs);
    }
}

Faker.java
package com.这个包.beans;

public class Faker {
    private Integer id;
    private String ssn;
    private String name;
    private Integer age;
    private String gender;
    private String job;
    private String address;
    private String mail;
    private String phone;

    public Faker(Integer id, String ssn, Integer age, String name, String gender, String job, String address, String mail, String phone) {
        this.id = id;
        this.ssn = ssn;
        this.age = age;
        this.name = name;
        this.gender = gender;
        this.job = job;
        this.address = address;
        this.mail = mail;
        this.phone = phone;
    }

    public Faker() {}

    public Integer getAge(){
        return age;
    }

    public String getSsn() {
        return ssn;
    }

    public void setSsn(String ssn) {
        this.ssn = ssn;
    }

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getJob() {
        return job;
    }

    public void setAge(Integer age){
        this.age = age;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String email) {
        this.mail = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public String toString() {
        return "Faker{" +
                "id=" + id +
                ", ssn='" + ssn + ''' +
                ", name='" + name + ''' +
                ", age=" + age +
                ", gender='" + gender + ''' +
                ", job='" + job + ''' +
                ", address='" + address + ''' +
                ", mail='" + mail + ''' +
                ", phone='" + phone + ''' +
                '}';
    }
}

baseDao.java
package com.这个包.dao;

import com.pxo.utils.JDBCUtils;
import org.apache.commons.dbutils.DbUtils;
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 java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;


public abstract class baseDao {
    private QueryRunner runner = new QueryRunner();
    private Class type;

    
    public baseDao() {
        Class clazz = this.getClass();
        ParameterizedType parameterizedType = (ParameterizedType) clazz.getGenericSuperclass();
        Type[] types = parameterizedType.getActualTypeArguments();

        this.type = (Class) types[0];
    }

    
    public int update(Connection conn, String sql, Object...params){
        int count = 0;
        try{
            count = runner.update(conn, sql, params);
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return count;
    }

    
    public int batch(Connection conn, String sql, Object[][] list){
        try {
            conn.setAutoCommit(false);
            runner.batch(conn, sql, list);
            conn.commit();
            return list.length;
        } catch (SQLException e) {
            try {
                conn.rollback();
            } catch (SQLException ex) {
                ex.printStackTrace();
            }
            e.printStackTrace();
            return -1;
        }finally{
            try {
                conn.setAutoCommit(true);
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    
    public T getBean(Connection conn, String sql, Object...params){
        T t = null;
        try{
            t = runner.query(conn, sql, new BeanHandler(type), params);
        }catch (SQLException e){
            e.printStackTrace();
        }
        return t;
    }

    
    public List getBeanList(Connection conn, String sql, Object...params){
        List list = null;
        try{
            list = runner.query(conn, sql, new BeanListHandler(type), params);
        }catch(SQLException e){
            e.printStackTrace();
        }
        return list;
    }

    
    public Object getValue(Connection conn, String sql, Object...params){
        Object count = null;
        try{
            count = runner.query(conn, sql, new ScalarHandler(), params);
        }catch (SQLException e){
            e.printStackTrace();
        }
        return count;
    }
}

FakerDao.java
package com.这个包.dao;

import com.这个包.beans.Faker;

import java.sql.Connection;
import java.util.List;

public interface FakerDao {

    // 获取所有人的信息
    List getFakers(Connection conn);

    // 插入单个记录
    void saveFaker(Connection conn, Faker faker);

    // 插入多个记录
    void saveFaker(Connection conn, List list);

    // 根据Id 删除单个记录
    void deleteFakerById(Connection conn, String fakerId);

    // 根据 id 获取一条记录
    Faker getFakerById(Connection conn, String fakerId);

    // 根据 性别获取多个记录
    List getFakersByGender(Connection conn, String gender);


    // 根据年龄获取多个记录
    List getFakerByAge(Connection conn, int _age, int age_);

    // 更新单个记录
    void updateFaker(Connection conn, Faker faker);
}

FakerDaoImpl.java
package com.这个包.dao.impl;

import com.这个包.beans.Faker;
import com.这个包.dao.baseDao;
import com.这个包.dao.FakerDao;

import java.sql.Connection;
import java.util.List;

public class FakerDaoImpl extends baseDao implements FakerDao {

    
    @Override
    public List getFakers(Connection conn) {
        List beanList = null;
        String sql = "select * from faker";
        beanList = getBeanList(conn, sql);
        return beanList;
    }

    
    @Override
    public void saveFaker(Connection conn, Faker faker) {
        String sql = "insert into faker(ssn,name,age,gender,job,address,phone,mail) " +
                "values(?,?,?,?,?,?,?,?)";
        update(conn, sql, faker.getSsn(),faker.getName(),faker.getAge(),
                faker.getGender(),faker.getJob(),faker.getAddress(),faker.getPhone(),
                faker.getMail());
    }

    
    @Override
    public void saveFaker(Connection conn, List list) {
        String sql = "insert into faker(ssn,name,age,gender,job,address,phone,mail) " +
                "values(?,?,?,?,?,?,?,?)";
        Object[][] fList = new Object[list.size()][];
        int i = 0;
        for(Faker faker: list){
            Object[] one = {faker.getSsn(),faker.getName(),faker.getAge(),
                    faker.getGender(),faker.getJob(),faker.getAddress(),faker.getPhone(),
                    faker.getMail()};
            fList[i] = one;
            i++;
        }
        batch(conn, sql, fList);
    }

    
    @Override
    public void deleteFakerById(Connection conn, String fakerId) {
        String sql = "delete from faker where id=?";
        update(conn, sql, fakerId);
    }

    
    @Override
    public Faker getFakerById(Connection conn, String fakerId) {
        Faker faker = null;
        String sql = "select * from faker where id=?";
        faker = getBean(conn, sql, fakerId);
        return faker;
    }

    
    @Override
    public List getFakersByGender(Connection conn, String gender) {
        String sql = "select * from faker where gender=?";
        return getBeanList(conn, sql, gender);
    }

    
    @Override
    public List getFakerByAge(Connection conn, int _age, int age_) {
        String sql = "select * from faker where age between ? and ?";
        return getBeanList(conn, sql, _age, age_);
    }

    
    @Override
    public void updateFaker(Connection conn, Faker faker) {
        String sql = "update faker set ssn=?,name=?,age=?,gender=?,job=?, " +
                "address=?,phone=?,mail=? where id=?";
        update(conn, sql, faker.getSsn(),faker.getName(),faker.getAge(),
                faker.getGender(),faker.getJob(),faker.getAddress(),faker.getPhone(),
                faker.getMail(),faker.getId());
    }
}

测试代码
QueryTest.java
package com.另一个包.test4xueou;

import com.另一个包.utils.JDBCUtils;
import com.这个包.beans.Faker;
import com.这个包.dao.impl.FakerDaoImpl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

public class QueryTest {
    static FakerDaoImpl fakerDao = new FakerDaoImpl();

    
    public static void test01(){
        Connection conn = null;
        try {
            conn = JDBCUtils.getConnection();
            List fakers = fakerDao.getFakersByGender(conn, "F");
            for (Faker faker : fakers) {
                System.out.println(faker.getName() + "  " + faker.getAge());
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtils.closeResource(conn, null, null);
        }
    }
    
    public static void test02(){
        Connection conn = null;
        try {
            conn = JDBCUtils.getConnection();
            Faker faker = new Faker(null,"371*******7132",26,"一个名字",
                    "F", "铲车司机", "湖南省大冶市假的街道U座 140957",
                    "kzheng@假的.com","1509********");
            fakerDao.saveFaker(conn, faker);

        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtils.closeResource(conn, null, null);
        }
    }

    
    public static void insert_many(){
        Connection conn = null;
        try {
            List list = GenFakers.get_list();
            conn = JDBCUtils.getConnection();
            fakerDao.saveFaker(conn, list);
            System.out.println("Ok! --");
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtils.closeResource(conn, null, null);
        }
    }

    
    public static void main(String[] args){
        Connection conn = null;
        try {
            conn = JDBCUtils.getConnection();
            String sql = "select mail from faker where id=?";
            Object value = fakerDao.getValue(conn, sql, "321");
            System.out.println(value);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JDBCUtils.closeResource(conn, null, null);
        }
    }
}
GenFakers.java
  • 测试代码需要用到的类
  • 用于从txt文件提取处 List 信息
package com.另一个包.test4xueou;

import com.这个包.beans.Faker;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Random;

public class GenFakers {
    static String path = "txt/fakers.txt";
    
    public static List get_list(){
        List fakers = new ArrayList<>();
        File file = new File(path);
        FileReader filereader = null;
        try {
            filereader = new FileReader(file);
            BufferedReader reader = new BufferedReader(filereader);

            Object[] lines = reader.lines().toArray();
            for(Object line: lines){
                Faker fk = new Faker();
                String one = (String) line;
                String[] faker = one.split("\t");
                fk.setAge(randint(18, 60));
                fk.setSsn(faker[0]);
                fk.setName(faker[1]);
                fk.setGender(faker[2]);
                fk.setJob(faker[3]);
                fk.setAddress(faker[4]);
                fk.setMail(faker[5]);
                fk.setPhone(faker[6]);
                fakers.add(fk);
            }
            filereader.close();
            reader.close();
            return fakers;
        } catch (Exception e) {
            e.printStackTrace();
            return fakers;
        }
    }

    
    public static int randint(int _min, int _max){
        Date date = new Date();
        Long seed = Long.parseLong(String.format("%tN", date));
        Random r = new Random(seed);
        return _min + r.nextInt(_max - _min);
    }
	// 测试函数
    public static void test_main(String[] args){
        List fakers = get_list();
        for (int i=0; i< 20;i++){
            System.out.println(fakers.get(i));
        }
    }
}
fakers.txt
  • 虽然是由 Python Faker 生成的一些假的人物信息
  • 但保不齐就有谁的 身份证号、手机号、邮箱给对上了
  • 这就简单编几个,文件展示的主要也是数据存储格式
  • 每一行单个数据中间时 t 制表符隔开
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
假的身份证号	假的名字	假的性别	假的职业	假的住址	假的邮箱	假的电话号码
                 ........

  1. ORM–Object relation Mapping;对象关系映射 ↩︎

  2. Dao–Data Access Object.访问数据信息的类和接口 ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631306.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号