DBUtils实现CURD操作

1.Apache-DBUtils简介

commons-dbutils是Apache组织提供的一个开源JDBC工具类库,它是对JDBC的简单封装,学习成本低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

API介绍:

  • org.apache.commons.dbutils.QueryRunner
  • org.apache.commons.dbutils.ResultSetHandler
  • 工具类:org.apache.commons.dbutils.DbUtils

2.主要API的使用
DbUtils:提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:

  • public static void close(…) throws java.sql.SQLException : DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet
  • public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序中抛出的SQLEeception。
  • public static void commitAndClose(Connection conn)throws SQLException: 用来提交连接的事务,然后关闭连接
  • public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
  • public static void rollback(Connection conn)throws SQLException:允许conn为null,因为方法内部做了判断
  • public static void rollbackAndClose(Connection conn)throws SQLException
  • rollbackAndCloseQuietly(Connection)
  • public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。使用该方法,你不需要捕捉这个异常ClassNotFoundException。

3.QueryRunner类
该类简化了SQL查询,它与ResultSetHandler组合在一起使用可以完成大部分的数据库操作,能够大大减少编码量。

QueryRunner类提供了两个构造器:
默认的构造方法。
需要一个javax.sql.DataSource来作参数的构造器。

QueryRunner类的主要方法:

  • public int update(Connection connection,String sql, Object …args) throws SQLException:用来执行一个更新(插入、更新、删除)操作。
  • public Object query(Connection connection ,String sql ,ResultSetHandler resultSetHandler,Object…args)thorws SQLException

4.ResultSetHandler接口及实现类
该接口用于处理 java.sql.ResultSet,将数据按要求转换成另一种形式。

  • ResultSetHandler接口提供了一个单独的方法:Object handle (java.sql.Result.rs)。
    接口的主要实现类:
  • BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中
  • BeanListHandler:将结果集中的每一行数据都封装到一个对应的javaBean实例中,然后存放到List里。
  • MapHandler:将结果集中的第一行数据封装到一个Map里,key为列名,value就是对应的值
  • MapListHandler:将结果集中的每一行数据都封装到一个Map中,然后存放到List中
  • ScalarHandler:查询单个值对象。

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.sql.SQLException;
import java.util.List;

/**
 * @ClassName : BaseDao  //类名
 * @Description : 对数据的基本操作  //描述
 * @Author : Gao //作者
 * @Date: 2021/11/3  22:03
 */

public abstract class BaseDao {
    //使用DbUtils操作数据库
    private QueryRunner queryRunner = new QueryRunner();

    /**
     * update() 方法用来执行 update delete insert语句
     *
     * @return 如果返回-1表示执行失败,返回其他表示影响的行数
     */
    public int update(String sql, Object... args) {
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.update(connection, sql, args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
    /**
     * 查询返回一个javaBean的sql语句
     *
     * @return
     * @paramt type 返回的对象类型
     * @paramt SQL 执行的sql语句
     * @paramt args SQL对应的参数值
     * @paramt <T>返回的类型的泛型
     */
    public <T> T queryForOne(Class<T> type, String sql, Object... args) {
        Connection connection = JdbcUtils.getConnection();
        try {
            return queryRunner.query(connection, sql, new BeanHandler<>(type), args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }

    /**
     * 查询返回多个javaBean的SQL语句
     * @param  type 返回的对象类型
     * @param  sql 执行的SQL语句
     * @param args sql对应的参数值
     * @param <T> 返回的类型泛型
     * @return
     */
    public <T> List<T> queryForList(Class<T> type,String sql,Object ...args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new BeanListHandler<T>(type),args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
    /**
     * 执行返回一行一列的sql语句
     * @param sql 执行的SQL语句
     * @param args sql对应的数值
     * @return
     */
    public Object queryForSingleValue(String sql,Object ...args){
        Connection connection = JdbcUtils.getConnection();

        try {
            return queryRunner.query(connection,sql,new ScalarHandler(),args);
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要创建一个User类来封装用户信息,包括用户名、密码、邮箱等等。示例代码如下: ```java public class User { private String username; private String password; private String email; // 省略getter和setter方法 } ``` 然后,需要在数据库中创建一个表来保存用户信息,示例代码如下: ```sql CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `email` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` 接下来,使用DButils实现注册功能。示例代码如下: ```java public class UserDao { private QueryRunner runner = new QueryRunner(DBUtils.getDataSource()); /** * 添加用户 * @param user 用户信息 * @throws SQLException */ public void addUser(User user) throws SQLException { String sql = "INSERT INTO user(username, password, email) VALUES(?, ?, ?)"; runner.update(sql, user.getUsername(), user.getPassword(), user.getEmail()); } /** * 根据用户名查找用户 * @param username 用户名 * @return 用户信息 * @throws SQLException */ public User findUserByUsername(String username) throws SQLException { String sql = "SELECT * FROM user WHERE username = ?"; return runner.query(sql, new BeanHandler<>(User.class), username); } } ``` 在Servlet中调用上述代码来实现注册功能。示例代码如下: ```java public class RegisterServlet extends HttpServlet { private UserDao userDao = new UserDao(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); resp.setContentType("text/html;charset=UTF-8"); String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); // 校验用户名是否已存在 try { User user = userDao.findUserByUsername(username); if (user != null) { resp.getWriter().write("用户名已存在"); return; } } catch (SQLException e) { e.printStackTrace(); resp.getWriter().write("注册失败"); return; } // 添加用户 User user = new User(); user.setUsername(username); user.setPassword(password); user.setEmail(email); try { userDao.addUser(user); resp.getWriter().write("注册成功"); } catch (SQLException e) { e.printStackTrace(); resp.getWriter().write("注册失败"); } } } ``` 以上就是使用DButils实现注册功能的示例代码,希望能对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值