You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
webcrawler/web/src/test/java/SpringTest.java

160 lines
6.1 KiB

import core.dao.BaseDao1;
import core.dao.BaseDao2;
import db.model.CidEntity;
import db.model.DataModel;
import db.model.TaskEntity;
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.metamodel.internal.MetamodelImpl;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.hibernate.tool.schema.TargetType;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.dao.DataAccessException;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
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;
@Resource
private BaseDao2 baseDao2;
@Test
public void factory(){
MetamodelImpl metamodel= (MetamodelImpl) baseDao1.getSessionFactory().getMetamodel();
}
@Test
@Transactional("transactionManager2")
@Rollback(false)
public void test1(){
DataModel dataModel=new DataModel();
dataModel.setCid(333);
TaskEntity taskEntity=new TaskEntity();
taskEntity.setApi("fdsfsdf");
baseDao2.save(dataModel);
}
@Test
@Transactional("transactionManager2")
@Rollback(false)
public void test(){
// for (int id=1;id<10;id++){
int id=103;
DataModel dataModel=baseDao1.get(DataModel.class,id);
CidEntity cidEntity=baseDao1.get(CidEntity.class,id);
if(dataModel!=null&&cidEntity!=null){
dataModel.setTypeId(cidEntity.getTypeid());
try {
log.info(baseDao2.save(dataModel));
}catch (DataAccessException e){
log.error(e);
}
}
// }
}
// @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<Integer> typeid= (List<Integer>) baseDao1.findByCriteria(DetachedCriteria.forClass(CidEntity.class).setProjection(Projections.groupProperty("typeid")));
List<String> 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<DataModel> dataEntities= (List<DataModel>) 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());
}
}