package simulation;
/**
*
* @author Administrator
*
*/
public class User {
private int id;
private String username;
private String pwd;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
} }
package simulation;

import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map; import com.mysql.jdbc.PreparedStatement; public class Session { private String table="user";
private Map<String, String> params=new HashMap<String, String>();
//装入方法名的容器
String [] methodName; public Session() {
//模拟配置文件 key为属性 value为数据列
params.put("id", "_id");
params.put("pwd", "_pwd");
params.put("username", "_username");
methodName=new String[params.size()];
} public void save(User user){ String sql = creatSQL();
System.out.println(sql);
//数据库操作
try {
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/hibernate","root","123456");
PreparedStatement state = (PreparedStatement) con.prepareStatement(sql);
//为占位符设值
for (int i = 0; i < methodName.length; i++) {
//反射取值
Method method = user.getClass().getMethod(methodName[i]);
Class<?> clazz = method.getReturnType();
if (clazz.getName().equals("java.lang.String")) {
state.setString(i+1, (String) method.invoke(user));
}
if (clazz.getName().equals("int")) {
state.setInt(i+1, (Integer) method.invoke(user));
}
System.out.println(method.getName()+":"+method.getReturnType());
}
state.executeUpdate();
state.close();
con.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public String creatSQL() {
String parameters="";
String values="";
int index=0;
//拼接属性字符串和值字符串
for (String key: params.keySet()) {
// System.out.println(key);
parameters+=params.get(key)+",";
String v="get"+Character.toUpperCase(key.charAt(0))+key.substring(1);
// System.out.println(methodName.length);
methodName[index]=v;
index++;
}
parameters=parameters.substring(0,parameters.length()-1);
System.out.println(Arrays.toString(methodName));
for (int i = 0; i < params.size(); i++) {
values+="?,";
}
values=values.substring(0,values.length()-1);
String sql="insert into "+table+"("+parameters+") values ("+values+")";
return sql;
} }
package simulation;

public class HibernateTest {

    public static void main(String[] args) {

        User user=new User();
user.setId(1);
user.setPwd("123456");
user.setUsername("a");
Session session=new Session();
session.save(user); } }

hibernate模拟(转载)的更多相关文章

  1. hibernate 模拟实现和What is and Why O/R Mapping

    What is and Why O/R Mapping What is : 用面向对象的方式调用api,类库帮我们翻译成面向关系的方式. Why: 1.JDBC操作数据库很繁琐2.Sql 语句编写并不 ...

  2. hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作

    您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...

  3. Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)

    One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...

  4. 菜鸟学SSH(十五)——简单模拟Hibernate实现原理

    之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类.好了,废话不多说 ...

  5. Hibernate O/R Mapping模拟

    作为SSH中的重要一环,有必要理解一下Hibernate对 O/R Mapping的实现. 主要利用java的反射机制来得到完整的SQL语句. 准备工作: 1. Object Student实体类: ...

  6. 简单模拟Hibernate的主要功能实现

    在学习期间接触到Hibernate框架,这是一款非常优秀的O/R映射框架,大大简化了在开发web项目过程中对数据库的操作.这里就简单模拟其底层的实现. /*******代码部分,及其主要注解***** ...

  7. 模拟Hibernate框架的小demo

    该程序为尚学堂马士兵老师讲解,模拟了hibernate的原理,主要应用了字符串拼接,反射知识. step1,新建数据库 use jd; create table _student( _id int(1 ...

  8. Hibernate使用原生SQL(转载)

    本文转载,出处如下:http://bhdweb.iteye.com/blog/801084 HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上 ...

  9. [转载] Hibernate与 MyBatis的比较

    转载自http://blog.csdn.net/firejuly/article/details/8190229 最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处. 第一 ...

随机推荐

  1. [CodeForces 372A] Counting Kangaroos is Fun

    题目链接:http://codeforces.com/problemset/problem/372/A 二分思想 AC代码: #include <cstdio> #include < ...

  2. Docker for windows10 配置阿里云镜像

    到官网下载 并且 安装 Docker for windows  (注意 官方要求 windows10 是企业版才行  天朝你懂的 ) 关于 Docker for windows  要求有  带有 hy ...

  3. JS基础概念

    JS基础概念 1. 算法及流程图 算法类型:1.算数算法:2.事务性算法(解决某个问题的方法和先后顺序). JS语法概述 1. 引入JS的方法 1.用<script src="&quo ...

  4. robot framework学习五——AutoltLibrary库

    安装中遇到的问题: 安装好了AutoItLibrary,但是导入到RIDE后,仍然红色显示 搜索了下解决办法,说要安装下autoit-v3-setup.exe https://www.autoitsc ...

  5. 清理SuperMap三维缓存

    一.iclient三维插件浏览器端缓存 方法1:遍历users子文件夹,发现指定目录有supermap,即删除 @echo offtitle 清理三维缓存@echo 开始清理三维缓存...for /f ...

  6. LeetCode--017--电话号码的字母组合(java)

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合. 给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. 示例: 输入:"23" 输出:[&quo ...

  7. linux存储管理之磁盘阵列

    磁盘阵列 RAID ====================================================================================RAID:廉 ...

  8. Centos 中 service iptables stop 失败

    Centos7中的防火墙调整为firewalld,试一下systemctl stop firewalld关闭防火墙.

  9. SSH框架学习摸索记

    Unable to load configuration. - bean - jar:file:/E:/tomcat-7.0.11/webapps/struts/WEB-INF/lib/struts ...

  10. libcurl编译使用,实现ftp功能

    Libcurl实现ftp的下载,上传功能.版本为curl-7.63.0 1.编译vs2015 参考资料:https://blog.csdn.net/yaojingkao/article/details ...