上节课完成了45%的代码生成器,接下来我们来写关于Menu表的controller层、model层
主要任务:完成Menu表的controller层、model层
我们继续自己写代码生成器,来完善我们的代码
- 在vm下建立controller.vm
package com.lf.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.pagehelper.PageInfo;
#if(${modelName}=='menu')
import com.lf.model.${modelClass};
import com.lf.service.${modelClass}Service;
#else
import com.lf.model.${modelClass};
import com.lf.service.${modelClass}Service;
import com.lf.model.Menu;
import com.lf.service.MenuService;
#end
@RequestMapping("/${modelName}")
@Controller
public class ${modelClass}Controller {
#if(${modelName}=='menu')
@Autowired
private MenuService menuService;
#else
@Autowired
private ${modelClass}Service ${modelName}Service;
@Autowired
private MenuService menuService;
#end
@ResponseBody
@RequestMapping("/delete.do")
public boolean delete(Integer id){
try{
${modelName}Service.delete(id);
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}
return true;
}
@ResponseBody
@RequestMapping("/findById.do")
public ${modelClass} findById(Integer id){
return ${modelName}Service.findById(id);
}
@ResponseBody
@RequestMapping("/create.do")
public boolean create(${modelClass} ${modelName}){
try{
${modelName}Service.create(${modelName});
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}
return true;
}
@RequestMapping("/list.do")
public String list(${modelClass} ${modelName},Model model,
@RequestParam(required=true,value="pageNum",defaultValue="1") Integer pageNum,
@RequestParam(required=true,value="pageSize",defaultValue="3") Integer pageSize
){
PageInfo<${modelClass}> ${modelName}s = ${modelName}Service.list(pageNum,pageSize,${modelName});
model.addAttribute("pageInfo", ${modelName}s);
List<Menu> menuList = menuService.list(null);
model.addAttribute("menuList",menuList);
return "${modelName}";
}
@ResponseBody
@RequestMapping("/list.do")
public List<${modelClass}> list(${modelClass} ${modelName},Model model){
return ${modelName}Service.list(${modelName});
}
}
${modelClass}代表User的位置
${modelName}代表user的位置
在userController中添加
如下
List<Menu> menuList = menuService.list(null);
model.addAttribute("menuList",menuList);
同时在controller.vm中添加上面两行
- 在code层中的CodeBuilder.java中添加关于controller的代码
// controller的
Template controllerVm = ve.getTemplate("/WebContent/WEB-INF/vm/controller.vm");
CodeBuilder.merge(controllerVm, ctx, rootPath +"src/com/lf/controller/" + modelClass +"Controller.java");
这时候运行Run As——Java Application会生成相应的MenuController.java
具体如下:
package com.lf.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.github.pagehelper.PageInfo;
import com.lf.model.Menu;
import com.lf.service.MenuService;
@RequestMapping("/menu")
@Controller
public class MenuController {
@Autowired
private MenuService menuService;
@ResponseBody
@RequestMapping("/delete.do")
public boolean delete(Integer id){
try{
menuService.delete(id);
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}
return true;
}
@ResponseBody
@RequestMapping("/findById.do")
public Menu findById(Integer id){
return menuService.findById(id);
}
@ResponseBody
@RequestMapping("/create.do")
public boolean create(Menu menu){
try{
menuService.create(menu);
}catch(Exception e){
System.out.println(e.getMessage());
return false;
}
return true;
}
@RequestMapping("/list.do")
public String list(Menu menu,Model model,
@RequestParam(required=true,value="pageNum",defaultValue="1") Integer pageNum,
@RequestParam(required=true,value="pageSize",defaultValue="3") Integer pageSize
){
PageInfo<Menu> menus = menuService.list(pageNum,pageSize,menu);
model.addAttribute("pageInfo", menus);
List<Menu> menuList = menuService.list(null);
model.addAttribute("menuList",menuList);
return "menu";
}
@ResponseBody
@RequestMapping("/list.do")
public List<Menu> list(Menu menu,Model model){
return menuService.list(menu);
}
}
- 在vm下建立model.vm
package com.lf.model;
public class ${modelClass} {
#foreach(${e} in ${columnList})
private ${e.columnType} ${e.attrName};//${e.columnComment}
#end
#foreach(${e} in ${columnList})
public ${e.columnType} get${e.uperName}() {
return ${e.attrName};
}
public void set${e.uperName}(${e.columnType} ${e.attrName}) {
this.${e.attrName} = ${e.attrName};
}
#end
}
- 在code层建立CodeBean.java
package com.lf.code;
public class CodeBean {
private String columnName;//字段名字
private String columnType;//类型
private String columnComment;//注释
private String attrName;//goodName
private String uperName;//GoodName set/get
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getColumnType() {
return columnType;
}
public void setColumnType(String columnType) {
this.columnType = columnType;
}
public String getColumnComment() {
return columnComment;
}
public void setColumnComment(String columnComment) {
this.columnComment = columnComment;
}
public String getAttrName() {
return attrName;
}
public void setAttrName(String attrName) {
this.attrName = attrName;
}
public String getUperName() {
return uperName;
}
public void setUperName(String uperName) {
this.uperName = uperName;
}
}
- 在codeBuilder.java中添加model的
// model的
// 从数据库查询表的字段:字段名称,字段类型,字段注释 good_name goodName setGoodName
List<CodeBean> list = selectColumn(modelName);
ctx.put("columnList", list);
Template modelVm = ve.getTemplate("/WebContent/WEB-INF/vm/model.vm");
CodeBuilder.merge(modelVm, ctx, rootPath +"src/com/lf/model/" + modelClass +"Model.java");
- jdbc连接数据库——在codeBuilder.java中添加
// jdbc连接数据库
private static List<CodeBean> selectColumn(String modelName) {
List<CodeBean> list = new ArrayList<CodeBean>();
// java.sql这个包里的类
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
// 创建数据库
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shop", "root", "");
// sql语句
String sql = "SELECT t.COLUMN_NAME,t.DATA_TYPE,t.COLUMN_COMMENT "
+ " FROM information_schema.COLUMNS t "
+ " WHERE t.TABLE_NAME = '"+modelName+"' "
+ " AND t.TABLE_SCHEMA = 'shop' ";
// 执行sql语句
ps = conn.prepareStatement(sql);
// 获取查询结果
rs = ps.executeQuery();
// 循环遍历查询结果,塞到columnList里面
while(rs.next()){
CodeBean bean = new CodeBean();
bean.setColumnName(rs.getString(1));
bean.setColumnComment(rs.getString(3));
//类型
String type = rs.getString(2);
if(type.equalsIgnoreCase("varchar") || type.equalsIgnoreCase("varchar2")){//字符串
bean.setColumnType("String");
}else if(type.equalsIgnoreCase("int") || type.equalsIgnoreCase("integer")){//整数
bean.setColumnType("Integer");
}else if(type.equalsIgnoreCase("float")
|| type.equalsIgnoreCase("double")
|| type.equalsIgnoreCase("decimal")){//小数:float double decimal
bean.setColumnType("Double");
}else{
bean.setColumnType("String");
}
//good_name goodName GoodName
bean.setAttrName(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, bean.getColumnName()));
bean.setUperName(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, bean.getColumnName()));
list.add(bean);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
rs.close();
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
对于数据库的menu表我们对其各属性进行了备注,具体查询语句为
SELECT t.COLUMN_NAME,t.DATA_TYPE,t.COLUMN_COMMENT
FROM information_schema.COLUMNS t
WHERE t.TABLE_NAME = ‘menu’
AND t.TABLE_SCHEMA = ‘shop’ ;
执行结果如下
本节课的大体重点如上,后续相应的优化将会在下次继续~