项目技术架构简介
采用当前流行的前后端编程架构:
后端框架采用 Spring +SpringMVC+mybatis
前端采用AdminLTE框架的前端解决方案
搭建SSM开发环境(1)导入数据库
在sql yog中导入数据库
搭建SSM开发环境(2)创建父项目
1.创建父项目
2.在pom.xml文件中导入依赖
注意数据库的版本
搭建SSM开发环境(3)创建实体类项目
1. 创建项目
2. 编写实体类
3. 编写pom.xml文件
搭建SSM开发环境(4)创建dao项目
1.创建项目
2. 编写pom.xml文件,导入domian依赖
3.创建接口
4.创建配置文件
配置文件在resources中,文件的包名和类名要一致,并且resources中包要用/隔开,而不是.隔开配置文件在resources中,文件的包名和类名要一致,并且resources中包要用/隔开,而不是.隔开
<select id="findAll" resultMap="BaseResultMap"> SELECT * FROM ss_company </select>
5.导入数据库配置文件
jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql:///saas-export?serverTimezone=UTC&useSSL=false jdbc.username=root jdbc.password=root
我用的是MySQL 8的版本,配置的时候要注意
6.编写application-dao.xml配置文件
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <description>spring整个mybatis的配置</description> <!--1.加载配置文件--> <context:property-placeholder location="classpath:properties/db.properties"/> <!--2.配置数据库连接池--> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </bean> <!--3.spring整合mybatis配置1: 把SqlSessionFactory创建交给spring--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--3.1 注入连接池--> <property name="dataSource" ref="dataSource"/> <!--指定加载的dao接口的映射文件(可选) <property name="mapperLocations" value=""/> <property name="configLocation" value="SqlMapConfig.xml主配置文件"/> <property name="typeAliasesPackage" value="别名配置:配置扫描的包"/> --> <property name="typeAliasesPackage" value="com.itheima.domain"/> </bean> <!--4.spring整合mybatis配置2: 扫描dao接口所在的包--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--扫描此包以及此包下的所有子包--> <property name="basePackage" value="com.itheima.dao"/> </bean> </beans>
再就是最重要的:测试
1.在test目录下建立对应的包结构
2.编写测试类
package com.itheima.dao.company; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; // 测试类 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:spring/applicationContext-dao.xml") public class CompanyDaoTest { @Autowired private CompanyDao companyDao; @Test public void findAll() { System.out.println(); } }
搭建SSM开发环境(5)创建service项目
1.创建项目
2.编写pom.xml文件(引入dao依赖)
3.编写service接口
4.编写实现类
5.编写applicationContext-tx.xml文件
因为service层需要事务控制,所以将事务的配置放在此配置文件中
<?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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <description>spring声明式事务配置</description> <!--1.注解扫描(扫描@Service,@Autowired等注解)--> <context:component-scan base-package="com.itheima.service"/> <!--2.事务管理器--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!--3.事务通知规则: 拦截到方法后,对指定方法如何管理事务--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--find等开头的方法;运行时期对事务要求可有可无; 支持只读操作--> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> <tx:method name="search*" propagation="SUPPORTS" read-only="true"/> <tx:method name="select*" propagation="SUPPORTS" read-only="true"/> <tx:method name="load*" propagation="SUPPORTS" read-only="true"/> <tx:method name="query*" propagation="SUPPORTS" read-only="true"/> <!--其他所有方法;运行时期必须有事务环境; 支持crud操作--> <tx:method name="*" propagation="REQUIRED" read-only="false"/> </tx:attributes> </tx:advice> <!--4.配置aop切入点和表达式--> <aop:config> <aop:pointcut id="pt" expression="execution(* com.itheima.service.*.impl.*.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/> </aop:config> </beans>
搭建SSM开发环境(六)web工程 A 创建项目、配置web.xml
1.创建项目(web项目)
2.添加依赖
3.编写web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!--配置监听器,通过监听器加载spring配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!--配置编码过滤器--> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--配置springmvc前端控制器,所有请求都要经过这里--> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--指定加载的配置文件--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <!--启动初始化--> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
4.配置springmvc.xml文件
<?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: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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--1.开启注解扫描--> <context:component-scan base-package="com.itheima.web"/> <!--2.开启注解驱动,配置处理器解析器和处理器适配器--> <mvc:annotation-driven/> <!--3.配置视图解析器--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"/> <property name="suffix" value=".jsp"/> </bean> <!--4.配置日期转换器工厂--> <bean id="conversionServiceFactory" class="org.springframework.context.support.ConversionServiceFactoryBean"> <property name="converters"> <set> <!--注入自定义的转换器--> <ref bean="stringToDateConverter"/> </set> </property> </bean> </beans>
5.导入log4j.properties文件
6.编写控制器
日期转换异常
package com.itheima.web.converter; import org.springframework.core.convert.converter.Converter; import org.springframework.stereotype.Component; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期转换类,实现Converter接口 */ @Component public class StringToDateConverter implements Converter<String, Date> { @Override public Date convert(String source) { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date date = null; try { date = format.parse(source); } catch (ParseException e) { e.printStackTrace(); } return date; } }
在springmvc.xml文件中配置日期转换器工厂(已经配置)
异常处理
1.创建自定义异常类
package com.itheima.web.exception; import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 统一异常处理 */ @Component public class CustomExceptionResolver implements HandlerExceptionResolver { /** * 1.跳转到错误页面 * 2.携带错误信息 */ public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { // 打印异常信息 ex.printStackTrace(); ModelAndView mov = new ModelAndView(); mov.addObject("ex",ex); mov.addObject("errorMsg","服务器繁忙..."); mov.setViewName("error"); return mov; } }