zoukankan      html  css  js  c++  java
  • Lucene4.5.1之添加索引、更新索引、删除索引、查找数据

      写这篇文章的原因是我把几个东西合起来了,记录一下学习的脚步.

      主要做了这么一件事

           使用jpa2.0作为规范,eclipselink2.4作为实现 ,myeclipse2013作为工具映射oracle11g的表为实体(使用jpa反向工程自动生成相应实体的dao与interface,还有EntityManager的工具类)   

          使用poi读取word中的内容存放到lucene的索引库中

        最后

       1.添加索引
       2.更新索引----lucene的更新实际上 是先将索引删掉 然后重新添加索引 所以这里要注意一点 如果你的索引项不需要修改的话 不要将不需要修改的索引项传递到修改方法里面 不然          会造成未修改的索引项有多个
       3.删除索引
       4.根据条件,查找记录


    详细步骤就不写了,代码里面都有注释:

      结构图:



      测试主函数: TestMain.java

    /**
     * 
     */
    package com.undergrowth.lucene.test;
    
    import java.sql.Timestamp;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.document.Field;
    import org.apache.lucene.document.TextField;
    import org.apache.lucene.index.Term;
    import org.apache.lucene.search.TermQuery;
    
    
    import com.undergrowth.bean.StuInf;
    import com.undergrowth.bean.StuInfDAO;
    import com.undergrowth.lucene.index.method.IndexAdd;
    import com.undergrowth.lucene.index.method.IndexDelete;
    import com.undergrowth.lucene.index.method.IndexUpdate;
    import com.undergrowth.lucene.search.SearchUtils;
    import com.undergrowth.utils.EntityManagerHelper;
    
    /**
     * @author u1
     *
     */
    public class TestMain {
    
    	/**该测试代码主要做这么几件事
    	 * 使用jpa2.0作为规范,eclipselink2.4作为实现 ,myeclipse2013作为工具映射oracle11g的表为实体(使用jpa反向工程自动生成相应实体的dao与interface,还有EntityManager的工具类)
    	 * 使用poi读取word中的内容存放到lucene的索引库中
    	 * 最后
    	 * 1.添加索引
    	 * 2.更新索引----lucene的更新实际上 是先将索引删掉 然后重新添加索引 所以这里要注意一点 如果你的索引项不需要修改的话 不要将不需要修改的索引项传递到修改方法里面 不然会造成未修改的索引项有多个
    	 * 3.删除索引
    	 * 4.根据条件,查找记录
    	 * @param args
    	 */
    	public static Logger logger=LogManager.getLogger(TestMain.class);
    	
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		StuInfDAO entityDao=new StuInfDAO();
    		List<StuInf> entityList=entityDao.findAll();
    		disRecord(entityList);
    		//删除掉已存在的所有索引
    		IndexDelete.deleteIndexAll();
    		//讲查询出来的记录添加到索引中
    		IndexAdd.addIndex(entityList);
    		//查询记录
    		TermQuery query=new TermQuery(new Term("content", "搜索引擎"));
    		//TermQuery query=new TermQuery(new Term("path", "lucene"));
    		List<Document> resultList=SearchUtils.search(query,10);
    		disResultRecord(resultList);
    		
    		//更新数据源
    	    EntityManagerHelper.beginTransaction();
    	    for (StuInf entity : entityList) {
    	    	entity.setBirthday(new Timestamp(new Date().getTime()));
    			entityDao.update(entity);
    		}
    	    EntityManagerHelper.commit();
    	    //清除结果集
    	    resultList.clear();
    	    //重新装载结果集
    	    for (StuInf stuInf : entityList) {
    			Document document=new Document();
    			document.add(new TextField("id", stuInf.getId(),Field.Store.YES));
    			document.add(new TextField("birthday", stuInf.getBirthday().toString(),Field.Store.YES));
    			document.add(new TextField("path",stuInf.getDescriptPath(),Field.Store.YES));
    			document.add(new TextField("content",EntityManagerHelper.getDescriptContent(stuInf.getDescriptPath()),Field.Store.YES));
    			resultList.add(document);
    		}
    	  //更新索引
    		IndexUpdate.updateIndex(new Term("content", "搜索引擎"),resultList);
    	  //再次搜索
    		TermQuery queryUpdate=new TermQuery(new Term("content", "搜索引擎"));
    		resultList=SearchUtils.search(queryUpdate,10);
    		disResultRecord(resultList);
    		//显示未更新的索引的记录
    		queryUpdate=new TermQuery(new Term("content", "甲骨文"));
    		resultList=SearchUtils.search(queryUpdate,10);
    		disResultRecord(resultList);
    	}
    
    	//显示结果集
    	private static void disResultRecord(List<Document> resultList) {
    		// TODO Auto-generated method stub
    		logger.error("开始显示结果!!");
    		for (Document doc : resultList) {
    			/*System.out.println(stuInf);*/
    			logger.error("
    日期:"+doc.get("birthday")+"
    描述信息为:"+doc.get("content"));
    		}
    	}
    
    	//显示查询的记录
    	private static void disRecord(List<StuInf> entityList) {
    		for (StuInf stuInf : entityList) {
    			/*System.out.println(stuInf);*/
    			logger.debug(stuInf);
    		}
    	}
    
    }
    

    索引删除 IndexDelete.java

    package com.undergrowth.lucene.index.method;
    
    import java.io.IOException;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.lucene.index.IndexWriter;
    import com.undergrowth.lucene.index.utils.IndexUtils;
    
    public class IndexDelete {
    
    	private static Logger logger=LogManager.getLogger();
    	
    	//删除索引
    	public static void deleteIndexAll() {
    		// TODO Auto-generated method stub
    		IndexWriter writer=IndexUtils.getIndexWrite();
    		try {
    			//删除所有索引项
    			writer.deleteAll();
    			writer.close();
    			logger.info("成功删除索引文件");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    
    }
    

    索引添加 IndexAdd.java

    /**
     * 
     */
    package com.undergrowth.lucene.index.method;
    
    
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.document.Field;
    import org.apache.lucene.document.TextField;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.index.IndexWriterConfig;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.lucene.util.Version;
    
    import com.undergrowth.bean.StuInf;
    import com.undergrowth.lucene.index.utils.IndexUtils;
    import com.undergrowth.utils.EntityManagerHelper;
    
    /**
     * @author u1
     *
     */
    public class IndexAdd {
    
    	private static Logger logger=LogManager.getLogger(IndexAdd.class);
    	
    	//添加索引
    	public static void addIndex(List<StuInf> entityList) {
    		// TODO Auto-generated method stub
    		IndexWriter writer=null;
    		try {
    			writer=IndexUtils.getIndexWrite();
    			for (StuInf stuInf : entityList) {
    				Document document=new Document();
    				document.add(new TextField("id", stuInf.getId(),Field.Store.YES));
    				document.add(new TextField("birthday", stuInf.getBirthday().toString(),Field.Store.YES));
    				document.add(new TextField("path",stuInf.getDescriptPath(),Field.Store.YES));
    				document.add(new TextField("content",EntityManagerHelper.getDescriptContent(stuInf.getDescriptPath()),Field.Store.YES));
    				//添加索引项
    				writer.addDocument(document);
    			}
    			//提交索引 关闭所有关联文件
    			writer.close();
    			logger.info("添加了"+entityList.size()+"个索引");
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    
    	
    	
    	
    }
    


    查询工具 SearchUtils.java

    /**
     * 
     */
    package com.undergrowth.lucene.search;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.lucene.document.Document;
    import org.apache.lucene.index.DirectoryReader;
    import org.apache.lucene.index.IndexReader;
    import org.apache.lucene.search.IndexSearcher;
    import org.apache.lucene.search.ScoreDoc;
    import org.apache.lucene.search.TermQuery;
    import org.apache.lucene.search.TopDocs;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    
    import com.undergrowth.lucene.index.method.IndexAdd;
    import com.undergrowth.lucene.index.utils.IndexUtils;
    
    /**
     * @author u1
     *
     */
    public class SearchUtils {
    
    	private static Logger logger=LogManager.getLogger(SearchUtils.class);
    	
    	//根据查询条件 返回结果集
    	public static List<Document> search(TermQuery query,int n) {
    		// TODO Auto-generated method stub
    		
    		List<Document> list=new ArrayList<Document>();
    		Directory directory=IndexUtils.getLuceneIndexPath();
    		try {
    			IndexReader reader=DirectoryReader.open(directory);
    			IndexSearcher searcher=new IndexSearcher(reader);
    			TopDocs docs=searcher.search(query, n);
    			logger.info("找到了"+docs.totalHits+"个元素");
    			ScoreDoc[] scoreDocs=docs.scoreDocs;
    			for (ScoreDoc scoreDoc : scoreDocs) {
    				Document document=searcher.doc(scoreDoc.doc);
    				list.add(document);
    			}
    			reader.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return list;
    	}
    
    	
    }
    

    索引更新 IndexUpdate.java

    package com.undergrowth.lucene.index.method;
    
    import java.io.IOException;
    import java.util.List;
    
    import org.apache.lucene.document.Document;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.index.Term;
    import org.apache.lucene.search.TermQuery;
    import org.apache.lucene.store.Directory;
    
    import com.undergrowth.lucene.index.utils.IndexUtils;
    
    public class IndexUpdate {
    
    	//更新索引
    	public static void updateIndex(Term term,List<Document> resultList) {
    		// TODO Auto-generated method stub
    		IndexWriter writer=IndexUtils.getIndexWrite();
    		
    		try {
    			writer.updateDocuments(term, resultList);
    			writer.close();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    
    	
    	
    
    }
    

    索引工具 IndexUtils.java

    package com.undergrowth.lucene.index.utils;
    
    import java.io.File;
    import java.io.IOException;
    
    import org.apache.lucene.analysis.Analyzer;
    import org.apache.lucene.analysis.cn.smart.SmartChineseAnalyzer;
    import org.apache.lucene.analysis.standard.StandardAnalyzer;
    import org.apache.lucene.index.IndexWriter;
    import org.apache.lucene.index.IndexWriterConfig;
    import org.apache.lucene.store.Directory;
    import org.apache.lucene.store.FSDirectory;
    import org.apache.lucene.util.Version;
    
    import com.undergrowth.utils.EntityManagerHelper;
    
    public class IndexUtils {
    	
    	public static Directory getLuceneIndexPath(){
    		//获取索引的文件路径
    		File path=new File(EntityManagerHelper.getProperty("luceneIndex"));
    		//判断文件是否存在 不存在 则创建
    		if(!path.exists()) path.mkdirs();
    		Directory dictory=null;
    		try {
    			
    			dictory = FSDirectory.open(path);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return dictory;
    	}
    
       //获取索引写对象
    	public static IndexWriter getIndexWrite() {
    		IndexWriter writer=null;
    		Directory directory=getLuceneIndexPath();
    		SmartChineseAnalyzer analyzer=new SmartChineseAnalyzer(Version.LUCENE_45);
    		//Analyzer analyzer=new StandardAnalyzer(Version.LUCENE_45);
    		IndexWriterConfig config=new IndexWriterConfig(Version.LUCENE_45, analyzer);
    		try {
    			writer=new IndexWriter(directory, config);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return writer;
    	}
    	
    	
    }
    


    实体管理器帮助类  EntityManagerHelper.java

    package com.undergrowth.utils;
    
    
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    import javax.persistence.EntityManager;
    import javax.persistence.EntityManagerFactory;
    import javax.persistence.Persistence;
    import javax.persistence.Query;
    
    import org.apache.logging.log4j.Level;
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.apache.poi.hwpf.HWPFDocument;
    /**
     * @author MyEclipse Persistence Tools
     */
    public class EntityManagerHelper {
    	
    	private static final EntityManagerFactory emf; 
    	private static final ThreadLocal<EntityManager> threadLocal;
    	private static final Logger logger;
    	
    	static {
    		emf = Persistence.createEntityManagerFactory("Lucene4.5.1"); 		
    		threadLocal = new ThreadLocal<EntityManager>();
    		logger = LogManager.getLogger(EntityManagerHelper.class);
    	}
    		
    	public static EntityManager getEntityManager() {
    		EntityManager manager = threadLocal.get();		
    		if (manager == null || !manager.isOpen()) {
    			manager = emf.createEntityManager();
    			threadLocal.set(manager);
    		}
    		return manager;
    	}
    	
    	 public static void closeEntityManager() {
            EntityManager em = threadLocal.get();
            threadLocal.set(null);
            if (em != null) em.close();
        }
        
        public static void beginTransaction() {
        	getEntityManager().getTransaction().begin();
        }
        
        public static void commit() {
        	getEntityManager().getTransaction().commit();
        }  
        
        public static void rollback() {
        	getEntityManager().getTransaction().rollback();
        } 
        
        public static Query createQuery(String query) {
    		return getEntityManager().createQuery(query);
    	}
    	
    	public static void log(String info, Level level, Throwable ex) {
        	logger.log(level, info, ex);
        }
        
    	//获取配置文件路径
    	public static String getProperty(String key)
    	{
    		String value="";
    		InputStream is=EntityManagerHelper.class.getClassLoader().getResourceAsStream("config.properties");
    		Properties properties=new Properties();
    		try {
    			properties.load(is);
    			value=properties.getProperty(key);
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return value;
    	}
    
    	//根据路径 获取word中的内容
    	public static String getDescriptContent(String descriptPath) {
    		// TODO Auto-generated method stub
    		String content="";
    		InputStream is=null;
    		try {
    			is = new FileInputStream(descriptPath);
    			HWPFDocument document=new HWPFDocument(is);
    			content=document.getDocumentText();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally{
    			try {
    				if(is!=null) is.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    		
    		return content;
    	}
    }
    

    StuInf.java文件

    package com.undergrowth.bean;
    
    import java.sql.Timestamp;
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    /**
     * StuInf entity. @author MyEclipse Persistence Tools
     */
    @Entity
    @Table(name = "STU_INF", schema = "UNDER")
    public class StuInf implements java.io.Serializable {
    
    	// Fields
    
    	private String id;
    	private Timestamp birthday;
    	private String descriptPath;
    
    	// Constructors
    
    	/** default constructor */
    	public StuInf() {
    	}
    
    	/** minimal constructor */
    	public StuInf(String id) {
    		this.id = id;
    	}
    
    	/** full constructor */
    	public StuInf(String id, Timestamp birthday, String descriptPath) {
    		this.id = id;
    		this.birthday = birthday;
    		this.descriptPath = descriptPath;
    	}
    
    	// Property accessors
    	@Id
    	@Column(name = "ID", unique = true, nullable = false, length = 50)
    	public String getId() {
    		return this.id;
    	}
    
    	public void setId(String id) {
    		this.id = id;
    	}
    
    	@Column(name = "BIRTHDAY", length = 7)
    	public Timestamp getBirthday() {
    		return this.birthday;
    	}
    
    	public void setBirthday(Timestamp birthday) {
    		this.birthday = birthday;
    	}
    
    	@Column(name = "DESCRIPT_PATH", length = 50)
    	public String getDescriptPath() {
    		return this.descriptPath;
    	}
    
    	public void setDescriptPath(String descriptPath) {
    		this.descriptPath = descriptPath;
    	}
    
    	@Override
    	public String toString() {
    		return "StuInf [id=" + id + ", birthday=" + birthday
    				+ ", descriptPath=" + descriptPath + "]";
    	}
    
    	
    	
    }

    StuInfDao.java

    package com.undergrowth.bean;
    
    import java.sql.Timestamp;
    import java.util.List;
    import javax.persistence.EntityManager;
    import javax.persistence.Query;
    
    import org.apache.logging.log4j.Level;
    
    import com.undergrowth.utils.EntityManagerHelper;
    
    /**
     * A data access object (DAO) providing persistence and search support for
     * StuInf entities. Transaction control of the save(), update() and delete()
     * operations must be handled externally by senders of these methods or must be
     * manually added to each of these methods for data to be persisted to the JPA
     * datastore.
     * 
     * @see com.undergrowth.bean.StuInf
     * @author MyEclipse Persistence Tools
     */
    public class StuInfDAO implements IStuInfDAO {
    	// property constants
    	public static final String DESCRIPT_PATH = "descriptPath";
    
    	private EntityManager getEntityManager() {
    		return EntityManagerHelper.getEntityManager();
    	}
    
    	/**
    	 * Perform an initial save of a previously unsaved StuInf entity. All
    	 * subsequent persist actions of this entity should use the #update()
    	 * method. This operation must be performed within the a database
    	 * transaction context for the entity's data to be permanently saved to the
    	 * persistence store, i.e., database. This method uses the
    	 * {@link javax.persistence.EntityManager#persist(Object)
    	 * EntityManager#persist} operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * StuInfDAO.save(entity);
    	 * EntityManagerHelper.commit();
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to persist
    	 * @throws RuntimeException
    	 *             when the operation fails
    	 */
    	public void save(StuInf entity) {
    		EntityManagerHelper.log("saving StuInf instance", Level.INFO, null);
    		try {
    			getEntityManager().persist(entity);
    			EntityManagerHelper.log("save successful", Level.INFO, null);
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("save failed", Level.INFO, re);
    			throw re;
    		}
    	}
    
    	/**
    	 * Delete a persistent StuInf entity. This operation must be performed
    	 * within the a database transaction context for the entity's data to be
    	 * permanently deleted from the persistence store, i.e., database. This
    	 * method uses the {@link javax.persistence.EntityManager#remove(Object)
    	 * EntityManager#delete} operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * StuInfDAO.delete(entity);
    	 * EntityManagerHelper.commit();
    	 * entity = null;
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to delete
    	 * @throws RuntimeException
    	 *             when the operation fails
    	 */
    	public void delete(StuInf entity) {
    		EntityManagerHelper.log("deleting StuInf instance", Level.INFO, null);
    		try {
    			entity = getEntityManager().getReference(StuInf.class,
    					entity.getId());
    			getEntityManager().remove(entity);
    			EntityManagerHelper.log("delete successful", Level.INFO, null);
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("delete failed", Level.INFO, re);
    			throw re;
    		}
    	}
    
    	/**
    	 * Persist a previously saved StuInf entity and return it or a copy of it to
    	 * the sender. A copy of the StuInf entity parameter is returned when the
    	 * JPA persistence mechanism has not previously been tracking the updated
    	 * entity. This operation must be performed within the a database
    	 * transaction context for the entity's data to be permanently saved to the
    	 * persistence store, i.e., database. This method uses the
    	 * {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
    	 * operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * entity = StuInfDAO.update(entity);
    	 * EntityManagerHelper.commit();
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to update
    	 * @return StuInf the persisted StuInf entity instance, may not be the same
    	 * @throws RuntimeException
    	 *             if the operation fails
    	 */
    	public StuInf update(StuInf entity) {
    		EntityManagerHelper.log("updating StuInf instance", Level.INFO, null);
    		try {
    			StuInf result = getEntityManager().merge(entity);
    			EntityManagerHelper.log("update successful", Level.INFO, null);
    			return result;
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("update failed", Level.INFO, re);
    			throw re;
    		}
    	}
    
    	public StuInf findById(String id) {
    		EntityManagerHelper.log("finding StuInf instance with id: " + id,
    				Level.INFO, null);
    		try {
    			StuInf instance = getEntityManager().find(StuInf.class, id);
    			return instance;
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("find failed", Level.INFO, re);
    			throw re;
    		}
    	}
    
    	/**
    	 * Find all StuInf entities with a specific property value.
    	 * 
    	 * @param propertyName
    	 *            the name of the StuInf property to query
    	 * @param value
    	 *            the property value to match
    	 * @param rowStartIdxAndCount
    	 *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    	 *            row index in the query result-set to begin collecting the
    	 *            results. rowStartIdxAndCount[1] specifies the the maximum
    	 *            number of results to return.
    	 * @return List<StuInf> found by query
    	 */
    	@SuppressWarnings("unchecked")
    	public List<StuInf> findByProperty(String propertyName, final Object value,
    			final int... rowStartIdxAndCount) {
    		EntityManagerHelper.log("finding StuInf instance with property: "
    				+ propertyName + ", value: " + value, Level.INFO, null);
    		try {
    			final String queryString = "select model from StuInf model where model."
    					+ propertyName + "= :propertyValue";
    			Query query = getEntityManager().createQuery(queryString);
    			query.setParameter("propertyValue", value);
    			if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
    				int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
    				if (rowStartIdx > 0) {
    					query.setFirstResult(rowStartIdx);
    				}
    
    				if (rowStartIdxAndCount.length > 1) {
    					int rowCount = Math.max(0, rowStartIdxAndCount[1]);
    					if (rowCount > 0) {
    						query.setMaxResults(rowCount);
    					}
    				}
    			}
    			return query.getResultList();
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("find by property name failed",
    					Level.INFO, re);
    			throw re;
    		}
    	}
    
    	public List<StuInf> findByDescriptPath(Object descriptPath,
    			int... rowStartIdxAndCount) {
    		return findByProperty(DESCRIPT_PATH, descriptPath, rowStartIdxAndCount);
    	}
    
    	/**
    	 * Find all StuInf entities.
    	 * 
    	 * @param rowStartIdxAndCount
    	 *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    	 *            row index in the query result-set to begin collecting the
    	 *            results. rowStartIdxAndCount[1] specifies the the maximum
    	 *            count of results to return.
    	 * @return List<StuInf> all StuInf entities
    	 */
    	@SuppressWarnings("unchecked")
    	public List<StuInf> findAll(final int... rowStartIdxAndCount) {
    		EntityManagerHelper.log("finding all StuInf instances", Level.INFO,
    				null);
    		try {
    			final String queryString = "select model from StuInf model";
    			Query query = getEntityManager().createQuery(queryString);
    			if (rowStartIdxAndCount != null && rowStartIdxAndCount.length > 0) {
    				int rowStartIdx = Math.max(0, rowStartIdxAndCount[0]);
    				if (rowStartIdx > 0) {
    					query.setFirstResult(rowStartIdx);
    				}
    
    				if (rowStartIdxAndCount.length > 1) {
    					int rowCount = Math.max(0, rowStartIdxAndCount[1]);
    					if (rowCount > 0) {
    						query.setMaxResults(rowCount);
    					}
    				}
    			}
    			return query.getResultList();
    		} catch (RuntimeException re) {
    			EntityManagerHelper.log("find all failed", Level.INFO, re);
    			throw re;
    		}
    	}
    
    }

    IStuInfDao.java

    package com.undergrowth.bean;
    
    import java.sql.Timestamp;
    import java.util.List;
    
    /**
     * Interface for StuInfDAO.
     * 
     * @author MyEclipse Persistence Tools
     */
    
    public interface IStuInfDAO {
    	/**
    	 * Perform an initial save of a previously unsaved StuInf entity. All
    	 * subsequent persist actions of this entity should use the #update()
    	 * method. This operation must be performed within the a database
    	 * transaction context for the entity's data to be permanently saved to the
    	 * persistence store, i.e., database. This method uses the
    	 * {@link javax.persistence.EntityManager#persist(Object)
    	 * EntityManager#persist} operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * IStuInfDAO.save(entity);
    	 * EntityManagerHelper.commit();
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to persist
    	 * @throws RuntimeException
    	 *             when the operation fails
    	 */
    	public void save(StuInf entity);
    
    	/**
    	 * Delete a persistent StuInf entity. This operation must be performed
    	 * within the a database transaction context for the entity's data to be
    	 * permanently deleted from the persistence store, i.e., database. This
    	 * method uses the {@link javax.persistence.EntityManager#remove(Object)
    	 * EntityManager#delete} operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * IStuInfDAO.delete(entity);
    	 * EntityManagerHelper.commit();
    	 * entity = null;
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to delete
    	 * @throws RuntimeException
    	 *             when the operation fails
    	 */
    	public void delete(StuInf entity);
    
    	/**
    	 * Persist a previously saved StuInf entity and return it or a copy of it to
    	 * the sender. A copy of the StuInf entity parameter is returned when the
    	 * JPA persistence mechanism has not previously been tracking the updated
    	 * entity. This operation must be performed within the a database
    	 * transaction context for the entity's data to be permanently saved to the
    	 * persistence store, i.e., database. This method uses the
    	 * {@link javax.persistence.EntityManager#merge(Object) EntityManager#merge}
    	 * operation.
    	 * 
    	 * <pre>
    	 * EntityManagerHelper.beginTransaction();
    	 * entity = IStuInfDAO.update(entity);
    	 * EntityManagerHelper.commit();
    	 * </pre>
    	 * 
    	 * @param entity
    	 *            StuInf entity to update
    	 * @return StuInf the persisted StuInf entity instance, may not be the same
    	 * @throws RuntimeException
    	 *             if the operation fails
    	 */
    	public StuInf update(StuInf entity);
    
    	public StuInf findById(String id);
    
    	/**
    	 * Find all StuInf entities with a specific property value.
    	 * 
    	 * @param propertyName
    	 *            the name of the StuInf property to query
    	 * @param value
    	 *            the property value to match
    	 * @param rowStartIdxAndCount
    	 *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    	 *            row index in the query result-set to begin collecting the
    	 *            results. rowStartIdxAndCount[1] specifies the the maximum
    	 *            count of results to return.
    	 * @return List<StuInf> found by query
    	 */
    	public List<StuInf> findByProperty(String propertyName, Object value,
    			int... rowStartIdxAndCount);
    
    	public List<StuInf> findByDescriptPath(Object descriptPath,
    			int... rowStartIdxAndCount);
    
    	/**
    	 * Find all StuInf entities.
    	 * 
    	 * @param rowStartIdxAndCount
    	 *            Optional int varargs. rowStartIdxAndCount[0] specifies the the
    	 *            row index in the query result-set to begin collecting the
    	 *            results. rowStartIdxAndCount[1] specifies the the maximum
    	 *            count of results to return.
    	 * @return List<StuInf> all StuInf entities
    	 */
    	public List<StuInf> findAll(int... rowStartIdxAndCount);
    }

    log4的配置文件log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
    
    <Configuration status="off" name="test">  
        <!-- 添加输出源 -->  
        <Appenders>  
            <!-- 添加控制台输出源  
            PatternLayout用于格式化日志文本 并输出到指定的输出源    
             -->  
            <Console name="out" target="SYSTEM_OUT">  
                <PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5p: %m%n"></PatternLayout>  
            </Console>  
        </Appenders>  
        <!-- 添加记录器 -->  
        <Loggers>  
            <!-- 配置根记录器 如果不设置的话  level为error appender为控制台 -->  
            <root level="trace">  
                <AppenderRef ref="out" />  
            </root>  
        </Loggers>  
    </Configuration>  
    


    控制台结果集:

    2013-十二月-08 21:23:37 [main] INFO : finding all StuInf instances
    [EL Info]: 2013-12-08 21:23:39.112--ServerSession(61130164)--EclipseLink, version: Eclipse Persistence Services - 2.4.2.v20130514-5956486
    [EL Info]: connection: 2013-12-08 21:23:39.82--ServerSession(61130164)--file:/E:/learnsoftware/java/AndroidDevelop/myeclipse_2013_code/Lucene4.5.1/bin/_Lucene4.5.1 login successful
    2013-十二月-08 21:23:40 [main] DEBUG: StuInf [id=9978F96DCAE447E59E7772D978E544F9, birthday=2013-12-08 21:12:56.0, descriptPath=E:lucenedocoracle.doc]
    2013-十二月-08 21:23:40 [main] DEBUG: StuInf [id=7FA82B9F2C4F4163AAEAB74EB3E2E79C, birthday=2013-12-08 21:12:56.0, descriptPath=E:lucenedocgoogle.doc]
    2013-十二月-08 21:23:40 [main] DEBUG: StuInf [id=BA272904CA1A4ED1816965AB93424312, birthday=2013-12-08 21:12:56.0, descriptPath=E:lucenedocaidu.doc]
    2013-十二月-08 21:23:40 [main] INFO : 成功删除索引文件
    2013-十二月-08 21:23:42 [main] INFO : 添加了3个索引
    2013-十二月-08 21:23:42 [main] INFO : 找到了2个元素
    2013-十二月-08 21:23:42 [main] ERROR: 开始显示结果!!
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:12:56.0
    描述信息为:百度(Nasdaq简称:BIDU)是全球最大的中文搜索引擎,2000年1月由李彦宏、徐勇两人创立于北京中关村,
    致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案?元夕》词句“众里寻他千百度”,
    象征着百度对中文信息检索技术的执著追求。
    
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:12:56.0
    描述信息为:谷歌公司(英语:Google Inc.,NASDAQ:GOOG、FWB:GGQ1,官方中文译名为谷歌),是一家美国的跨国科技企业,致力于互联网搜索、云计算、广告技术等领域,开发并提供大量基于互联网的产品与服务,其主要利润来自于AdWords等广告服务。 Google由当时在斯坦福大学攻读理工博士的拉里?佩奇和谢尔盖?布卢姆共同创建,因此两人也被称为“Google Guys”。1998年9月4日,Google以私营公司的形式创立,设计并管理一个互联网搜索引擎“Google搜索”;Google网站则于1999年下半年启用。2004年8月19日,Google公司的股票在纳斯达克上市,后来被称为“三驾马车”的公司两位共同创始人与出任首席执行官的埃里克?施密特在当时承诺:共同在Google工作至少二十年,即至2024年止。创始之初,Google官方的公司使命为“集成全球范围的信息,使人人皆可访问并从中受益”(To organize the world's information and make it universally accessible and useful);而非正式的口号则为“不作恶”(Don't be evil),由工程师阿米特?帕特尔(Amit Patel)所创,并得到了保罗?布赫海特的支持。Google公司的总部称为“Googleplex”,位于美国加州圣克拉拉县的芒廷维尤。2011年4月,佩奇接替施密特担任首席执行官。
    
    2013-十二月-08 21:23:42 [main] INFO : updating StuInf instance
    2013-十二月-08 21:23:42 [main] INFO : update successful
    2013-十二月-08 21:23:42 [main] INFO : updating StuInf instance
    2013-十二月-08 21:23:42 [main] INFO : update successful
    2013-十二月-08 21:23:42 [main] INFO : updating StuInf instance
    2013-十二月-08 21:23:42 [main] INFO : update successful
    2013-十二月-08 21:23:42 [main] INFO : 找到了2个元素
    2013-十二月-08 21:23:42 [main] ERROR: 开始显示结果!!
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:23:42.312
    描述信息为:百度(Nasdaq简称:BIDU)是全球最大的中文搜索引擎,2000年1月由李彦宏、徐勇两人创立于北京中关村,
    致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案?元夕》词句“众里寻他千百度”,
    象征着百度对中文信息检索技术的执著追求。
    
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:23:42.312
    描述信息为:谷歌公司(英语:Google Inc.,NASDAQ:GOOG、FWB:GGQ1,官方中文译名为谷歌),是一家美国的跨国科技企业,致力于互联网搜索、云计算、广告技术等领域,开发并提供大量基于互联网的产品与服务,其主要利润来自于AdWords等广告服务。 Google由当时在斯坦福大学攻读理工博士的拉里?佩奇和谢尔盖?布卢姆共同创建,因此两人也被称为“Google Guys”。1998年9月4日,Google以私营公司的形式创立,设计并管理一个互联网搜索引擎“Google搜索”;Google网站则于1999年下半年启用。2004年8月19日,Google公司的股票在纳斯达克上市,后来被称为“三驾马车”的公司两位共同创始人与出任首席执行官的埃里克?施密特在当时承诺:共同在Google工作至少二十年,即至2024年止。创始之初,Google官方的公司使命为“集成全球范围的信息,使人人皆可访问并从中受益”(To organize the world's information and make it universally accessible and useful);而非正式的口号则为“不作恶”(Don't be evil),由工程师阿米特?帕特尔(Amit Patel)所创,并得到了保罗?布赫海特的支持。Google公司的总部称为“Googleplex”,位于美国加州圣克拉拉县的芒廷维尤。2011年4月,佩奇接替施密特担任首席执行官。
    
    2013-十二月-08 21:23:42 [main] INFO : 找到了2个元素
    2013-十二月-08 21:23:42 [main] ERROR: 开始显示结果!!
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:12:56.0
    描述信息为:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。到目前仍在数据库市场上占有主要份额。劳伦斯?埃里森和他的朋友,之前的同事Bob Miner和Ed Oates在1977年建立了软件开发实验室咨询公司(SDL,Software Development Laboratories)。
    
    2013-十二月-08 21:23:42 [main] ERROR: 
    日期:2013-12-08 21:23:42.308
    描述信息为:Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。到目前仍在数据库市场上占有主要份额。劳伦斯?埃里森和他的朋友,之前的同事Bob Miner和Ed Oates在1977年建立了软件开发实验室咨询公司(SDL,Software Development Laboratories)。
    


    oracle 表结构

    --创建学生信息表
    drop table stu_inf;
    create table stu_inf(
           id varchar2(50) default sys_guid(),
           birthday date default sysdate,
           descript_path varchar2(50),
           primary key (id)
    );
     --添加注释
     comment on column stu_inf.id is '默认值为guid,产生一个唯一的标示符';
     comment on column stu_inf.descript_path is '用于存放描述个人信息的word路径';
     
     insert into stu_inf(descript_path) values('E:lucenedocoracle.doc');
      insert into stu_inf(descript_path) values('E:lucenedocgoogle.doc');
       insert into stu_inf(descript_path) values('E:lucenedocaidu.doc');
    



  • 相关阅读:
    python基础
    目标文件格式
    PHP 计算每个月的最后一天
    学习应该专注于学习这件事上
    以 Composer 的方式在 PhpStorm 中添加代码审查工具 Code Sniffer
    开始在博客园写文章啦!
    Git 常用操作
    常用写作格式
    将公司的主要项目从eclipse迁移到android studio for mac环境(1)
    写随笔、博客的心情
  • 原文地址:https://www.cnblogs.com/liangxinzhi/p/4275590.html
Copyright © 2011-2022 走看看