精华内容
下载资源
问答
  • mysql-connector-java-5.1.47.jar junit-4.13.jar Maven: <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <...

    用到的 jar 包

    jar包地址:

    mysql-connector-java-5.1.47.jar

    junit-4.13.jar

    Maven:

    <!--  mysql驱动  -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>
    <!--  单元测试  -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13</version>
    </dependency>
    

    MySQL 配置文件

    db.properties,这个配置文件在 BaseDao.java 会去读取

    driver=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=UTF-8
    username=root
    password=123456
    

    BaseDao.java 公共类

    通过读取 db.properties 的配置信息连接 MySQL,也可以直接在 static 静态代码块里面写死你的 mysql 配置信息

    package com.pro.dao;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.sql.*;
    import java.util.Properties;
    
    // 操作数据库公共类
    public class BaseDao {
        private static String driver;
        private static String url;
        private static String username;
        private static String password;
    
        // 静态代码块类一加载就已经初始化了
        static {
            Properties properties = new Properties();
    
            // 通过类加载器加载对应的资源
            InputStream is = BaseDao.class.getResourceAsStream("/db.properties");
            System.out.println("资源路径 --> " + is);
    
            try {
                properties.load(is);
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            // 读取数据, 初始化 mysql 配置信息
            driver = properties.getProperty("driver");
            url = properties.getProperty("url");
            username = properties.getProperty("username");
            password = properties.getProperty("password");
        }
    
        // 获取连接数据库对象
        public static Connection getConnection() {
            Connection connection = null;
    
            try {
                // 加载驱动
                Class.forName(driver);
                // 获取数据库对象
                connection = DriverManager.getConnection(url, username, password);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return connection;
        }
    
        // 查询公共方法
        public static ResultSet execute(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet, String sql, Object[] params) throws SQLException {
            // 预编译SQL
            preparedStatement = connection.prepareStatement(sql);
    
            // 添加参数
            for (int i = 0; i < params.length; i++) {
                preparedStatement.setObject(i + 1, params[i]);
            }
    
            // 执行sql
            resultSet = preparedStatement.executeQuery();
    
            return resultSet;
        }
    
        // 增删改公共方法
        public static int execute(Connection connection, PreparedStatement preparedStatement, String sql, Object[] params) throws SQLException {
            int updateRows = 0;
            // 预编译SQL
            preparedStatement = connection.prepareStatement(sql);
    
            // 添加参数
            for (int i = 0; i < params.length; i++) {
                preparedStatement.setObject(i + 1, params[i]);
            }
    
            // 执行sql
            updateRows = preparedStatement.executeUpdate();
    
            return updateRows;
        }
    
        // 关闭资源公共方法
        public static boolean closeResource(ResultSet resultSet, PreparedStatement preparedStatement, Connection connection) {
            boolean flag = true;
    
            if (resultSet != null) {
                try {
                    // 关闭资源
                    resultSet.close();
                    // GC 回收
                    resultSet = null;
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;
                }
            }
    
    
            if (preparedStatement != null) {
                try {
                    // 关闭资源
                    preparedStatement.close();
                    // GC 回收
                    preparedStatement = null;
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;
                }
            }
    
            if (connection != null) {
                try {
                    // 关闭资源
                    connection.close();
                    // GC 回收
                    connection = null;
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                    flag = false;
                }
            }
    
            return flag;
        }
    }
    

    测试使用

    使用 junit 进行单元测试,也可以直接放到 main 方法中去执行测试

    import org.junit.Test;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    public class Test {
    	@Test
        public void test() {
            Connection connection = BaseDao.getConnection();
            PreparedStatement pstm = null;
            ResultSet res = null;
    
            // SQL
            String sql = "select * from smbms_user";
            // 参数
            Object[] params = {};
    
            try {
                // 执行SQL
                res = BaseDao.execute(connection, pstm, res, sql, params);
    
                // 打印参数
                while (res.next()) {
                    System.out.println(res.getString("userName"));
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
    
    展开全文
  • 30个java工具类

    热门讨论 2010-09-14 08:45:37
    [工具类] 获得汉字拼音首字母的java工具类.java.txt [工具类] 获取绝对路径 .java.txt [工具类] 记录log日志文件的工具类 .java.txt [工具类] 连接数据库的工具类 .java.txt [工具类] 使用Java程序来实现HTTP文件的...
  • 解决:把工具类中的业务代码抽成一个方法,这个方法设置为抽象方法a(abstract修饰该方法),使工具类A为抽象类(abstract修饰该类),新建一个中间类B,继承工具类A,重写抽象方法a(这里放工具类中的原本的业务...

    场景:有些工具类里面出现业务代码,导致工具类不好复用。只能在工具类新建一个类似方法勉强满足业务,但是这个工具类看起来就很low了。

    解决:把工具类中的业务代码抽成一个方法,这个方法设置为抽象方法a(abstract修饰该方法),使工具类A为抽象类(abstract修饰该类),新建一个中间类B,继承工具类A,重写抽象方法a(这里放工具类中的原本的业务代码),使用时只需使用中间类B就好了。这样就完全把业务代码从工具类中抽离开来。这样工具类看起来就正常了,而且也十分好扩展,只需新建其他中间类C,继承工具类A,重写抽象方法a,以完成不同需求。

    感言:好激动,终于知道怎么搞这种问题了,这个还要十分感谢我们组的高开成哥,是他的工具类让涨姿势啦啦啦。٩(๑>◡<๑)۶

    后续:然后查了同类的文章,比如如何编写工具类,方法二中的步骤三似乎也有提到,可能讲的是差不多的事,也许是太简单了,直到今天我才明白抽象在工具类中的用处之大,让人咋舌。

    展开全文
  • java工具类编写思考

    千次阅读 多人点赞 2018-09-06 08:55:11
    这篇博客的初衷是因为我想写一个工具类,同时对工具类做出一些规范以及优化。 规范 工具类定义为final class,考虑到工具类应该不能被继承 工具类的命名应该用Util结尾,例如LogUtil 工具类的构造方法应该首选...

    初衷

    这篇博客的初衷是因为我想写一个工具类,同时对工具类做出一些规范以及优化。

    规范

    1. 工具类定义为final class,考虑到工具类应该不能被继承
    2. 工具类的命名应该用Util结尾,例如LogUtil
    3. 工具类的构造方法应该首选是private的,同时工具类的工具方法为static
    4. 工具类使用单例模式,或者static初始化某个单例。这个规范是因工具的不同而不同的,例如我要写一个gson的工具类,不应该在每个方法里都new Gson()再进行操作,如果一个类大量调用GsonUtil,那就会大量创建gson对象。

    针对第四种,给点示例代码,首先是静态块初始化方式:

    public final class GsonUtil {
    
    
    private static Gson gson = null;
        static {
            if (gson == null) {
                gson = new Gson();
            }
        }
    
    
        private GsonUtil() {
        }
     }

    然后是单例模式初始化方式:

    public final class GsonUtil{
        private static volatile Gson gson;
        private static Gson initInstance(){
            if(gson == null){
                synchronized(GsonUtil){
                    if(gson == null){
                        gson = new Gson();     
                    }
                }
            }
        }
        private GsonUtil() {
            initInstance();
        }
    }
    

    拓展

    上面是我自己思考的,然后我又看了一些其他资料,主要是说:

    编写工具类俩种方式:

    一:

    1.工具方法都设为非static方法

    2.将工具类设计为单列模式

    3.注意这种方式需要获取工具类对象(实例化)才能调用方法

    二:

    1.工具方法设计为static方法

    2.工具 类所有构造方法都设计为private修饰

    3.工具类本身以abstract修饰(目的就是只能用类调用方法,不能实例化)

    说静态类好的:

    静态类不用引用就能调用,而单例需要有对象的引用,因此节约资源(我觉得这个影响微乎其微,可以忽略)
    静态类方便,随处可用;而单例必须有引用,需要注入或者new(是有点麻烦,我上次写静态类也是因为这个原因)
    

    说单例好的:

    单例模式的类是普通的类,它具有面向对象的特性,方便扩展
    对于有配置的工具类,可以轻松的创建多个不同配置的单例对象(想起我主导的另一个项目就存在5-6个redis数据源,如果使用静态类就是灾难)
    

    因此,得出以下结论:

    如果没有配置信息的工具类,当然是静态类好,随处调用,不需引用爽得不要不要的。比如Math.abs(),如果写个单例,可能全世界都要笑话你了。
    如果有配置信息的工具类,最好还是使用单例模式吧,这样以后如果有多个数据源,你会感谢你自己。
    

    区别

    我在静态方法里使用的单例模式,不是指的是我的工具类作为单例,而是第三方的类。

    如有错误请指正。

    展开全文
  • 【强2】30个java工具类

    热门讨论 2010-09-14 11:57:03
    使用java工具类可有效的提高开发效率! 没有CSDN积分的朋友到这里源头下载:http://www.javacs.cn/bbs/thread-382-1-1.html 感谢支持 [工具类] CookieCounter .java.txt [工具类] 验证码img .jsp.txt [工具类] Java中...
  • 每次写了存储过程后都要写一堆类似的调用存储过程的...这一篇文章将现学现用,探讨如何导入freemaker,如何解析一个模板,如何编写模板(模板语法),如何通过ide获得智能提示(没错,这一点是码农都希望有的),并且

    每次写了存储过程后都要写一堆类似的调用存储过程的java方法,各位有没有这样的感想?

    代码生成器最基本要解决两个问题,第一,如何获取数据(数据表,存储过程的参数或者自定义模型);第二,获取了数据以后如何生成字符串(通常用模板引擎)。

    这一篇文章将现学现用,探讨如何导入freemaker,如何解析一个模板,如何编写模板(模板语法),如何通过ide获得智能提示(没错,这一点是码农都希望有的),并且编写一个符合自己心意的封装了(封装freemaker的常用操作)。


    这一篇文章有讲到:

    http://sishuok.com/forum/posts/list/5154.html


    下面我将已经编写的辅助类及结果贴上来。

    【模板引擎辅助类】

    package Easis.ViewEngine;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    
    import java.io.StringWriter;
    import java.util.Map;
    
    public class FreemarkerHelper {
        private Configuration _tplConfig=new Configuration();
    
        /**
         * @param tplRoot 当前的模板存放目录,譬如:/tpl,请注意,设置模版的文件夹路径,本人在src下新建了一个ftl文件夹
                             configuration.setClassForTemplateLoading(this.getClass(),"/ftl");
         * */
        public FreemarkerHelper(String tplRoot){
    
            _tplConfig.setClassForTemplateLoading(this.getClass(),tplRoot);
    
        }
    
        public String parseTemplate(String tplName,String encoding,Map<String,Object> paras){
            try{
                StringWriter swriter=new StringWriter();
            Template   mytpl=_tplConfig.getTemplate(tplName,encoding);
                mytpl.process(paras,swriter);
                return swriter.toString();
    
            }
            catch (Exception e){
                e.printStackTrace();
                return  e.toString();
            }
    
        }
    
        public String parseTemplate(String tplName,Map<String,Object> paras){
            return this.parseTemplate(tplName,"utf-8",paras);
        }
    
    
    }
    

    【测试用模板---放在src下面的/tpl/test.ftl】

    你好:${username}

    【使用方式】

    package TestCase;
    
    import Easis.ViewEngine.FreemarkerHelper;
    import freemarker.template.Configuration;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    public class testFreemarker {
    
        public static void main(String[] args){
            FreemarkerHelper viewEngine=new FreemarkerHelper("/tpl");
            Map<String,Object> paras=new HashMap<String, Object>();
            paras.put("username","欸你好吗?");
            String theres=viewEngine.parseTemplate("test.ftl",paras);
            System.out.println(theres);
    
    
        }
    }
    

    【结果】




    ok,那么下一步就是编写一个自动生成访问存储过程代码的程序了。


    展开全文
  • Java的数据库连接工具类编写

    千次阅读 2018-08-02 15:45:18
    Java的数据库连接工具类编写 步骤: 1. 定义变量 2. 通过反射进行读取配置文件 3. 实例化Properties读取配置文件中的各个属性 4. 关闭字节输入流 5. 类加载 6. 通过驱动管理的获取连接方法获取到连接...
  • 如何正确编写一个工具类

    千次阅读 2020-03-30 23:11:33
    } } 工具类如何设计: 工具在开发中其实只需要存在份即可. 1):如果工具方法没有使用static修饰,说明工具方法得使用工具类的对象来调用. 此时把工具类设计为单例的. 2):如果工具方法全部使用static修饰,说明工具...
  • JAVA MD5加密 Java
  • java相对时间的工具类,此类中有两暴露的方法,相对于当前时间的方法和相对于某时间的方法。 返回String,如:2小时前/3天2时13秒/昨天
  • java雪花算法工具类

    万次阅读 2021-06-04 09:58:13
    创建一个SnowFlake的工具类,然后把下面的代码粘过去就可以了 /** * Twitter_Snowflake<br> * SnowFlake的结构如下(每部分用-分开):<br> * 0 - 0000000000 0000000000 0000000000 0000000000 0 - ...
  • 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。 父类有属性品牌(brand)和颜色(color)。 在父类构造方法中对属性品牌和颜色赋值。 在父类中定义showInfo()用于...
  • Java 工具类(泛型:仅次调用返回多对象)
  • 小编最近忙着学习项目构架上的一些技术,把实用的工具类整理下,单独放在一个项目。其他项目需要用直接使用maven依赖一下就可以使用了。项目中需要实现上传多张图片,由于多张图片,又担心并发量大。所以小编做了...
  • Java Utils工具类大全

    万次阅读 2019-01-21 23:06:10
    另外希望身为Java牛牛的你们一起测试和完善,欢迎入群263641914 一起封装和完成常用的Java代码。 节约撸码时间以方便有更多的时间去把妹子~ #开发环境 Win7x64 JDK1.7 IDEA14 #项目结构 │ README.m...
  • 由于 Web 应用程序需要联合使用到多种语言,每种语言都包含一些特殊的字符,对于动态语言或标签式的语言而言,如果需要动态构造语言的内容时,一个我们经常会碰到的问题就是特殊字符转义的问题。下面是 Web 开发者最...
  • 使用java实现一个缓存工具类 既然缓存的特点就是高速存取,按键值存取,那么在java编程中实现缓存机制首选的数据结构就是map,不得不说map数据结构真的很神奇,有关于map的性能效率问题参见我的另外一篇博客 ...
  • 操作 Cookie 的Java工具类

    千次阅读 2014-05-26 16:01:37
    /** * ... * 2014-5-26 * Cookie操作工具类 * gyy */ package cn.itcast.bbs.util; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.se
  • Java数学工具类MathUtil

    万次阅读 2018-05-22 18:37:42
    ... * @title 数学计算工具类 * @description 提供常用的数值+-*/计算 , 及多数值的求和 , 平均值 , 最大最小值计算 */ public class XMathUtil { /** 默认的除法精确度 */ private sta...
  • java自定义工具类

    千次阅读 2017-11-03 21:04:25
    import java.io.File; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.ArrayList; import ...
  • 项目经验分享——Java常用工具类集合

    万次阅读 多人点赞 2013-03-09 10:41:04
    本文涉及的工具类部分是自己编写,另部分是在项目里收集的。工具类涉及数据库连接、格式转换、文件操作、发送邮件等等。提高开发效率,欢迎收藏与转载。   数据库连接工具类   数据库连接工具类——仅仅获得...
  • Java之——导出Excel通用工具类

    万次阅读 多人点赞 2018-03-22 21:11:15
    转载请注明出处:... ... 一、概述 相信大家在工作过程中,都会遇到这样一个需求,就是将相关的数据列表导出成excel,那么,有没有通用的导出方式呢,这里,...
  • 工具类Java编写下载即可使用,该工具类中有生成各种长度的订单号,有英文数字混合的,有数字的
  • Java enum枚举类型工具类的用法详解

    千次阅读 2016-10-10 16:21:39
    Java enum工具类的用法详解
  • Java模拟Http请求封装工具类

    万次阅读 2020-06-29 16:54:27
    封装一个简单的Http请求工具类,主要方便设置代理请求,无需额外框架 1、需要引入的jar包 <!-- 简化代码getter setter --> <dependency> <groupId>org.projectlombok</groupId> <...
  • 实用的java注解工具类

    千次阅读 2016-06-26 20:35:22
    下面就和大家一起来分享一下我编写的注解工具类。 首 Java 注解 定义:注解(Annotation),也叫元数据。一种代码级别的说明。 它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在
  • java工具类调用Service层类的方法。

    千次阅读 2019-02-28 15:23:41
    比如在工具类或者配置类中如果需要调用Service层的代码,则需要在该类上添加@Component注解。然后使用以下写法: @Autowired private XXService xxService; private staticxxService serv...
  • java基于HuTool工具类ExcelWriter合并单元格 ** 1.基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1.8 lambda表达式 效果如下: 用姓名和编码相同的数据进行合并单元格 1.创建实体类 代码如下 import lombok....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 382,229
精华内容 152,891
关键字:

如何编写一个java工具类

java 订阅