hibernate模拟(转载)
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模拟(转载)的更多相关文章
- hibernate 模拟实现和What is and Why O/R Mapping
What is and Why O/R Mapping What is : 用面向对象的方式调用api,类库帮我们翻译成面向关系的方式. Why: 1.JDBC操作数据库很繁琐2.Sql 语句编写并不 ...
- hibernate缓存机制详细分析 复制代码 内部资料 请勿转载 谢谢合作
您可以通过点击 右下角 的按钮 来对文章内容作出评价, 也可以通过左下方的 关注按钮 来关注我的博客的最新动态. 如果文章内容对您有帮助, 不要忘记点击右下角的 推荐按钮 来支持一下哦 如果您对文章内 ...
- Hibernate—— 一对多 和 多对多关联关系映射(xml和注解)总结(转载)
One to Many 映射关系 多对一单向外键关联(XML/Annotation) 一对多单向外键关联(XML/Annotation) 懒加载和积极加载 一对多双向外键关联(XML/Annotati ...
- 菜鸟学SSH(十五)——简单模拟Hibernate实现原理
之前写了Spring的实现原理,今天我们接着聊聊Hibernate的实现原理,这篇文章只是简单的模拟一下Hibernate的原理,主要是模拟了一下Hibernate的Session类.好了,废话不多说 ...
- Hibernate O/R Mapping模拟
作为SSH中的重要一环,有必要理解一下Hibernate对 O/R Mapping的实现. 主要利用java的反射机制来得到完整的SQL语句. 准备工作: 1. Object Student实体类: ...
- 简单模拟Hibernate的主要功能实现
在学习期间接触到Hibernate框架,这是一款非常优秀的O/R映射框架,大大简化了在开发web项目过程中对数据库的操作.这里就简单模拟其底层的实现. /*******代码部分,及其主要注解***** ...
- 模拟Hibernate框架的小demo
该程序为尚学堂马士兵老师讲解,模拟了hibernate的原理,主要应用了字符串拼接,反射知识. step1,新建数据库 use jd; create table _student( _id int(1 ...
- Hibernate使用原生SQL(转载)
本文转载,出处如下:http://bhdweb.iteye.com/blog/801084 HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上 ...
- [转载] Hibernate与 MyBatis的比较
转载自http://blog.csdn.net/firejuly/article/details/8190229 最近做了一个Hibernate与MyBatis的对比总结,希望大家指出不对之处. 第一 ...
随机推荐
- [CodeForces 1141A] Game 23
题目链接:http://codeforces.com/problemset/problem/1141/A 首先,nn一定要是mm的倍数.否则就无法转换,输出-1: 然后令k=.\frac{m}{n} ...
- Jade入门学习笔记
jade是超高性能的node JavaScript模板引擎,有着非常强大的API和大量杰出的特性.它主要针对node的服务端.由于商标的原因,改为Pug,哈巴狗.Pug有它本身的缺点--可移植性差,调 ...
- angular --- s3core移动端项目(三)
angular.module('myApp') .directive('listActive',functon(){ return { restrict:'A', scope:{ listActive ...
- 51Nod - 1384
全排列函数解法 #include <iostream> #include <cstdio> #include <cstring> #include <cmat ...
- 7.8 GRASP原则八: 间接 Indirection
GRASP原则八: 间接 Indirection 若两个对象直接连接,导致耦合太紧,如何解决?3.1 GRASP rule8: Indirection 间接 Name: Indirection ...
- 解决同一activity下多个fragment 切换时重复执行onCreateView方法
Fragment之间切换时每次都会调用onCreateView方法,导致每次Fragment的布局都重绘,无法保持Fragment原有状态. 解决的办法是:在Fragment onCreateView ...
- 20165309 2017-2018-2《Java程序设计》课程总结
20165309 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 预备作业1:我期望的师生关系 预备作业2:技能学习经验与C语言 预备作业3:Linux安装及学习 ...
- Win10下安装zio
0x00 报错:capstone.dll缺失,就算用pip安装也不行. 推荐:kali下安装pwn,pwntools,zio
- day17_python_1124
01 昨日内容回顾 包: 1,在内存中创建一个以包命名的空间. 2,执行包的__init__文件将文件中的名字加载到包的名称空间. 3,通过包名.名字(变量,函数,类名)方式调用这些内容. aaa.x ...
- RAID的基本介绍
一.传统磁盘的劣势 影响计算机性能的组件一般包括:CPU.主板总线IO.内存IO.硬盘IO.网卡IO.现代处理器性能已经很高了,但是计算机整体IO性能较弱,严重影响了计算机性能 现代的计算机总线.内存 ...