Java泛型与数据库应用实例详解

 更新时间:2019年08月06日 11:00:09   作者:cakincqm  
这篇文章主要介绍了Java泛型与数据库应用,结合实例形式详细分析了java继承泛型类实现增删改查操作相关实现技巧,需要的朋友可以参考下

本文实例讲述了Java泛型与数据库应用。分享给大家供大家参考,具体如下:

一 点睛

BaseDao定义了基本的数据库增删查改, 之后可以继承该泛型类,实现各自的增删查改,或者使用超类的增删查改,同时每个继承类还能增加自己的操作。

二 实战

1 BaseDao.java

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BaseDao<T> {
  Connection connection;
  PreparedStatement pStatement;
  String urlString = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF8";
  String drivString = "com.mysql.jdbc.Driver";
  void OpenDB() {
    try {
      if (connection == null) {
        Class.forName(drivString);
        this.connection = DriverManager.getConnection(urlString, "root", "123456");
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  void CloseDB() {
    try {
      if (pStatement != null) pStatement.close();
      if (connection != null) connection.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void Save( T t ) {
    OpenDB();
    String table = "";
    String sqlString = "insert into ";
    try {
      table = t.getClass().getSimpleName();
      Field[] fields = t.getClass().getDeclaredFields();
      sqlString += table;
      String sqlNameString = "";
      String sqlValString = "";
      for (Field field : fields) {
        sqlNameString += field.getName() + ",";
        sqlValString += "?,";
      }
      sqlNameString = sqlNameString.substring(0, sqlNameString.length() - 1);
      sqlValString = sqlValString.substring(0, sqlValString.length() - 1);
      pStatement = connection.prepareStatement(sqlString + " (" + sqlNameString + ") values (" + sqlValString + ")");
      int n = 1;
      for (Field field : fields) {
        field.setAccessible(true);
        System.out.println(field.get(t).toString());
        pStatement.setString(n, field.get(t).toString());
        n++;
      }
      pStatement.executeUpdate();
      CloseDB();
    } catch (Exception e) {
      e.printStackTrace();
      CloseDB();
    }
  }
  public void Del( T t ) {
  }
  public void Update( T t ) {
  }
  public void Search( T t ) {
  }
}

2 StudentDao.java

public class StudentDao extends BaseDao<Student> {
}

3 TeacherDao.java

public class TeacherDao extends BaseDao<Teacher> {
}

4 Student.java

public class Student {
  public String name;
  public int age;
  public String dept;
  /**
  * @return the name
  */
  public String getName() {
   return name;
  }
  /**
  * @param name the name to set
  */
  public void setName(String name) {
   this.name = name;
  }
  /**
  * @return the age
  */
  public int getAge() {
   return age;
  }
  /**
  * @param age the age to set
  */
  public void setAge(int age) {
   this.age = age;
  }
  /**
  * @return the dept
  */
  public String getDept() {
   return dept;
  }
  /**
  * @param dept the dept to set
  */
  public void setDept(String dept) {
   this.dept = dept;
  }
}

5 Teacher.java

public class Teacher {
}

6 TestDao.java

public class TestDao {
  public static void main(String[] args) {
   System.out.println("ok");
   Student stud=new Student();
   stud.age=20;
   stud.name="zhangsan";
   stud.dept="computer";
   StudentDao sd=new StudentDao();
   sd.Save(stud);
   System.out.println(stud.dept);
  }
}

三 运行

ok
zhangsan
20
computer
computer

四 怎样在IDEA中导入jar包

可参考附录:IDEA连接数据库(导入jar包)

五 另外一种写法

StudentDao.java

public class StudentDao<M> extends BaseDao<M> {    // 这里的M可以是任意合法标识符
}

TestDao.java

public class TestDao {
 public static void main(String[] args) {
 System.out.println("ok");
 Student stud=new Student();
 stud.age=20;
 stud.name="zhangsan2";
 stud.dept="computer";
 StudentDao<Student> sd=new StudentDao<>();  // 这里要说明是Student
 sd.Save(stud);
 System.out.println(stud.dept);
 TeacherDao<Teacher> te= new TeacherDao<>();
 }
}

附:IDEA连接数据库(导入jar包)

Java连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件。

IDEA导入jar过程:新建文件夹(名称任意,这里使用Lib),导入mysql-connector-java-*.*.**-bin.jar如下图

右键点击jar文件,然后点击Add as Library,jar导入成功。后面百度java使用mysql即有详细的访问mysql的代码。

ecplice导入jar过程:新建文件夹(名称任意,这里使用Lib),导入mysql-connector-java-*.*.**-bin.jar如下图

右键-》buildpath-》add to build path

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • 如何扩展Spring Cache实现支持多级缓存

    如何扩展Spring Cache实现支持多级缓存

    这篇文章主要介绍了如何扩展Spring Cache实现支持多级缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java中实现多线程关键词整理(总结)

    Java中实现多线程关键词整理(总结)

    这篇文章主要介绍了Java中实现多线程关键词整理,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-05-05
  • Spring MVC实现mysql数据库增删改查完整实例

    Spring MVC实现mysql数据库增删改查完整实例

    这篇文章主要介绍了Spring MVC实现mysql数据库增删改查完整实例,从创建一个web项目开始,分享了项目结构以及具体Java代码和前端页面等相关内容,具有一定借鉴价值,需要的朋友可以了解下。
    2017-12-12
  • 详解Idea中HTTP Client请求测试工具的使用

    详解Idea中HTTP Client请求测试工具的使用

    今天抽空给大家分享Idea中HTTP Client请求测试工具的使用,小编在这建议使用HTTP Client的Idea版本最好在2018以上,不然的话体验不是多好,今天就给大家介绍Idea中HTTP Client怎么使用的,感兴趣的朋友跟随小编一起看看吧
    2021-05-05
  • Java8使用stream查找重复元素的方法示例

    Java8使用stream查找重复元素的方法示例

    Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的Lambda ,给我们操作集合(Collection)提供了极大的便利,Stream流是JDK8新增的成员,本文给大家介绍了Java8使用stream查找重复元素的方法示例,需要的朋友可以参考下
    2024-04-04
  • 设计模式之构建(Builder)模式 建造房子实例分析

    设计模式之构建(Builder)模式 建造房子实例分析

    构建模式主要用来针对复杂产品生产,分离部件构建细节,以达到良好的伸缩性,考虑到设计模式来源于建筑学,因此举一个建造房子的例子,需要的朋友可以参考下
    2012-12-12
  • 关于SSM框架下各层的解释说明(Controller等)

    关于SSM框架下各层的解释说明(Controller等)

    这篇文章主要介绍了关于SSM框架下各层的解释说明(Controller等),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • resubmit渐进式防重复提交框架示例

    resubmit渐进式防重复提交框架示例

    这篇文章主要为大家介绍了resubmit渐进式防重复提交框架示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • SpringBoot整合MongoDB实现事务管理

    SpringBoot整合MongoDB实现事务管理

    Spring Boot是一种快速开发Spring应用的方式,它提供了大量的自动配置和默认设置,以简化开发流程,MongoDB是一个基于文档的NoSQL数据库,本文将介绍如何在Spring Boot应用中整合MongoDB,并实现事务管理,需要的朋友可以参考下
    2024-07-07
  • SpringBoot MDC全局链路最新完美解决方案

    SpringBoot MDC全局链路最新完美解决方案

    MDC 在 Spring Boot 中的作用是为日志事件提供上下文信息,并将其与特定的请求、线程或操作关联起来,通过使用 MDC,可以更好地理解和分析日志,并在多线程环境中确保日志的准确性和一致性,这篇文章主要介绍了SpringBoot MDC全局链路解决方案,需要的朋友可以参考下
    2023-08-08

最新评论