====== springmvc+mybatis+spring+freemarker+maven示例项目 ====== ===== 框架版本 ===== ^ 框架 ^ 版本 ^ | springmvc | 4.0.5.RELEASE | | mybatis | 3.2.7 | | spring | 4.0.5.RELEASE | | freemarker | 2.3.20 | | maven | 3.0 | ===== 项目结构 ===== {{ :分享:技术:示例项目:项目结构.png?300 |}} ===== 源代码 ===== ==== UserMapper.java ==== package com.gxx.record.base.dao; import org.springframework.stereotype.Repository; import com.gxx.record.base.vo.User; @Repository public interface UserMapper { int deleteByPrimaryKey(Integer id); int insert(User record); int insertSelective(User record); User selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(User record); int updateByPrimaryKey(User record); /** * 根据姓名查用户 * @param name * @return */ User getUserByName(String name); } ==== UserMapper.xml ==== id, name, password, create_date, create_time delete from user where id = #{id,jdbcType=INTEGER} insert into user (id, name, password, create_date, create_time) values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{createDate,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR}) insert into user id, name, password, create_date, create_time, #{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, #{createDate,jdbcType=VARCHAR}, #{createTime,jdbcType=VARCHAR}, update user name = #{name,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, create_date = #{createDate,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=VARCHAR}, where id = #{id,jdbcType=INTEGER} update user set name = #{name,jdbcType=VARCHAR}, password = #{password,jdbcType=VARCHAR}, create_date = #{createDate,jdbcType=VARCHAR}, create_time = #{createTime,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} ==== User.java ==== package com.gxx.record.base.vo; public class User { private Integer id; private String name; private String password; private String createDate; private String createTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name == null ? null : name.trim(); } public String getPassword() { return password; } public void setPassword(String password) { this.password = password == null ? null : password.trim(); } public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate == null ? null : createDate.trim(); } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime == null ? null : createTime.trim(); } } ==== BaseDto.java ==== package com.gxx.record.dto; /** *
*
Title:
*
* 基础传输对象 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ public class BaseDto { String message;//信息 boolean success;//是否成功 public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public boolean getSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } }
==== UserDto.java ==== package com.gxx.record.dto; /** *
*
Title:
*
* 用户传输对象 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ public class UserDto extends BaseDto { private Integer id;//id private String name;//姓名 private String password;//密码 private String createDate;//创建日期 private String createTime;//创建时间 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getCreateDate() { return createDate; } public void setCreateDate(String createDate) { this.createDate = createDate; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } }
==== UserService.java ==== package com.gxx.record.service; import com.gxx.record.base.vo.User; /** *
*
Title:
*
* 用户服务接口 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ public interface UserService { /** * 新增用户 * @param user */ public void doSaveUser(User user); /** * 根据姓名查用户 * @param name * @return */ public User getUserByName(String name); }
==== UserServiceImpl.java ==== package com.gxx.record.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.gxx.record.base.dao.UserMapper; import com.gxx.record.base.vo.User; import com.gxx.record.service.UserService; /** *
*
Title:
*
* 用户服务实现类 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ @Service("userService") public class UserServiceImpl implements UserService { @Autowired private UserMapper userDao; /** * 新增用户 * @param user */ public void doSaveUser(User user) { userDao.insert(user); } /** * 根据姓名查用户 * @param name * @return */ public User getUserByName(String name) { return userDao.getUserByName(name); } }
==== UserController.java ==== package com.gxx.record.web.user; import javax.servlet.http.HttpServletRequest; import org.apache.log4j.Logger; 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 com.gxx.record.base.vo.User; import com.gxx.record.dto.UserDto; import com.gxx.record.service.UserService; /** * QueryAllocateController负责查询调拨 * * @author gxx */ @Controller @RequestMapping("/user/") public class UserController { /** * 日志处理器 */ private final Logger logger = Logger.getLogger(UserController.class); @Autowired private UserService userService; @RequestMapping(value = "/preRegistFtl", method = RequestMethod.GET) public String preRegistFtl() { return "user/preRegistFtl"; } @RequestMapping(value = "/preRegistJsp", method = RequestMethod.GET) public String preRegistJsp() { return "user/preRegistJsp"; } /** * 注册 * @param request * @param userDto * @return */ @RequestMapping(value = "/registJsp",produces="application/json") public @ResponseBody UserDto registJsp(HttpServletRequest request, UserDto userDto) { logger.info("用户注册:姓名[" + userDto.getName() + "],密码[" + userDto.getPassword() + "]"); /** * 1.判用户名是否存在 */ User user = userService.getUserByName(userDto.getName()); if(user != null){ userDto.setSuccess(Boolean.FALSE.booleanValue()); userDto.setMessage("用户名[" + userDto.getName() + "]已存在!"); return userDto; } /** * 2.创建用户对象 并 新增用户 */ user = new User(); user.setName(userDto.getName()); user.setPassword(userDto.getPassword()); user.setCreateDate("20150618"); user.setCreateTime("000000"); userService.doSaveUser(user); /** * 3.返回结果 */ userDto.setSuccess(Boolean.TRUE.booleanValue()); userDto.setMessage("注册成功!"); return userDto; } /** * 注册 * @param request * @param userDto * @return */ @RequestMapping(value = "/registFtl") public String registFtl(HttpServletRequest request, UserDto userDto) { logger.info("用户注册:姓名[" + userDto.getName() + "],密码[" + userDto.getPassword() + "]"); /** * 1.判用户名是否存在 */ User user = userService.getUserByName(userDto.getName()); if(user != null){ userDto.setSuccess(Boolean.FALSE.booleanValue()); userDto.setMessage("用户名[" + userDto.getName() + "]已存在!"); return "user/result"; } /** * 2.创建用户对象 并 新增用户 */ user = new User(); user.setName(userDto.getName()); user.setPassword(userDto.getPassword()); user.setCreateDate("20150618"); user.setCreateTime("000000"); userService.doSaveUser(user); /** * 3.返回结果 */ userDto.setSuccess(Boolean.TRUE.booleanValue()); userDto.setMessage("注册成功!"); return "user/result"; } } ==== application-context.xml ==== ==== jdbc.properties ==== jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://127.0.0.1:3306/record?useUnicode=true&characterEncoding=UTF-8&useOldAlias jdbc.username=root jdbc.password=root ==== log4j.properties ==== # Output pattern : date [thread] priority category - message FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 log4j.rootLogger=INFO, Console, RollingFile #Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n #RollingFile log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender log4j.appender.RollingFile.File=D:/logs/record.log log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n ==== mybatis.xml ==== ==== spring-mvc.xml ==== UTF-8 ignore 0.## text/plain;charset=utf-8 html/text;charset=utf-8 text/html;charset=utf-8 text/json;charset=utf-8 application/json;charset=utf-8 atom=application/atom+xml html=text/html json=application/json xml=application/xml *=*/* ==== MybatisGeneratorMain.java ==== package com.gxx.record.generator; import java.io.File; import java.io.IOException; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.exception.InvalidConfigurationException; import org.mybatis.generator.exception.XMLParserException; import org.mybatis.generator.internal.DefaultShellCallback; /** *
*
Title:
*
* mybatis-generator逆向框架代码生成工具 *
*
Description:
*
*

none *

*
* * @author Administrator * @version 1.0, 2015年6月18日 * @since record * */ public class MybatisGeneratorMain { /** * main方法 * @param args */ public static void main(String[] args) { List warnings = new ArrayList(); boolean overwrite = true; String genCfg = "/generatorConfig.xml"; File configFile = new File(MybatisGeneratorMain.class.getResource(genCfg).getFile()); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = null; try { config = cp.parseConfiguration(configFile); } catch (IOException e) { e.printStackTrace(); } catch (XMLParserException e) { e.printStackTrace(); } DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = null; try { myBatisGenerator = new MyBatisGenerator(config, callback, warnings); } catch (InvalidConfigurationException e) { e.printStackTrace(); } try { myBatisGenerator.generate(null); } catch (SQLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
==== generatorConfig.xml ====
==== preRegistFtl.ftl ==== 注册页面
用户名:
密码:
==== preRegistJsp.jsp ==== <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 注册页面
用户名:
密码:
==== result.ftl ====

This is my result:
${userDto.success?string('true','false')}

This is my message:
${userDto.message}

==== web.xml ==== Archetype Created Web Application contextConfigLocation classpath*:/application-*.xml, encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* org.springframework.web.context.ContextLoaderListener org.springframework.web.util.IntrospectorCleanupListener dispatcher org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath*:/spring-mvc.xml 1 dispatcher *.htm index.jsp JSPConfiguration *.jsp UTF-8 ==== index.jsp ====

Hello World!

==== pom.xml ==== 4.0.0 com.gxx record war 0.0.1-SNAPSHOT record Maven Webapp http://maven.apache.org 4.0.5.RELEASE 1.6.9 1.6.1 2.3.20 3.2.7 1.2.2 1.3.2 2.4 2.0 1.2 1.1.2 2.4.0 2.4.0 2.4.0 2.4.0 4.11 1.2.16 5.1.9 1.4 scm:svn:svn://121.43.104.34/gxx/trunk/record scm:svn:svn://121.43.104.34/gxx/trunk/record org.springframework spring-core ${spring.version} org.springframework spring-beans ${spring.version} org.springframework spring-context ${spring.version} org.springframework spring-context-support ${spring.version} org.springframework spring-aop ${spring.version} org.springframework spring-jdbc ${spring.version} org.springframework spring-web ${spring.version} org.springframework spring-webmvc ${spring.version} org.aspectj aspectjrt ${aspectjrt.version} org.aspectj aspectjweaver ${aspectjweaver.version} org.freemarker freemarker ${freemarker.version} org.mybatis mybatis ${mybatis.version} org.mybatis mybatis-spring ${mybatis-spring.version} org.mybatis.generator mybatis-generator-core ${mybatis-generator-core.version} javax.servlet servlet-api ${servlet-api.version} provided javax.servlet.jsp jsp-api ${jsp-api.version} provided javax.servlet jstl ${jstl.version} taglibs standard ${standard.version} com.fasterxml.jackson.core jackson-databind ${jackson-databind.version} com.fasterxml.jackson.core jackson-annotations ${jackson-annotations.version} com.fasterxml.jackson.module jackson-module-jaxb-annotations ${jackson-module-jaxb-annotations.version} com.fasterxml.jackson.core jackson-core ${jackson-core.version} log4j log4j ${log4j.version} junit junit test ${junit.version} mysql mysql-connector-java ${mysql-connector-java.version} commons-dbcp commons-dbcp ${commons-dbcp.version} nexus Team Nexus Repository http://121.43.104.34:8081/nexus/content/groups/public offical Maven Official Repository http://repo1.maven.org/maven2 false spring-milestone Spring Maven MILESTONE Repository http://maven.springframework.org/milestone jboss Jboss Repository http://repository.jboss.org/nexus/content/groups/public-jboss/ false java.net Java.net Repository http://download.java.net/maven/2/ false spring-release Spring Maven Release Repository http://repo.springsource.org/libs-release false record org.apache.maven.plugins maven-compiler-plugin 2.0.2 1.6 1.6 utf8 org.apache.maven.plugins maven-scm-plugin 1.3 org.apache.maven.plugins maven-release-plugin 2.4 svn://121.43.104.34/gxx/tags/record svn://121.43.104.34/gxx/branches/record org.apache.maven.plugins maven-archetype-plugin 2.2 nexus-releases Nexus Release Repository http://121.43.104.34:8081/nexus/content/repositories/releases/ nexus-snapshots Nexus Snapshot Repository http://121.43.104.34:8081/nexus/content/repositories/snapshots/ ===== SQL脚本 ===== create database record; use record; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL auto_increment COMMENT '主键', `name` varchar(50) NOT NULL COMMENT '姓名', `password` varchar(32) NOT NULL COMMENT '密码', `create_date` varchar(8) NOT NULL COMMENT '创建日期', `create_time` varchar(6) NOT NULL COMMENT '创建时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COMMENT='用户表' ===== 打包下载 ===== {{:分享:技术:示例项目:record.zip|}} ===== 使用说明 ===== ==== 怎么在eclipse中运行项目 ==== - 本地需要安装maven3 - 打包下载 - 导入eclipse中,自动Build Project,第一次下载maven依赖耗时较长,请耐心等待 - 修改相应配置,比如log4j.properties中的绝对路径 - 开启mysql,运行上面的database.sql - 部署到eclipse绑定的tomcat中,启动tomcat - 启动成功之后,访问http://localhost/record/,看到Hello World!,表示项目成功运行 - 访问http://localhost/record/user/preRegistFtl.htm和http://localhost/record/user/preRegistJsp.htm进行测试 ==== 使用mybatis-generator逆向生成框架代码 ==== - 修改generatorConfig.xml中的配置 - 驱动jar包路径 - 数据库连接 - 模型层配置 - 映射配置 - mapper接口配置 - 需要生成的数据表配置 - 运行MybatisGeneratorMain.java - 刷新目标目录中是否有新文件生成vo,mapper,dao - 注意:重复生成vo和dao会覆盖原文件,mapper会继续写在文件后面,所以重复生成程序运行会出错,需要手动删除再重新生成