2025年Java反射机制之初见端倪

Java反射机制之初见端倪这里模拟一下 Hibernate 的 save 初试 OR Mapping 首先建立 JavaBean student 类 student java package hibernate source public class student private int id private String name private int

大家好,我是讯享网,很高兴认识大家。

这里模拟一下Hibernate的save,初试OR Mapping。

首先建立JavaBean student类。

package hibernate.source; public 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; } } 

讯享网
编写测试方法,要求直接将student存入数据库。

TestStudent.java

讯享网import hibernate.source.student; public class TestStudent { public static void main(String args[]) throws Exception { student cat=new student(); cat.setAge(22); cat.setName("Jing"); cat.setId(26); Session session=new Session(); session.save(cat); } } 

我们模拟了Hibernate中的Session,这里我们需要自己编写Session类来实现将student存入数据库。

Session.java


讯享网

import java.lang.reflect.Method; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.util.HashMap; import java.util.Map; import hibernate.source.student; public class Session { String TableName="student"; Map<String,String> cfs=new HashMap<String,String>(); String[] MethodName; Session() { cfs.put("id", "id"); cfs.put("name", "name"); cfs.put("age", "age"); MethodName=new String[cfs.size()]; } public void save(student cat) throws Exception{ String sql=createSql(); Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/test"); PreparedStatement pst=conn.prepareStatement(sql); for(int i=0;i<cfs.size();i++) { Method m=cat.getClass().getMethod(MethodName[i]); Class<?> r=m.getReturnType(); System.out.println(m.getName()); System.out.println(r.getName()); if(r.getName().equals("java.lang.String")) { String tem=(String)m.invoke(cat); pst.setString(i+1, tem); } if(r.getName().equals("int")) { Integer tem=(Integer)m.invoke(cat); pst.setInt(i+1,tem); } } pst.execute(); pst.close(); conn.close(); } public String createSql() { String sql1=""; for(int i=0;i<cfs.size();i++){ sql1+=cfs.keySet().toArray()[i]+","; String property=(String)cfs.values().toArray()[i]; String s=property.substring(0, 1).toUpperCase(); MethodName[i]="get"+s+property.substring(1, property.length()); System.out.println(MethodName[i]); } String sql2=""; for(int i=0;i<cfs.size();i++) { sql2+="?"+","; } sql2=sql2.substring(0, sql2.length()-1); sql1=sql1.substring(0, sql1.length()-1); String sql="insert into "+TableName+" ("+sql1+")"+" values"+" ("+sql2+")"; System.out.println(sql); return sql; } } 

思路:

1.拼接SQL语句,将用在Preparedstatement中。

2.需要将student的属性设到Preparedstatement中,问题是怎么实现呢?

3.利用Java反射机制。

    1)新建MethodName数组,目的将student中的方法名获得并存入MethodName中。

    2)Method类登场,让student类通过MethodName取得对应的方法,返回给Mehod对象。


小讯
上一篇 2025-01-15 13:18
下一篇 2025-03-01 08:44

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/60487.html