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. C# HttpWebResponse WebClient 基础连接已经关闭: 发送时发生错误.

    https://blog.csdn.net/sun49842566/article/details/82802297 net 4.0 设置: ServicePointManager.SecurityP ...

  2. CBV与FBV

    FBV FBV(function base views)就是在 url 中一个路径对应一个函数 urls.py urlpatterns = [ url(r'^admin/', admin.site.u ...

  3. nodejs web API 相关杂项

    场景是这样的: docker-compose中起多个服务,其中有一个是nodejs写的作为web API. 这个API 的使用者有2类: 1 docker-compose网络内其他特定服务访问,作为C ...

  4. ajax上传下载自定义圆形滚动条

    demo地址:https://pan.baidu.com/s/1qYNYCFE 因为项目需要在上传文件的时候,知道上传的进度,所以封装了一个方法,在上传文件的时候动态显示上传进度,主要根据XMLHtt ...

  5. 【XAF问题】不能将值NULL插入列"Oid"

    一.问题 1. 不能将值NULL插入列"Oid" 二.解决方法 解决方法:删表,oid不能为空,继承的对象变了

  6. Angular/Vue调用百度地图+标注点不显示图标+多标注点计算地图中心位置

    整理一下~ 一.在vue中调用百度地图 首先当然是申请百度密匙(很简单,不多说) 1.在index.html文件中引入百度地图JavaScript API接口:   <script type=& ...

  7. ClassNotFoundException和NoClassDefFoundError的区别

    ClassNotFoundException ClassNotFoundException的产生原因:就是找不到指定的class. ClassNotFoundException发生在加载阶段. 常见的 ...

  8. php 连接oracle 导出百万级数据

    1,我们一般做导出的思路就是,根据我们想要的数据,全部查询出来,然后导出来,这个对数据量很大的时候会很慢,这里我提出来的思想就是分页和缓冲实现动态输出. 2.普通的我就不说了,下面我说一下分页和内存刷 ...

  9. nisght heap increase

    sudo gedit /usr/local/cuda-5.5/libnsight/nsight.ini --launcher.defaultActionopenFile-vm../jre/bin/ja ...

  10. 公网IP被别人恶意解析的后果

    在网上看的一个案例,说是自己网站的IP被别的域名恶意解析了,恶意网站没有备案,IP地址为没有备案的域名提供了正常的网站服务,导致对应的IP也被封了. 检查方法:telnet xxx.me 80端口不通 ...