POJO类

POJO(Plain Ordinary Java Object)即普通Java类,具有一部分getter/setter方法的那种类就可以称作POJO。

/* POJO类,与数据库表中的字段一一对应 * 1 类名与表名一致* 2 属性与表字段一致*   - 属性的名称与表字段名相同*   - 属性的类型与表字段属性一致,且使用包装类型,如 Long, Integer等* 3 生成 Getter/Setter方法*/
public class Student
{public Integer id;   public String name;public Boolean sex;public String phone;public Date birthday;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 Boolean getSex() {return sex;}public void setSex(Boolean sex) {this.sex = sex;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}}

自动查询记录

public List query(String sql, Class clazz) throws Exception{// 查询ResultSet rs = executeQuery(sql);// 取得MetaDataResultSetMetaData rsmd = rs.getMetaData();AfSqlMeta[] metaArray = AfSqlMeta.read(rsmd);// 构造一个List返回int numColumn = metaArray.length;List result = new ArrayList();while(rs.next()){// 将每行数据转为一个POJO对象Object pojo = clazz.newInstance();        result.add(pojo);// 通过setter设置pojo的各个属性for(int i=0; i<numColumn; i++){AfSqlMeta meta = metaArray[i]; // 该列的Meta数据String value = rs.getString(i+1); // 该列的值// 根据类型提示,转成Integer, String, Boolean, Date等基本类型Object typedValue = AfSqlReflect.typedValue(ctx, meta.type, value);// 将列值设置给POJO的属性try {AfSqlReflect.setPojo(pojo, meta.label, typedValue);}catch(Exception e){// e.printStackTrace();System.out.println("** 错误: " + e.getMessage());}             }     }return result;}

自动插入记录

public void insert(Object pojo) throws Exception{// 解析类的信息Class clazz = pojo.getClass();AfSqlPojo po = AfSqlPojo.from(clazz);if(po.tableName == null)throw new Exception("类 " + clazz.getName() + "中缺少AFTABLE注解! 无法自动插入!");// 准备创建SQL语句AfSqlInsert insertSQL = new AfSqlInsert(po.tableName);         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 根据映射关系,类的属性名 <-> 列名,拼凑SQL语句for(AfSqlColumn c : po.columns) {String fieldName = c.name; // 列名          Method getter = po.findGetter(fieldName);try {Object value = getter.invoke(pojo); // 每一列的值if(value != null){if(value instanceof Boolean) {Boolean v = (Boolean)value;value = v ? "1" : "0";}else if(value instanceof Date){Date v =  (Date) value;                        value = sdf.format(v);}                        insertSQL.add(fieldName, value.toString());}}catch(Exception e){                }}// 执行INSERT语句String sql = insertSQL.toString();System.out.println("** INSERT SQL:" + sql);Statement stmt = conn.createStatement(); if(po.generatedKey == null){// 无自增IDstmt.execute(sql);}else{// 自增主键ID处理// 1  如果用户在插入时已经自己指定了一个值,则MySQL会使用这个值,并返回这个值// 2  如果用户在插入时未定自增主键的值,则MySQL会生成一个自增的值,并返回stmt.execute(sql,Statement.RETURN_GENERATED_KEYS);ResultSet keys = stmt.getGeneratedKeys();       if(keys.next()){// 取回自增的IDString id = keys.getString(1);try {Method setter = AfSqlReflect.findSetter(clazz, po.generatedKey);AfSqlReflect.setPojo(pojo, setter, id);}catch(Exception e){                  }}}}

数据库-MySQL-JDBC框架相关推荐

  1. 使用Spring JDBC框架连接并操作数据库

    在前一篇博文JAVA通过JDBC连接并操作MySQL数据库中,我们知道如何通过JDBC连接并操作数据库,但是请看程序,整个程序连接数据库和关闭数据库占了很大一部分代码量,而且每次我们执行一下数据库操作 ...

  2. c mysql封装 jdbc_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  3. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySQL数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  4. mysql封装 javabean,利用Java针对MySql封装的jdbc框架类JdbcUtils完整实现(包含增删改查、JavaBean反射原理,附源码)...

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

  5. java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...

    近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...

  6. Java数据库持久层框架基础:jdbc原理和使用综述

    Java数据库持久层框架基础:jdbc原理和使用综述 前言 jdbc基础架构 jbdc的使用 jdbc的主要接口 驱动 连接 连接池 会话Statement 结果集ResultSet 前言 目前jav ...

  7. Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等

    MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...

  8. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错

    -- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...

  9. android连接Mysql数据库之JDBC方式

    一.创建一个数据库和若干表,并导入相关信息.这里以我之前使用的一个图书系统的数据库为例子. 首先假设已经安装并配置好Mysql.(建议大家安装WAMP,也就是安装完这个,就相当于安装了Mysql,PH ...

  10. jdbc链接数据库mysql

    package cn.itcast.demo2;import java.sql.Connection; import java.sql.DriverManager; import java.sql.R ...

最新文章

  1. C语言中用函数实现录入信息模块,C语言程序设计用函数实现模块化程序设计(73页)-原创力文档...
  2. sonar 质量配置 操作(质量规则)
  3. linux基础 linhaifeng,Linux基础之命令练习Day2(示例代码)
  4. Java File类void deleteOnExit()方法(带示例)
  5. [转贴]使用jQuery自动缩图片 - [jQuery]
  6. 拆解前苏联产荧光数码管计算器,内部电路结构彪悍!
  7. MySQL集群Cluster详解(一)——基本原理
  8. python中jieba库的作用_Python jieba库用法及实例解析
  9. 阿里中台搞了3年,凉了?网传:副总裁玄难“背锅”,辞职创业!咸鱼放弃维护 Flutter!...
  10. 因果分析:原理、方法论、应用
  11. HTML基础-综合案例1-学生信息表
  12. 使用命令行——查看笔记本电池损耗程度
  13. LinkedIn前副总裁Brian Frank:三十亿美金销售缔造者的领导力思考
  14. java定义类模板_定义模板——函数模板和类模板
  15. BLDC-坐标变换(Clark,Park,反Park)
  16. 阿里云ECS部署Nginx配置域名访问
  17. android禁止输入字符,Android输入框禁止输入表情符号、特殊字符
  18. 会声会影实操项目流程
  19. jiffies HZ 秒的区别与联系
  20. 2020年全国高校计算机能力挑战赛C++初赛程序设计题2:九键拼音中数字与英文字母成对应关系:2--abc, 3-def, 4-ghi, 5--jkl, 6--mno, 7--pqrs, 8--tuv

热门文章

  1. 软件测试 学习之路 CSS(一)
  2. 倦怠和枯燥_我如何艰难地学习倦怠
  3. 使用jpa控制器层如何编写_用错误的方式编写Kubernetes控制器仍然有用
  4. devops的重要性_为什么DevOps是当今最重要的技术战略
  5. web字体设置成平方字体_探索免费和开放的Web字体
  6. 大开眼界百度云盘2018_文化差异的大开眼界
  7. 压缩包加密后门_加密后门:还有更多争论吗?
  8. 优必选能开放软硬件源代码吗_开放式硬件为何胜出
  9. 前端:JS/33/实例:表单验证
  10. 关于浮点数的剪不断理还乱