最近有个需要就是分表的操作,就是事先不知道数据存在的表到底是那张表,需要根据配置文件或者参数解析之后才能确定到底是那张表。所以这就需要将表名实时的传入进入。要是之前的我们所使用的mybatis的话,其实这个问题很好解决,只需要将#换成$即可,但是由于我们现在用的是JPA,所以这个并不能直接操作。所以这块需要引入EntityManager类,具体操作如下:
在repository包或者dao包下的实现类中注入EntityManager,并加上@PersistenceContext注解(注入的是实体管理器,执行持久化操作),然后只需要在方法中编写sql语句,以字符串拼接的方式编写即可,如下
String sql = "select _mid from " + userMessageTable + " where _uid='" + uid + "' LIMIT 1";Object mid = entityManager.createNativeQuery(sql).getSingleResult();
userMessageTable 便是传递的表名,这样便实现了表名以传递的方式执行的sql