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的对比总结,希望大家指出不对之处. 第一 ...
随机推荐
- BZOJ5487: [Usaco2018 Dec]Cowpatibility
Description 研究证明,有一个因素在两头奶牛能否作为朋友和谐共处这方面比其他任何因素都来得重要--她们是不是喜欢同 一种口味的冰激凌!Farmer John的N头奶牛(2≤N≤50,000) ...
- P4312 [COCI 2009] OTOCI / 极地旅行社
思路 LCT维护和的板子 注意findroot的时候要先access一下,修改点权之前要先splay到根 代码 #include <cstdio> #include <algorit ...
- 深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE
深度学习课程笔记(十八)Deep Reinforcement Learning - Part 1 (17/11/27) Lectured by Yun-Nung Chen @ NTU CSIE 201 ...
- 3、基于多播、安全认证的corosync集群(VIP、Httpd、Filesystem)
Messaging Layer --> CRM --> RA systemd:/usr/lib/systemd/system systemd有一个特性,即便一个服务开机启动,但是在 ...
- LeetCode--019--删除链表的倒数第N个节点(java)
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- vue教程自学笔记(三)
五.Class与Style绑定 可以用v-bind用于class和style,表达式结果类型除了字符串,还可以是对象或数组. 1.绑定HTML Class 对象语法:给v-bind:class传递一个 ...
- 特殊场景Sql优化
一.大表的大数据量修改 问题: 1.大量的行级锁,长时间阻塞 2.主从延时,大批数据不一致 解决方法: 分批次修改 二.大表的表结构修改 问题:长时间锁表 解决方法: 1.从库修改,主从切换,主库 ...
- ActiveMQ使用介绍及实例
上一篇讲了rabbitmq的使用以及demo,activemq的思路也与之有相似的地方. activemq是基于Java实现的.activemq没有rabbitmq那么多的路由规则,其通信方式只有两种 ...
- Erlang ETS Table
不需要显示用锁,插入和查询时间不仅快而且控制为常量,这就是Erlang的ETS Table. 为什么而设计? Erlang中可以用List表达集合数据,但是如果数据量特别大的话在List中访问元素就会 ...
- find -exec 批量使用方法
查找当前目录批量文件内容后复制到指定目录当中 find . -type f -name "*.log" -exec cp {} /目标目录/ \;