目标:(1)登录界面
(2)学生信息管理界面
工作:1、数据库
(1)系统用户表
(2)学生信息表
2、项目结构
3、这个FreeMarkerConfig 类必须写,不然**.ftl**的页面显示不出来。
代码如下:
package com.student.config;
import freemarker.template.TemplateException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.ui.freemarker.FreeMarkerConfigurationFactory;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import java.io.IOException;
import java.util.Properties;
/**
* @Author LSS
* @Description: TODO
* @Date in 2019/4/24 0024 17:38
* @Modify By:
*/
@Configuration
public class FreeMarkerConfig {
@Bean
public ViewResolver viewResolverFtl() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(false);
resolver.setViewClass(org.springframework.web.servlet.view.freemarker.FreeMarkerView.class);
resolver.setRequestContextAttribute("re");
resolver.setExposeRequestAttributes(true);
resolver.setExposeSessionAttributes(true);
resolver.setSuffix(".ftl");
resolver.setContentType("text/html;charset=UTF-8");
resolver.setOrder(0);
return resolver;
}
@Bean
public ViewResolver viewResolverHtml() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setCache(false);
resolver.setViewClass(org.springframework.web.servlet.view.freemarker.FreeMarkerView.class);
resolver.setRequestContextAttribute("re");
resolver.setExposeRequestAttributes(true);
resolver.setExposeSessionAttributes(true);
resolver.setOrder(1);
resolver.setSuffix(".html");
resolver.setContentType("text/html;charset=UTF-8");
return resolver;
}
@Bean
public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
factory.setTemplateLoaderPath("classpath:/ftl/");
factory.setDefaultEncoding("UTF-8");
factory.setPreferFileSystemAccess(false);
FreeMarkerConfigurer result = new FreeMarkerConfigurer();
freemarker.template.Configuration configuration = factory.createConfiguration();
configuration.setClassicCompatible(true);
result.setConfiguration(configuration);
Properties settings = new Properties();
settings.put("template_update_delay", "0");
settings.put("default_encoding", "UTF-8");
settings.put("number_format", "0.######");
settings.put("classic_compatible", true);
settings.put("template_exception_handler", "ignore");
result.setFreemarkerSettings(settings);
return result;
}
}
4、controller层:
(1)LoginController类
package com.student.controller;
import com.student.entity.db.SysUserDO;
import com.student.service.LoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
/**
* @Author LSS
* @Description: TODO
* @Date in 2019/4/26 0026 8:51
* @Modify By:
*/
@RequestMapping(value = "/jp")
@Controller
public class LoginController {
@Autowired
private LoginService loginService;
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String login(){
return "login/login";
}
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(String userName, String userPassword, HttpSession session, ModelMap modelMap){
SysUserDO sysUserDO = new SysUserDO();
sysUserDO.setUserName(userName);
sysUserDO.setUserPassword(userPassword);
List<Map<String,Object>> userList = loginService.userList(sysUserDO);
if (userList.size()>0){
return "main/main";
}
return "错了老弟";
}
}
(2)StudentController类
package com.student.controller;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.student.entity.ReType;
import com.student.entity.db.StuInforDO;
import com.student.entity.db.SysUserDO;
import com.student.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpSession;
import java.util.List;
import java.util.Map;
/**
* @Author LSS
* @Description: TODO
* @Date in 2019/4/24 0024 20:20
* @Modify By:
*/
@RequestMapping(value = "/stuInfo")
@Controller
public class StudentController {
@Autowired
private StudentService studentService;
/**
* 单击学生信息管理菜单栏,先跳这。进入学生信息页面stuInfo.ftl
* @return
*/
@RequestMapping(value = "/stuInfo",method = RequestMethod.GET)
public String stuInfo(){
//跳入stuInfo.ftl界面
return "/stuInfo/stuInfo";
}
/**
* 从stuInfo.ftl那跳过来的,
* @param
* @return
*/
@RequestMapping(value = "/stuInfoList",method = RequestMethod.GET)
@ResponseBody
public ReType stuInfoList(String stuName,Integer stuAge,HttpSession session,String page,String limit){
// 登录名和密码存在HttpSession里了,要想用,就用getAttribute拿出来
SysUserDO sysUserDO = (SysUserDO) session.getAttribute("SysUserDO");
PageHelper.startPage(Integer.valueOf(page), Integer.valueOf(limit));
StuInforDO stuInforDO = new StuInforDO();
stuInforDO.setStuName(stuName);
stuInforDO.setStuAge(stuAge);
List<Map<String,Object>> stuInforDOS = studentService.stuInfoList(stuInforDO);
PageInfo pageInfo = new PageInfo(stuInforDOS);
ReType reType = new ReType(pageInfo.getTotal(), pageInfo.getList());
return reType;
}
// @RequestMapping(value = "/stuInfoList",method = RequestMethod.POST)
// @ResponseBody
// public List<Map<String, Object>> stuInfoList(){
// StuInforDO stuInforDO = new StuInforDO();
// return studentService.selectStudent(stuInforDO);
// }
}
5、运行逆向工程生成
PaginationPlugin类的代码如下:
package com.student.plugin;
import org.junit.Test;
import org.mybatis.generator.api.CommentGenerator;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.ShellRunner;
import org.mybatis.generator.api.dom.java.*;
import org.mybatis.generator.api.dom.xml.Attribute;
import org.mybatis.generator.api.dom.xml.TextElement;
import org.mybatis.generator.api.dom.xml.XmlElement;
import java.util.List;
/**
* @Author LSS
* @Description: TODO
* @Date in 2019/4/24 0024 16:26
* @Modify By:
*/
public class PaginationPlugin extends PluginAdapter{
@Override
public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable) {
// add field, getter, setter for limit clause
addLimit(topLevelClass, introspectedTable, "limitStart");
addLimit(topLevelClass, introspectedTable, "limitEnd");
return super.modelExampleClassGenerated(topLevelClass, introspectedTable);
}
@Override
public boolean sqlMapSelectByExampleWithoutBLOBsElementGenerated(
XmlElement element, IntrospectedTable introspectedTable) {
XmlElement isNotNullElement = new XmlElement("if"); //$NON-NLS-1$
isNotNullElement.addAttribute(new Attribute("test", "limitStart != null and limitStart>=0")); //$NON-NLS-1$ //$NON-NLS-2$
isNotNullElement.addElement(new TextElement("limit #{limitStart} , #{limitEnd}"));
element.addElement(isNotNullElement);
return super.sqlMapUpdateByExampleWithoutBLOBsElementGenerated(element, introspectedTable);
}
private void addLimit(TopLevelClass topLevelClass,
IntrospectedTable introspectedTable, String name) {
CommentGenerator commentGenerator = context.getCommentGenerator();
Field field = new Field();
field.setVisibility(JavaVisibility.PROTECTED);
field.setType(PrimitiveTypeWrapper.getIntegerInstance());
field.setName(name);
commentGenerator.addFieldComment(field, introspectedTable);
topLevelClass.addField(field);
char c = name.charAt(0);
String camel = Character.toUpperCase(c) + name.substring(1);
Method method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setName("set" + camel);
method.addParameter(new Parameter(PrimitiveTypeWrapper.getIntegerInstance(), name));
method.addBodyLine("this." + name + "=" + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
method = new Method();
method.setVisibility(JavaVisibility.PUBLIC);
method.setReturnType(PrimitiveTypeWrapper.getIntegerInstance());
method.setName("get" + camel);
method.addBodyLine("return " + name + ";");
commentGenerator.addGeneralMethodComment(method, introspectedTable);
topLevelClass.addMethod(method);
}
/**
* This plugin is always valid - no properties are required
*/
public boolean validate(List<String> warnings) {
return true;