Java(32):Java对于jdbc对数据库的封装(Bean)

Java从数据库中读取数据,封装到 bean 对象

2.1表aoeData字段类型:

#进入docker

$docker exec -it af35448d73cd bash

#进入数据库mysql

root@af35448d73cd:/# mysql -u root -p

#使用数据库aoe_auto

mysql> use aoe_auto;

#查询表数据类型

mysql> DESC aoeData;

+------------------+---------------+------+-----+---------+----------------+

| Field            | Type          | Null | Key | Default | Extra          |

+------------------+---------------+------+-----+---------+----------------+

| aoeId            | int(19)       | NO   | PRI | NULL    | auto_increment |

| aoeAes           | varchar(1000) | YES  |     | NULL    |                |

| aoeSm4           | varchar(1000) | YES  |     | NULL    |                |

| aoeSm4_a         | varchar(1000) | YES  |     | NULL    |                |

| aoeEmail         | varchar(1000) | YES  |     | NULL    |                |

| aoePhone         | varchar(1000) | YES  |     | NULL    |                |

| aoeIdCard        | varchar(1000) | YES  |     | NULL    |                |

| aoeOfficerCard   | varchar(1000) | YES  |     | NULL    |                |

| aoePassport      | varchar(1000) | YES  |     | NULL    |                |

| aoeGeneralIdCard | varchar(1000) | YES  |     | NULL    |                |

| aoeCreditCard    | varchar(1000) | YES  |     | NULL    |                |

+------------------+---------------+------+-----+---------+----------------+

11 rows in set (0.00 sec)

2.2实体类 AoeData.java

2.2实体类 AoeData.java
package com.ciphergateway.bean;

/**
 *Author:HMF
 *@create 2021-09-16
 **/
public class AoeData {

    private int aoeId; //aoeId
    private String aoeAes; //aoeAes
    private String aoeSm4; //aoeSm4
    private String aoeSm4_a; //aoeSm4_a
    private String aoeEmail; //aoeEmail
    private String aoePhone; //aoePhone
    private String aoeIdCard; //aoeIdCard
    private String aoeOfficerCard; //aoeOfficerCard
    private String aoePassport; //aoePassport
    private String aoeGeneralIdCard; //aoeGeneralIdCard
    private String aoeCreditCard; //aoeCreditCard

    public int getAoeId() {
        return aoeId;
    }
    public void setAoeId(int aoeId) {
        this.aoeId = aoeId;
    }
    public String getAoeAes() {
        return aoeAes;
    }
    public void setAoeAes(String aoeAes) {
        this.aoeAes = aoeAes;
    }
    public String getAoeSm4() {
        return aoeSm4;
    }
    public void setAoeSm4(String aoeSm4) {
        this.aoeSm4 = aoeSm4;
    }
    public String getAoeSm4_a() {
        return aoeSm4_a;
    }
    public void setAoeSm4_a(String aoeSm4_a) {
        this.aoeSm4_a = aoeSm4_a;
    }
    public String getAoeEmail() {
        return aoeEmail;
    }
    public void setAoeEmail(String aoeEmail) {
        this.aoeEmail = aoeEmail;
    }
    public String getAoePhone() {
        return aoePhone;
    }
    public void setAoePhone(String aoePhone) {
        this.aoePhone = aoePhone;
    }
    public String getAoeIdCard() {
        return aoeIdCard;
    }
    public void setAoeIdCard(String aoeIdCard) {
        this.aoeIdCard = aoeIdCard;
    }
    public String getAoeOfficerCard() {
        return aoeOfficerCard;
    }
    public void setAoeOfficerCard(String aoeOfficerCard) {
        this.aoeOfficerCard = aoeOfficerCard;
    }
    public String getAoePassport() {
        return aoePassport;
    }
    public void setAoePassport(String aoePassport) {
        this.aoePassport = aoePassport;
    }
    public String getAoeGeneralIdCard() {
        return aoeGeneralIdCard;
    }
    public void setAoeGeneralIdCard(String aoeGeneralIdCard) {
        this.aoeGeneralIdCard = aoeGeneralIdCard;
    }
    public String getAoeCreditCard() {
        return aoeCreditCard;
    }
    public void setAoeCreditCard(String aoeCreditCard) {
        this.aoeCreditCard = aoeCreditCard;
    }
}

2.3.db.properties 文件中的内容:

#mysql原库

driverClass =com.mysql.jdbc.Driver

url=jdbc:mysql://10.1.1.191:3306/aoe_auto?useSSL=false&useUnicode=yes&characterEncoding=UTF-8

userName=root

passWord=123456

tableName=aoeData

2.4.针对数据库的封装DataBaseUtil.java

package com.ciphergateway.utils;

import com.ciphergateway.bean.AoeData;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.*;

/**
*Author:HMF
*@create 2021-09-16
**/

public class DataBaseUtil {

    // JDBC 驱动名及数据库 URL
    private static String driver;
    private static String url;
    // 过插件的JDBC 驱动名及数据库 URL
    private static String aoeDriver;
    private static String aoeUrl;

    // 数据库的用户名与密码,需要根据自己的设置
    private static String userName;
    private static String passWord;

    //SQL Connection Object
    private static Connection conn = null;

    //SQL Statement Object
    //private static Statement stmt = null;
    private static PreparedStatement pstmt = null;

    //SQL ResultSet Object
    private static ResultSet rs = null;


    public DataBaseUtil() throws Exception{
        InputStream in = DataBaseUtil.class.getClassLoader().getResourceAsStream("db.properties");
        Properties pro = new Properties();
        try {
            pro.load(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
        driver = pro.getProperty("driverClass");
        url = pro.getProperty("url");
        aoeDriver=pro.getProperty("aoeDriverClass");
        aoeUrl=pro.getProperty("aoeUrl");
        userName = pro.getProperty("userName");
        passWord = pro.getProperty("passWord");
        System.out.println(driver+url+userName+passWord);
    }

    /**
     * 直连数据库
     */
    public Connection getConnection(){
        return getConnection(null);
    }

    /**
     * 过AOE连接数据库
     * @return conn
     */
    public Connection getConnection(String aoe){
        try {
           // 加载 MySQL JDBC 驱动类
            Class.forName(driver);
            // 建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接,比较耗时!这是Connection对象管理的一个要点!)
            conn = DriverManager.getConnection(url, userName, passWord);
            if (aoe !=null){
                Class.forName(aoeDriver);
                conn = DriverManager.getConnection(aoeUrl, userName, passWord);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println("fail to connect database");
        }
        return conn;
    }

    /**
     * 增加、删除、改
     * @param conn,sql
     * @param params
     * @return flag
     * @throws SQLException
     */
    public boolean updateByPreparedStatement(Connection conn,String sql, List<Object> params) throws SQLException {
        boolean flag = false;
        int result = -1;
        pstmt = conn.prepareStatement(sql);
        int index = 1;
        if (params != null && !params.isEmpty()) {
            for (int i = 0; i < params.size(); i++) {
                pstmt.setObject(index++, params.get(i));
            }
        }
        result = pstmt.executeUpdate();
        flag = result > 0 ? true : false;
        //closeAll();
        return flag;
    }
    /**
     * 查询多条记录
     * @param conn,sql
     * @throws SQLException
     */

    public List<AoeData> executeQuery(Connection conn, String sql) throws SQLException {
        return executeQuery(conn,sql,null);
    }

    /**
     * 查询多条记录
     * @param conn,sql
     * @param params
     * @throws SQLException
     */
    public List<AoeData> executeQuery(Connection conn,String sql, List<Object> params) throws SQLException {
        List<AoeData> datalist = new ArrayList<AoeData>();
        AoeData data=new AoeData();
        int index = 1;
        pstmt = conn.prepareStatement(sql);
        if (params != null && !params.isEmpty()) {
            for (int i = 0; i < params.size(); i++) {
                pstmt.setObject(index++, params.get(i));
            }
        }
        rs = pstmt.executeQuery();
        ResultSetMetaData metaData = rs.getMetaData();
        int cols_len = metaData.getColumnCount();
        while (rs.next()) {
            //Map<String, Object> map = new LinkedHashMap<String, Object>();
            for (int i = 0; i < cols_len; i++) {
                data.setAoeId(rs.getInt("aoeId"));
                data.setAoeAes(rs.getString("aoeAes"));
                data.setAoeSm4(rs.getString("aoeSm4"));
                data.setAoeSm4_a(rs.getString("aoeSm4_a"));
                data.setAoeEmail(rs.getString("aoeEmail"));
                data.setAoePhone(rs.getString("aoePhone"));
                data.setAoeIdCard(rs.getString("aoeIdCard"));
                data.setAoeOfficerCard(rs.getString("aoeOfficerCard"));
                data.setAoePassport(rs.getString("aoePassport"));
                data.setAoeGeneralIdCard(rs.getString("aoeGeneralIdCard"));
                data.setAoeCreditCard(rs.getString("aoeCreditCard"));
            }
            datalist.add(data);
        }
        //关闭连接
        closeAll();

        return datalist;
    }

    /*
     * 获得表中最大ID
     * @param tableName
     * @return
     * @throws SQLException
     */
    public int getMaxId(Connection conn,String sql) {
        int maxId = 0;
        try {
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            // 从resultset对象中将数据取出
            if (rs.next()) {
                maxId = rs.getInt("maxId");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return maxId;
    }

    /**
     * 释放数据库连接
     * 不关闭的话会影响性能、并且占用资源。注意关闭的顺序,最后使用的最先关闭 !
     */
    public static void closeAll() throws SQLException {
        if(rs!=null)rs.close();
        if(pstmt!=null)pstmt.close();
        if(conn!=null)conn.close();
    }

}

2.5数据检查(断言)

package com.ciphergateway.asserts;

import com.ciphergateway.bean.AoeData;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 *Author:HMF
 *@create 2021-09-25
 **/
public class DatabaseAsserts {

    /**
     * 断言(入参Map_input)
     * @param datalist
     * @param Map_input
     */
    public static int assertData(List<AoeData> datalist,Map<String, Object> Map_input) throws IllegalAccessException{
        //List<AoeData> datalist=new ArrayList<>();
        int num=0;
        for (AoeData data : datalist) {
            boolean flag=false;
            for (String key_input : Map_input.keySet()) {
                //key值相同再对比value值
                for (Field field:data.getClass().getDeclaredFields()) {
                    // 一定要设置setAccessible为ture
                    field.setAccessible(true);
                    String filedName=field.getName();
                    if (filedName.equals("aoeId") == false) {
                        if(filedName.equals(key_input)) {
                            try {
                                flag = StringUtils.endsWith(field.get(data).toString(), String.valueOf(Map_input.get(key_input)));
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            }
                            if (flag) {
                                num += 1;
                            } else {
                                System.out.println("未找到匹配" + key_input);
                            }
                        }
                    }
                }
            }
        }
        return num;
    }

    /**
     * 断言(入参,标识符)
     * @param datalist
     * @param cipher
     */
    public static int assertData(List<AoeData> datalist,String cipher){
        int num=0;
        for (AoeData data : datalist) {
            for (Field field:data.getClass().getDeclaredFields()) {
                // 一定要设置setAccessible为ture
                field.setAccessible(true);
                String filedName=field.getName();
                boolean flag = false;
                if (filedName.equals("aoeId") == false) {
                    //System.out.println(String.valueOf(map.get(key)));
                    //System.out.println(cipher);
                    try {
                        flag = StringUtils.endsWith(field.get(data).toString(), cipher);
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                    if (flag) {
                        num += 1;
                    } else {
                        System.out.println("未找到匹配" + filedName);
                    }
                }
            }
        }
        return num;
    }
}

2.6.主方法调用

import com.ciphergateway.asserts.DatabaseAssert;
import com.ciphergateway.asserts.DatabaseAsserts;
import com.ciphergateway.bean.AoeData;
import com.ciphergateway.utils.Common;
import com.ciphergateway.utils.DataBaseUtil;

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

public class DabaBaseTest {
    private static Map<String, Object> Map_input = new LinkedHashMap<String,Object>();

    public static void main(String[] args) throws Exception {
        //获取配置文件数据
        String filename="db.properties";
        Properties pro= Common.getProperty(filename);
        String tableName=pro.getProperty("tableName");

        //定义插入数据
        Map_input.put("aoeId", 1);
        Map_input.put("aoeAes", "吴秀梅");
        Map_input.put("aoeSm4", "Beijing Refining Network Technology Co.Ltd.");
        Map_input.put("aoeSm4_a", "北京市海淀区北三环西路32号楼7层0710-1");
        Map_input.put("aoeEmail", "qianxiulan@yahoo.com");
        Map_input.put("aoePhone", "15652996964");
        Map_input.put("aoeIdCard", "210302199608124861");
        Map_input.put("aoeOfficerCard", "武水电字第3632734号");
        Map_input.put("aoePassport", "BWP018930705");
        Map_input.put("aoeGeneralIdCard", "0299233902");//智能识别证件号
        Map_input.put("aoeCreditCard", "6212262502009182455");//银行卡号

        DataBaseUtil database=new DataBaseUtil();
        //操作数据库
        Connection conn=database.getConnection();
        //删除已有数据
        String sql_delete="delete from "+tableName;
        database.updateByPreparedStatement(conn,sql_delete,null);

        //插入数据
        insertTest(conn,database,tableName);


        //直连数据库查询()
        Connection conn=database.getConnection();
        List<AoeData> dataList1=selectTest(conn,database,tableName);
        int num= DatabaseAsserts.assertData(dataList1,Map_input);
        if (num==10){
            System.out.println("插入数据后,直连数据库查询,10个字段对比正确");
            System.out.println("=====================================");
        }
        else {
            System.out.println("插入数据后,直连数据库查询,10个字段部分正确 "+num);
            System.out.println("=====================================");
        }
    }
    /**
     * 插入数据
     * @param database
     */
    public static void insertTest(Connection conn,DataBaseUtil database,String tableName){
        List<Object> params = new ArrayList<Object>();
        //params.add("1");
        params.add(Map_input.get("aoeId"));   //aoeId
        params.add(Map_input.get("aoeAes"));   //aoeAes
        params.add(Map_input.get("aoeSm4")); //aoeSm4
        params.add(Map_input.get("aoeSm4_a"));//aoeSm4_a
        params.add(Map_input.get("aoeEmail"));//aoeEmail
        params.add(Map_input.get("aoePhone"));//aoePhone
        params.add(Map_input.get("aoeIdCard"));//aoeIdCard
        params.add(Map_input.get("aoeOfficerCard"));//aoeOfficerCard
        params.add(Map_input.get("aoePassport"));//aoePassport
        params.add(Map_input.get("aoeGeneralIdCard"));//aoeGeneralIdCard,智能识别证件号
        params.add(Map_input.get("aoeCreditCard"));//aoeCreditCard
        System.out.println(params);
        //String sql ="insert into aoe_auto (aoe_aes, aoe_sm4) values (?,?)";   //'"+ tableName +"'
        String sql="INSERT INTO "+ tableName +" (aoeId,aoeAes, aoeSm4, aoeSm4_a, aoeEmail, aoePhone, aoeIdCard, aoeOfficerCard, aoePassport, aoeGeneralIdCard, aoeCreditCard) VALUES(?,?,?,?,?,?,?,?,?,?,?)";
        try {
            boolean flag = database.updateByPreparedStatement(conn,sql, params);
            System.out.println(flag);
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
    }

    /**
     * 通过主键查询
     * @param database
     * @param tableName
     * @throws SQLException
     */
    public static List<AoeData> selectTest(Connection conn, DataBaseUtil database, String tableName) throws SQLException {
        String sql="select * from "+ tableName;
        List<AoeData> datalist = new ArrayList<>();
        datalist=database.executeQuery(conn,sql);
        //for(AoeData data:datalist){
            //System.out.println(data.getAoeAes());
        //}
        return datalist;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring JDBC是Spring框架提供的一种数据库操作方式,它通过封装JDBC来简化数据库操作,提高应用程序的灵活性和可维护性。下面是使用Spring JDBC连接数据库的步骤: 1. 导入相关依赖 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> ``` 其中,`${spring.version}`和`${mysql.version}`需要根据自己的实际情况进行修改。 2. 配置数据源 在Spring配置文件中配置数据源,例如使用MySQL数据库: ``` <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="123456"/> </bean> ``` 其中,`driverClassName`为驱动类名,`url`为数据库连接地址,`username`和`password`为数据库用户名和密码。 3. 配置JdbcTemplate 在Spring配置文件中配置JdbcTemplate,它是Spring JDBC的核心类,用于执行SQL语句和处理结果集: ``` <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> ``` 4. 执行SQL语句 使用JdbcTemplate执行SQL语句,例如查询用户表中所有记录: ``` List<User> userList = jdbcTemplate.query("SELECT * FROM user", new BeanPropertyRowMapper<>(User.class)); ``` 其中,`query`方法执行SQL语句并返回结果集,`BeanPropertyRowMapper`用于将结果集映射为Java对象,`User.class`表示映射到的Java类。 以上就是使用Spring JDBC连接数据库的步骤,通过使用Spring JDBC,我们可以更方便地进行数据库操作,提高应用程序的效率和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宁宁可可

您的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值