Java 简单的新增方法

开发工具与关键技术: MyEclipse  Java
撰写时间:2020、12、10

新增,在开发中也是经常需要写的一个方法,我们知道多表新增比单表要难,但数据库表多不一定新增复杂,而表多关系复杂那新增就复杂,所以新增方法的难易程度取决于数据库表关系的复杂度,单表新增是新增的基础。
Java的新增其实跟其他语言的新增方法差不多,只是Java是封装思想,所以要将方法封装起来,只对外提供接口调用就可以了,我们说一下简单的单表新增。
首先准备一张数据库表,如下图所示,
在这里插入图片描述

jsp页面就说了,然后写daoimpl层的方法,daoimpl层是将servlet层传递过来的信息跟数据库对接,也是封装起来的方法,
方法代码如下
//插入一条
public void insert(User user) {
Connection conn=DbUtils.getConnection();
String sql=“insert into s_book (name,author,publisher,price,lingshou) value(?,?,?,?,?);”;
PreparedStatement st=null;
ResultSet rs=null;
try {
st=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
st.setString(1,user.getName());
st.setString(2,user

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java运行时动态生成class的方法一般有两种:使用Java字节码操作库ASM或者使用Java自带的反射API。 使用ASM: ASM是一个Java字节码操作库,它可以在不加载类的情况下操作字节码。以下是使用ASM生成一个简单的类的示例: ``` ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); cw.visit(Opcodes.V1_8, Opcodes.ACC_PUBLIC, "MyClass", null, "java/lang/Object", null); MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "myMethod", "()V", null, null); mv.visitCode(); mv.visitFieldInsn(Opcodes.GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("Hello, world!"); mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(2, 1); mv.visitEnd(); byte[] code = cw.toByteArray(); ClassLoader classLoader = new ClassLoader() { public Class<?> defineClass(String name, byte[] code) { return defineClass(name, code, 0, code.length); } }; Class<?> clazz = classLoader.defineClass("MyClass", code); Object obj = clazz.newInstance(); Method method = clazz.getDeclaredMethod("myMethod"); method.invoke(obj); ``` 使用反射API: Java自带的反射API可以在运行时获取类的信息并操作类的属性和方法。以下是使用反射API动态添加方法的示例: ``` public static void addMethod(Object obj, String methodName, Class<?>[] parameterTypes, Class<?> returnType, String methodBody) throws Exception { Method method = Method.class.getDeclaredMethod("getDeclaredFields"); method.setAccessible(true); Field[] fields = (Field[]) method.invoke(null); Method[] newMethods = new Method[fields.length + 1]; for (int i = 0; i < fields.length; i++) { newMethods[i] = (Method) fields[i].get(null); } CtClass cc = ClassPool.getDefault().get(obj.getClass().getName()); CtMethod cm = CtNewMethod.make("public " + returnType.getName() + " " + methodName + "(" + Arrays.stream(parameterTypes).map(Class::getName).collect(Collectors.joining(",")) + ") {" + methodBody + "}", cc); cc.addMethod(cm); Class<?> newClass = cc.toClass(); newMethods[fields.length] = newClass.getDeclaredMethod(methodName, parameterTypes); Field methodField = Method.class.getDeclaredField("declaredMethods"); methodField.setAccessible(true); methodField.set(null, newMethods); } ``` 这个方法将会在目标对象上添加一个新方法。在这个示例中,我们使用了Javassist库,它是一个字节码操作库,它可以生成和修改Java字节码。我们可以使用它在运行时动态创建和修改类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值