hibernate模拟实现
来源:互联网 发布:淘宝聚划算团购怎么抢 编辑:程序博客网 时间:2024/06/06 10:01
创建Student类//Student.javapublic class Student { private int id; private String name; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 创建Test类public class Test { public static void main(String[] args) throws Exception{ Student stu = new Student(); //定义一个Student类对象 //设置属性值 stu.setId(3); stu.setName("lishi"); stu.setAge(22); //生成自定义的Session对象 Session session = new Session(); //执行Session类中的save方法 session.save(stu); } } 创建Session类//模拟Hibernate中的Session实现的功能 public class Session { String tableName = "_student"; //表名 Map<String,String> cfs = new HashMap<String, String>(); //字段名与属性一一对应的关系 String[] methodNames; //声明一个字符串数组,用来存储方法名 /** * Session的构造方法 */ public Session(){ cfs.put("id", "id"); cfs.put("name", "name"); cfs.put("age", "age"); methodNames = new String[cfs.size()]; } /** * 实现数据插入功能 * @param stu * @throws Exception */ public void save(Student stu) throws Exception{ String sql = createSql(); //获取拼接完成的sql语句 Class.forName("com.mysql.jdbc.Driver"); //加载MySQL数据库驱动 //获取数据库连接 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/hibernate","root", "wwj"); //创建PreparedStement对象 PreparedStatement ps = conn.prepareStatement(sql); for(int i = 0; i < methodNames.length; i++) { //利用Java的反射机制,获取对象的方法 Method m = stu.getClass().getMethod(methodNames[i]); Class r = m.getReturnType(); //获取方法返回值类型 if(r.getName() == "java.lang.String"){ //如果返回值类型等于”java.lang.String"的话 String v = (String)m.invoke(stu); //对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。 ps.setString(i + 1, v); //将指定参数设置为给定 Java String 值。 } if(r.getName() == "int"){ Integer v = (Integer)m.invoke(stu); ps.setInt(i + 1, v); } System.out.println(m.getName() + "|" + r.getName()); } ps.executeUpdate(); //执行sql语句更新数据库 ps.close(); //释放此PrepareStatement对象的数据库和JDBC资源 conn.close(); //关闭数据连接 } /** * 创建SQL语句 * @return */ private String createSql() { //拼接字段 String str1 = ""; int index = 0; for(String s : cfs.keySet()) { String v = cfs.get(s); v = Character.toUpperCase(v.charAt(0)) + v.substring(1); methodNames[index] = "get" + v; index++; str1 += s + ","; } str1 = str1.substring(0, str1.length() - 1); //去掉最后面的逗号"," System.out.println(str1); //拼接(?,?,?,?),问号的个数取决于map的长度 String str2 = ""; for(int i = 0; i < cfs.size(); i++){ str2 += "?,"; } str2 = str2.substring(0, str2.length() - 1); System.out.println(str2); //拼接sql字符串 String sql = "Insert into " + tableName + "(" + str1 + ")" + "values" + "(" + str2 + ")"; System.out.println(sql); return sql; } } 测试结果:id,age,name?,?,?Insert into _student(id,age,name)values(?,?,?)getId|intgetAge|intgetName|java.lang.String
0 0
- Hibernate:模拟Hibernate实现
- 简单模拟实现hibernate
- hibernate实现原理模拟
- 简易模拟Hibernate实现
- hibernate模拟实现insert
- Hibernate模拟实现
- hibernate模拟实现
- 模拟Hibernate实现
- 使用反射模拟实现hibernate
- Hibernate学习_001_模拟hibernate的实现
- 模拟hibernate实现的JAVA源码
- 自己写hibernate(模拟实现)
- 简单模拟hibernate的实现原理
- 模拟hibernate save方法的实现过程
- Hibernate学习02---Hibernate原理分析和模拟其实现
- Hibernate 模拟
- Hibernate模拟
- hibernate模拟
- php 控制台打印
- 面向对象-三大特性(OC代码)
- java socket 发送文件
- GRE词汇会难记到什么程度
- linux中断延迟之tasklet
- hibernate模拟实现
- 七款Debug工具推荐:iOS开发必备的调试利器
- 数据库case,分页
- 黑马程序员_java概述
- shell学习十七天----awk命令
- $(document).ready() 与window.onload的区别
- 解决 ExpandableListView .onChildItemLongClick()
- 精通HTML表格的使用
- OBD2 Software for ELM327