import core.dao.BaseDao1; import db.model.CidEntity; import db.model.DataModel; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.hibernate.Session; import org.hibernate.boot.Metadata; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Projections; import org.hibernate.service.ServiceRegistry; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.hibernate.tool.schema.TargetType; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import web.config.AppConfig; import javax.annotation.Resource; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.EnumSet; import java.util.List; //让测试运行于Spring环境 @RunWith(SpringJUnit4ClassRunner.class) @SpringJUnitWebConfig @ContextConfiguration(classes = {AppConfig.class}) public class SpringTest { private Logger log = LogManager.getLogger(); @Resource private BaseDao1 baseDao1; // @Test public void exportTableSql() { ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(baseDao1.getSessionFactory().getProperties()).build(); Metadata metadata = new MetadataSources(serviceRegistry).addAnnotatedClass(DataModel.class).buildMetadata(); SchemaExport schemaExport = new SchemaExport(); schemaExport.setOutputFile("test.sql"); schemaExport.setFormat(true); schemaExport.create(EnumSet.of(TargetType.SCRIPT), metadata); List typeid = (List) baseDao1.findByCriteria(DetachedCriteria.forClass(CidEntity.class).setProjection(Projections.groupProperty("typeid"))); List tableNames = new ArrayList<>(); StringBuffer sb = new StringBuffer(); for (Integer id : typeid) { String tableName = "data_" + id; sb.append("create table " + tableName + " like data_1;\n"); tableNames.add(tableName); } sb.append("create table data (\n" + " cid integer not null,\n" + " aid integer,\n" + " author varchar(255),\n" + " backup_vid varchar(255),\n" + " cache varchar(255),\n" + " cover varchar(255),\n" + " dispatch integer,\n" + " dispatch_servers integer,\n" + " dp_done tinyint,\n" + " dp_done_flv tinyint,\n" + " dp_done_hdmp4 tinyint,\n" + " dp_done_mp4 tinyint,\n" + " duration double precision,\n" + " files integer,\n" + " letv_addr varchar(255),\n" + " letv_vid integer,\n" + " letv_vu varchar(255),\n" + " mid integer,\n" + " page integer,\n" + " storage integer,\n" + " storage_server integer,\n" + " subtitle varchar(255),\n" + " title varchar(255),\n" + " type varchar(255),\n" + " upload integer,\n" + " upload_meta integer,\n" + " vid varchar(255),\n" + " vp integer,\n" + " type_id integer,\n" + " primary key (cid)\n" + " ) engine=MERGE UNION=(" + StringUtils.join(tableNames, ",") + ") insert_method=no;"); try { FileUtils.writeStringToFile(new File("test.sql"), sb.toString(), "utf-8", true); } catch (IOException e) { e.printStackTrace(); } } // @Test public void test4() throws IOException { DetachedCriteria criteria = DetachedCriteria.forClass(DataModel.class); List dataEntities = (List) baseDao1.findByCriteria(criteria, 10, 10); for (DataModel dataEntity : dataEntities) { log.info(dataEntity.getCid()); } // 查询总条数 Long count = baseDao1.executeWithNativeSession((Session session) -> (Long) DetachedCriteria.forClass(DataModel.class).setProjection(Projections.rowCount()).setProjection(Projections.groupProperty("groupId")).getExecutableCriteria(session).uniqueResult()); } }