【myblog】1.为自己写的blog

来源:互联网 发布:北京语言大学网络 编辑:程序博客网 时间:2024/05/04 05:04

在工作之后,自己的想法也有了很大的变化,比如,学android,做blog,微信开发等等,但这些事情还是一步步的实现为好,不然就和我以前一样,想了一遍之后就放着了,所以,为了记录我的目标达成的过程,这里我将一步步的实现我的第一个想法,自己写的blog。每一个阶段,我都将自己在开发过程中遇到的问题,和解决的问题记录在这里,和大家交流,提高自己的能力。

我工作之后就一直用的java,也没有学php,也没有接触类似CMS的系统,现在用java写起来感觉怪怪的,不过一步步的来。

对于项目的架构,我打算用ssh,本来打算用springmvc+iBATIS的,后来考虑到hibernate好久没有用了,就拿来当做复习,然后页面前端的话用的是easyui(也是边学边用),数据库用的mysql 服务器tomcat6,后来又买了一个域名,目前正在备案,又买了一个云主机,一旦备案完成,就一步步的迁移到云主机上面部署。

对于blog的结构,我在自己思考一下,做了一个简单的物理模型和功能结构图:


不是很专业,不过也能够理解。

为了能够简化开发的重复性工作,自己通过制定表结构的字段等规范,然后通过工具类,根据sql文件自动生成dao,service,domain,等相关代码。


自动生成的util工具类:

public void gen() throws Exception {/*******************加载数据库对应类型*************************/Map<String,String> type= new HashMap<String, String>();type.put("varchar","java.lang.String");type.put("int","int");type.put("float","float");type.put("timestamp","java.util.Date");type.put("datetime","java.util.Date");type.put("bit","boolean");//存放类名和所有字段类型集合Map<String, Map<String,String>> domain = new HashMap<String, Map<String,String>>();//字段以及类型Map<String, String> fieldType=null;/*******************加载数据库对应类型*************************/File file = new File("sql/myblog.sql");FileWriter writer = null;//List<String> list = null ;String str=null;BufferedReader reader = new BufferedReader(new FileReader(file));String line;//没有开始读表boolean flag=false;//标记是否生成主键<id name="textID" type="string" column="textID"><generator class="uuid"></generator></id>boolean flagkey=false;File file2 = new File("src/com/fairyt/myblog/domain/");if(!file2.exists())file2.mkdirs();while((line=reader.readLine())!=null){//开始读表了if(flag){//如果SQL语句结束if(line.toCharArray()[0]==')'){writer.write("</class>\n");writer.write("</hibernate-mapping>");writer.close();//初始化标记重新读表flag=false;domain.put(str, fieldType);}else{if(line.trim().toCharArray()[0]=='`'){//开始建立类的属性//获取的字段名String field=line.split("`")[1].split("_")[1].toLowerCase();String ftype=line.split("`")[2].split(" ")[1].split("\\(")[0];fieldType.put(field, type.get(ftype));//如果主键ID没有设置if(!flagkey){writer.write("<id name='"+field+"' type='"+type.get(ftype)+"' column='"+line.split("`")[1]+"'>\n"+"<generator class='uuid'></generator>\n"+"</id>\n");flagkey=true;}else{if(field.charAt(0)=='c')writer.write("<many-to-one name=\""+field.substring(1)+"\" column=\""+field.substring(1)+"_id\"/>\n");//else if(field.charAt(0)=='L'){//writer.write("<set name=\""+field+"\" cascade=\"all\" outer-join=\"true\">\n");//writer.write("<key column=\"demoid\" not-null=\"false\"></key>\n");//writer.write("<one-to-many class=\"com.fairyt.myblog.demo.domain.DemoSet\"/>\n");//writer.write("</set>\n");////}elsewriter.write("<property name='"+field+"' type='"+type.get(ftype)+"' column='"+line.split("`")[1]+"'></property>\n");}}}}else{//如果开始创建表if(line.contains("CREATE TABLE")){String[] strs=line.split("`");String[] strs1=strs[1].split("_");char c=Character.toUpperCase(strs1[1].charAt(0));str=strs1[1].replaceFirst(String.valueOf(strs1[1].charAt(0)),String.valueOf(c));writer= new FileWriter("src/com/fairyt/myblog/domain/"+str+".hbm.xml");writer.write("<?xml version='1.0' encoding='UTF-8'?>\n"+"<!DOCTYPE hibernate-mapping PUBLIC \n"+    "'-//Hibernate/Hibernate Mapping DTD 3.0//EN'\n"+    "'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>\n"+"<hibernate-mapping>\n");writer.write("<class name='com.fairyt.myblog.domain."+str+"' table='"+strs[1]+"'>\n");fieldType = new HashMap<String, String>();flagkey=false;flag=true;}}}reader.close();for(Map.Entry<String, Map<String, String>> maps:domain.entrySet()){writer = new FileWriter("src/com/fairyt/myblog/domain/"+maps.getKey()+".java");/****导包****************************/writer.write("package com.fairyt.myblog.domain;\n");writer.write("import java.io.Serializable;\n");writer.write("public class "+maps.getKey()+" implements Serializable{");for(Map.Entry<String, String> map : maps.getValue().entrySet()){/****字段的定义声明****************************///如果是类的类型if(map.getKey().charAt(0)=='c'){writer.write("private com.fairyt.myblog.domain."+map.getKey().substring(1).replaceFirst(String.valueOf(map.getKey().charAt(1)),String.valueOf(Character.toUpperCase(map.getKey().charAt(1))))+" "+map.getKey().substring(1)+";");writer.write("\n");/****set方法****************************/writer.write("public void set"+map.getKey().replaceFirst(String.valueOf(map.getKey().charAt(1)),String.valueOf(Character.toUpperCase(map.getKey().charAt(1)))).substring(1)+"(com.fairyt.myblog.domain."+map.getKey().substring(1).replaceFirst(String.valueOf(map.getKey().charAt(1)),String.valueOf(Character.toUpperCase(map.getKey().charAt(1))))+" "+map.getKey().substring(1)+"){\n" +"this."+map.getKey().substring(1)+"="+map.getKey().substring(1)+";\n"+"}\n");/****get方法****************************/writer.write("public com.fairyt.myblog.domain."+map.getKey().substring(1).replaceFirst(String.valueOf(map.getKey().charAt(1)),String.valueOf(Character.toUpperCase(map.getKey().charAt(1))))+" get"+map.getKey().substring(1).replaceFirst(String.valueOf(map.getKey().charAt(1)),String.valueOf(Character.toUpperCase(map.getKey().charAt(1))))+"(){\n" +"return "+map.getKey().substring(1)+";\n"+"}\n");}else{writer.write("private "+map.getValue()+" "+map.getKey()+";");writer.write("\n");/****set方法****************************/writer.write("public void set"+map.getKey().replaceFirst(String.valueOf(map.getKey().charAt(0)),String.valueOf(Character.toUpperCase(map.getKey().charAt(0))))+"("+map.getValue()+" "+map.getKey()+"){\n" +"this."+map.getKey()+"="+map.getKey()+";\n"+"}\n");/****get方法****************************/writer.write("public "+map.getValue()+" get"+map.getKey().replaceFirst(String.valueOf(map.getKey().charAt(0)),String.valueOf(Character.toUpperCase(map.getKey().charAt(0))))+"(){\n" +"return "+map.getKey()+";\n"+"}\n");}}writer.write("}");writer.close();/*******************生成Dao*************************/writer = new FileWriter("src/com/fairyt/myblog/dao/I"+maps.getKey()+"Dao.java");writer.write("package com.fairyt.myblog.dao;\n"+"import com.fairyt.myblog.domain."+maps.getKey()+";\n"+"public interface I"+maps.getKey()+"Dao extends ICommonDao<"+maps.getKey()+"> {\n"+"public static final String SERVICE_NAME ="+Character.toString('"')+"com.fairyt.myblog.dao.impl."+maps.getKey()+"DaoImpl"+Character.toString('"')+";\n"+"}\n");writer.close();/*******************生成DaoImpl*************************/writer = new FileWriter("src/com/fairyt/myblog/dao/impl/"+maps.getKey()+"DaoImpl.java");writer.write("package com.fairyt.myblog.dao.impl;\n"+"import org.springframework.stereotype.Repository;\n"+"import com.fairyt.myblog.dao.I"+maps.getKey()+"Dao;\n"+"import com.fairyt.myblog.domain."+maps.getKey()+";\n"+"@Repository(I"+maps.getKey()+"Dao.SERVICE_NAME)\n"+"public class "+maps.getKey()+"DaoImpl extends CommonDaoImpl<"+maps.getKey()+"> implements I"+maps.getKey()+"Dao {\n"+"}\n");writer.close();/*******************生成Service*************************/writer = new FileWriter("src/com/fairyt/myblog/service/I"+maps.getKey()+"Service.java");writer.write("package com.fairyt.myblog.service;\n"+"import java.util.List;\n"+"import com.fairyt.myblog.domain."+maps.getKey()+";\n"+"public interface I"+maps.getKey()+"Service {\n"+"public static final String SERVICE_NAME =\"com.fairyt.myblog.service.impl."+maps.getKey()+"ServiceImpl\";\n"+"void save"+maps.getKey()+"("+maps.getKey()+" entity);\n"+"   List<"+maps.getKey()+"> findAll();\n"+"}\n");writer.close();/*******************生成ServiceImpl*************************/writer = new FileWriter("src/com/fairyt/myblog/service/impl/"+maps.getKey()+"ServiceImpl.java");writer.write("package com.fairyt.myblog.service.impl;\n"+"import java.util.List;\n"+"import javax.annotation.Resource;\n"+"import org.springframework.stereotype.Service;\n"+"import org.springframework.transaction.annotation.Isolation;\n"+"import org.springframework.transaction.annotation.Propagation;\n"+"import org.springframework.transaction.annotation.Transactional;\n"+"import com.fairyt.myblog.dao.I"+maps.getKey()+"Dao;\n"+"import com.fairyt.myblog.domain."+maps.getKey()+";\n"+"import com.fairyt.myblog.service.I"+maps.getKey()+"Service;\n"+"@Service(I"+maps.getKey()+"Service.SERVICE_NAME)\n"+"@Transactional(readOnly=true)\n"+"public class "+maps.getKey()+"ServiceImpl implements I"+maps.getKey()+"Service {\n"+"    @Resource(name=I"+maps.getKey()+"Dao.SERVICE_NAME)\n"+"    private I"+maps.getKey()+"Dao dao;\n"+"@Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED,readOnly=false)\n"+"public void save"+maps.getKey()+"("+maps.getKey()+" entity) {\n"+"dao.save(entity);\n"+"}\n"+"   public List<"+maps.getKey()+"> findAll() {\n"+"return dao.findCollectionByConditionNoPage(\"\", null, null);\n"+"}\n"+"}\n");writer.close();}}}

在有sql文件之后,直接运行这个,然后项目中各个层都自动生成了。

在ssh环境搭建完成,测试无误之后,下面就可以进行功能模块的开发了。



0 0