基于Maven构建SSM+Druid+Bootstrap(AdminLTE)项目--简单示例
2016-12-14 16:46
555 查看
前言
最近在做一个小项目,基于Maven构建,框架使用现在主流的:SpringMVC(4.1)+Spring(4.1)+MyBatis(3.4.0),实现基本增删改查,页面国际化。数据源采用阿里开源的Druid,前端采用基于Bootstrap封装的模板AdminLTE(2.3.6)及Bootstrap的一些插件。MyBaits采用了另外一位博友提供的通用CRUD代码。前段时间发过几篇文档,陆续有些朋友需要源码,今天有时间,将项目简化,源码发出。仅供学习!
文章地址:
http://blog.csdn.net/cyh1111/article/details/52961250
http://blog.csdn.net/cyh1111/article/details/52960233
效果
1、登陆2、注册
3、主页
4、Modal 框 修改
5、操作消息提醒–2秒自动关闭
功能
1、Maven POM文件<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.cyh</groupId> <artifactId>SSM-Demo</artifactId> <packaging>war</packaging> <version>1.0.0.0</version> <name>SSM-Demo</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- libs --> <junit.version>4.11</junit.version> <jstl.version>1.2</jstl.version> <javaee-api.version>7.0</javaee-api.version> <cglib.version>3.2.2</cglib.version> <aspectjrt.version>1.8.0</aspectjrt.version> <aspectjweaver.version>1.8.0</aspectjweaver.version> <spring.version>4.1.7.RELEASE</spring.version> <mybatis-spring.version>1.3.0</mybatis-spring.version> <mybatis.version>3.4.0</mybatis.version> <log4j.version>1.2.17</log4j.version> <slf4j.version>1.7.21</slf4j.version> <fileupload.version>1.3.1</fileupload.version> <mysql.version>5.1.35</mysql.version> <druid.version>1.0.19</druid.version> <fastjson.version>1.2.11</fastjson.version> <gson.version>2.3.1</gson.version> <!-- <commons-lang.version>2.6</commons-lang.version> <commons-io.version>2.5</commons-io.version> <jdom.version>2.0.2</jdom.version> <activeMQ.version>5.11.4</activeMQ.version> <javassist.version>3.12.1.GA</javassist.version> <transaction.version>1.1</transaction.version> --> </properties> <!-- 依赖包集合 --> <dependencies> <!-- 1. junit 依赖 begin junit3.0使用编程方式运行,junit4.0使用注解方式运行 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> </dependency> <!-- junit 依赖 end --> <!-- 2. Servlet web相关依赖 begin--> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>${javaee-api.version}</version> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <!-- Servlet web相关依赖 end--> <!-- 3. aspectjweaver 依赖 begin --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${aspectjweaver.version}</version> </dependency> <!-- aspectjweaver 依赖 end --> <!-- 4. spring依赖 begin--> <!-- spring核心依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <!-- spring ioc依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <!-- spring aop依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- spring 扩展依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!--spring dao层依赖--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <!-- spring web相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <!-- spring test相关依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <!-- spring依赖 end--> <!-- 5. mybatis依赖 begin--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring.version}</version> </dependency> <!-- mybatis依赖 end--> <!-- 6. 数据库相关依赖 begin--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${druid.version}</version> </dependency> <!-- 数据库相关依赖 end--> <!-- 7. log日志依赖 begin--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!--log日志依赖 end--> <!-- 10. 其他依赖 begin --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>${fastjson.version}</version> </dependency> <!-- fileupload 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>${fileupload.version}</version> </dependency> <!-- POI 相关依赖 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.10-FINAL</version> </dependency> <!-- 二维码依赖 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.3.0</version> </dependency> <!-- gson依赖 --> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>${gson.version}</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20160212</version> </dependency> <!-- 其他依赖 begin --> </dependencies> <build> <finalName>SSM-Demo</finalName> <!-- --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <version>2.7</version> <configuration> <uniqueVersion>false</uniqueVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.8</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <failOnError>true</failOnError> <verbose>true</verbose> <fork>true</fork> <compilerArgument>-nowarn</compilerArgument> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.1.2</version> <executions> <execution> <id>attach-sources</id> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
2、SpringMVC国际、文件上传配置
文件上传原文:http://blog.csdn.net/cyh1111/article/details/52960233
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd"> <!-- 处理器映射器 默认的注解映射的支持 方法一 --> <mvc:annotation-driven /> <!-- 注解控测器--> <context:component-scan base-package="com.cyh.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/> </context:component-scan> <!-- 国际化资源配置 --> <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <!-- 国际化信息所在的文件名 --> <property name="basename" value="messages/message"/> <!-- 如果在国际化资源文件中找不到对应代码的信息,就用这个代码作为名称 --> <property name="useCodeAsDefaultMessage" value="true" /> </bean> <!-- jsp jstl --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 静态资源过滤 --> <mvc:resources location="/res/" mapping="/res/**"/> <mvc:resources location="/WEB-INF/pages/error/" mapping="/WEB-INF/pages/error/**"/> <mvc:resources location="/upload/" mapping="/upload/**"/> <!-- annotation默认的方法映射适配器 --> <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/> <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /> <!-- 支持上传文件 --> <bean id="multipartResolver" class="com.cyh.sy.web.upload.CustomMultipartResolver"/> </beans>
3、Spring+Mybatis+Druid集成配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd"> <!-- 加载数据库参数 --> <context:property-placeholder location="classpath:config.properties"/> <!-- 配置DataSource数据源 --> <!-- 阿里 druid 数据库连接池 --> <bean id = "dataSource" class = "com.alibaba.druid.pool.DruidDataSource" destroy-method = "close"> <!-- 数据库基本信息配置 --> <property name = "url" value = "${druid.url}" /> <property name = "username" value = "${druid.username}" /> <property name = "password" value = "${druid.password}" /> <property name = "driverClassName" value = "${druid.driverClassName}" /> <property name = "filters" value = "${druid.filters}" /> <!-- 最大并发连接数 --> <property name = "maxActive" value = "${druid.maxActive}" /> <!-- 初始化连接数量 --> <property name = "initialSize" value = "${druid.initialSize}" /> <!-- 配置获取连接等待超时的时间 --> <property name = "maxWait" value = "${druid.maxWait}" /> <!-- 最小空闲连接数 --> <property name = "minIdle" value = "${druid.minIdle}" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name = "timeBetweenEvictionRunsMillis" value ="${druid.timeBetweenEvictionRunsMillis}" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name = "minEvictableIdleTimeMillis" value ="${druid.minEvictableIdleTimeMillis}" /> <property name = "validationQuery" value = "${druid.validationQuery}" /> <property name = "testWhileIdle" value = "${druid.testWhileIdle}" /> <property name = "testOnBorrow" value = "${druid.testOnBorrow}" /> <property name = "testOnReturn" value = "${druid.testOnReturn}" /> <property name = "maxOpenPreparedStatements" value ="${druid.maxOpenPreparedStatements}" /> <!-- 打开 removeAbandoned 功能 --> <property name = "removeAbandoned" value = "${druid.removeAbandoned}" /> <!-- 1800 秒,也就是 30 分钟 --> <property name = "removeAbandonedTimeout" value ="${druid.removeAbandonedTimeout}" /> <!-- 关闭 abanded 连接时输出错误日志 --> <property name = "logAbandoned" value = "${druid.logAbandoned}" /> </bean> <!-- 配置SqlSessionFactoryBean --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis-config/mybatis-config.xml"/> <!-- mapper和resultmap配置路径 --> <property name="mapperLocations" value="classpath:mybatis-config/mapper/*-mapper.xml"></property> </bean> <!-- 通过扫描的模式,扫描在com.cyh.sy.dao.mapper目录下的所有mapper --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.cyh.sy.dao"/> </bean> <!-- 创建一个sqlSession实例,线程安全的,可以在所有DAO实例共享,原理是将sqlSession,事务与当前线程挂钩 --> <bean name="sqlSessionTemplateASS" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="close"> <constructor-arg index="0" ref="sqlSessionFactory" /> </bean> <!-- 事务相关控制 --> <bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 通知 --> <tx:advice id="tx" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" /> <tx:method name="edit*" propagation="REQUIRED" /> <tx:method name="remove*" propagation="REQUIRED" /> <tx:method name="find*" read-only="true" /> <tx:method name="get*" read-only="true" /> <tx:method name="select*" read-only="true" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="pc" expression="execution(* com.cyh.sy.service.*.*(..))" /> <!--把事务控制在Service层--> <aop:advisor pointcut-ref="pc" advice-ref="tx" /> </aop:config> <!-- 启用注解扫描 --> <context:component-scan base-package="com.cyh.*"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan> </beans>
4、Mybaits通用CRUD
原文见这里:http://blog.csdn.net/guoshengkai373/article/details/51461242
5、注册邮件激活
/** * @描述:邮件发送工具类 * @作者:cyh * @版本:V1.0 * @创建时间::2016-11-21 下午10:47:36 */ public class EmailUtils { private static final String FROM = "test@163.com"; private static final String PASS_WORD = "test123"; /** * 注册成功后,向用户发送帐户激活链接的邮件 * @param user 未激活的用户 */ public static void sendAccountActivateEmail(Company company) { Session session = getSession(); Message message = new MimeMessage(session); try { message.setFrom(new InternetAddress(FROM)); message.setSentDate(new Date()); message.setSubject("SSM-Demo系统-帐户激活邮件"); message.setRecipient(RecipientType.TO, new InternetAddress(company.getCompanyContactsEmail())); message.setContent("<h1>此邮件为:SSM-Demo系统官方激活邮件!请点击下面链接完成激活操作!</h1>" + "<h3><a href='" + GenerateLinkUtils.generateActivateLink(company)+"'>点击激活帐户</a></h3>","text/html;charset=UTF-8"); message.saveChanges(); // 发送邮件 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } /** * 发送重设密码链接的邮件 */ public static void sendResetPasswordEmail(Company company) { Session session = getSession(); MimeMessage message = new MimeMessage(session); try { message.setSubject("SSM-Demo系统-找回您的帐户与密码"); message.setSentDate(new Date()); message.setFrom(new InternetAddress(FROM)); message.setRecipient(RecipientType.TO, new InternetAddress(company.getCompanyContactsEmail())); message.setContent("<h1>此邮件为:SSM-Demo系统官方账户与密码找回邮件!请点击下面链接重新设置密码!</h1>" + "<h3><a href='" + GenerateLinkUtils.generateResetPwdLink(company)+"'>点击重新设置密码</a></h3>","text/html;charset=UTF-8"); message.saveChanges(); // 发送邮件 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } public static Session getSession() { Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.smtp.host", "smtp.163.com"); props.setProperty("mail.smtp.port", "25"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(FROM, PASS_WORD); } }); return session; }
6、页面Datatables实现表格服务端分页、条件查询
http://blog.csdn.net/cyh1111/article/details/52961250
7、toastr消息提醒
使用非常简单,不同消息不同颜色提示!
<!-- 引入toastr js和css文件 --> <link rel="stylesheet" href="<%=path%>/res/toastr/toastr.min.css"> <script src="<%=path%>/res/toastr/toastr.min.js"></script> <!-- 设置参数 --> <script type="text/javascript"> <!-- toastr.options = { closeButton: false, debug: false, progressBar: true, positionClass: "toast-bottom-center", onclick: null, showDuration: "300", hideDuration: "1000", timeOut: "2000", extendedTimeOut: "1000", showEasing: "swing", hideEasing: "linear", showMethod: "fadeIn", hideMethod: "fadeOut" }; //--> </script> <!-- 使用 --> toastr.success("操作成功!"); toastr.error("操作失败!");
8、其他功能:文件打包压缩、二维码生成、json序列化、sweetalert消息提醒等等
源代码
数据库脚本:\SSM-Demo\src\main\bin\ssm-demo.sqlCSDN下载:下载
GitHub:下载
相关文章推荐
- 基于 maven 的 ssm 项目搭建六:整合 druid 和 mybatis
- SSM项目(一)—— 使用Maven构建的简单的单模块SSM项目
- 使用Maven构建Spring MVC项目的简单示例
- 基于Maven + SSM (Spring、SpringMVC、Mybatis)构建一个简单的
- 基于 maven 的 ssm 项目搭建七:初探 druid
- 使用Maven构建Spring MVC项目的简单示例
- 使用Maven构建Spring MVC项目的简单示例
- Maven实战(二)构建简单Maven项目
- Maven实战(二)构建简单Maven项目
- 译:Apache Maven-简化java的构建过程--比apache ant更多(2) 创建一个简单的maven项目
- Eclipse+Maven构建简单Web项目
- Maven实战(二)构建简单Maven项目
- 基于Maven构建整合SpringMVC+Mybtis+Druid
- Maven构建简单的多模块项目
- Maven实战(二)构建简单Maven项目
- Maven实战(二)构建简单Maven项目
- Maven实战(二)构建简单Maven项目
- maven实践 简单的maven项目构建
- Maven实战(二)构建简单Maven项目
- 用Maven构建基于hadoop的Mahout项目