CRUD 反射 泛型

2024-08-28 15:08
文章标签 反射 泛型 crud

本文主要是介绍CRUD 反射 泛型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先设计一个公共的BaseDao接口,再设计一个抽象类去实现接口BaseDaoImpl的方法,接下来就是各自的具体接口UserDao,根据自身需要增加方法,然后自己的实现类UserDaoImpl去继承这个抽象类并且实现自身的接口

公共的BaseDao接口


import java.util.List;public interface BaseDao<T> {/*** 保存实体* * @param entity*/void save(T entity);/*** 删除实体* * @param id*/void delete(Long id);/*** 更新实体* * @param entity*/void update(T entity);/*** 按id查询* * @param id* @return*/T getById(Long id);/*** 按id查询* * @param ids* @return*/List<T> getByIds(Long[] ids);/*** 查询所有* * @return*/List<T> findAll();}

抽象类实现公共接口BaseDaoImpl

import java.lang.reflect.ParameterizedType;
import java.util.List;import javax.annotation.Resource;import org.hibernate.Session;
import org.hibernate.SessionFactory;
public abstract class BaseDaoImpl<T> implements BaseDao<T> {private Class<T> clazz;public BaseDaoImpl() {// 使用反射技术得到T的真实类型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型System.out.println("clazz ---> " + clazz);}/*** 获取当前可用的Session* * @return*/protected Session getSession() {return sessionFactory.getCurrentSession();}public void save(T entity) {getSession().save(entity);}public void update(T entity) {getSession().update(entity);}public void delete(Long id) {Object obj = getById(id);if (obj != null) {getSession().delete(obj);}}public T getById(Long id) {return (T) getSession().get(clazz, id);}public List<T> getByIds(Long[] ids) {return getSession().createQuery(//"FROM User WHERE id IN (:ids)")//.setParameterList("ids", ids)//.list();}public List<T> findAll() {return getSession().createQuery(//"FROM " + clazz.getSimpleName())//.list();}}

具体的接口UserDao

public interface UserDao extends BaseDao<User> {// List<User> findByNameLike(String namePart);
}

具体实现类UserDaoImpl

public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {}

测试类Test

public class Test {private User user=new User();@org.junit.Testpublic void test(){UserDao userDao=new UserDaoImpl();//new的泛型对象是User 父类是BaseDaoImpl // 获取第一个类型参数的真实类型如果是<k,v>所以需要获取第一个userDao.save(user);userDao.findByName(user);}
}

这篇关于CRUD 反射 泛型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1115107

相关文章

Mysql数据库中数据的操作CRUD详解

《Mysql数据库中数据的操作CRUD详解》:本文主要介绍Mysql数据库中数据的操作(CRUD),详细描述对Mysql数据库中数据的操作(CRUD),包括插入、修改、删除数据,还有查询数据,包括... 目录一、插入数据(insert)1.插入数据的语法2.注意事项二、修改数据(update)1.语法2.有

C#特性(Attributes)和反射(Reflection)详解

《C#特性(Attributes)和反射(Reflection)详解》:本文主要介绍C#特性(Attributes)和反射(Reflection),具有很好的参考价值,希望对大家有所帮助,如有错误... 目录特性特性的定义概念目的反射定义概念目的反射的主要功能包括使用反射的基本步骤特性和反射的关系总结特性

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

Spring 中使用反射创建 Bean 实例的几种方式

《Spring中使用反射创建Bean实例的几种方式》文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newI... 目录1. 使用 Class.newInstance() (仅限无参构造函数):2. 使用 Construc

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取