一、搭建项目环境
1、创建父子工程
2、父工程中导入jar包
<properties> <spring.version>5.0.2.RELEASE</spring.version> <slf4j.version>1.6.6</slf4j.version> <log4j.version>1.2.12</log4j.version> <shiro.version>1.2.3</shiro.version> <mybatis.version>3.4.5</mybatis.version> <spring.security.version>5.0.1.RELEASE</spring.security.version> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.8</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.4.0</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- log start --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${slf4j.version}</version> </dependency> <!-- log end --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> <type>jar</type> <scope>compile</scope> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.1.2</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>${spring.security.version}</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.9</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>jsr250-api</artifactId> <version>1.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> </plugin> </plugins> </build>
3、加入各个工程之间的依赖关系
parent --> domain --> dao --> service --> web
4、导入通用页面
5、创建Oracle数据库中的用户
创建用户:
分配角色:
二、加入配置类
1、dao层配置类
JdbcConfig.java
package com.ssm.config; import javax.sql.DataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.test.context.ContextConfiguration; import com.mchange.v2.c3p0.ComboPooledDataSource; /** * spring配置类 * * @author wingz * */ @ContextConfiguration // 将该java文件当作一个配置类 @MapperScan("com.ssm.dao") // 配置要扫描的Mybatis的注解的包 public class JdbcConfig { private String driverClass = "oracle.jdbc.driver.OracleDriver"; private String jdbcUrl = "jdbc:oracle:thin:@192.168.88.6:1521:orcl"; private String user = "ssm"; private String password = "ssm"; /** * 创建数据源 * * @return */ @Bean // 该注解将返回的对象放入spring容器中 public DataSource getDateSource() { ComboPooledDataSource dataSource = new ComboPooledDataSource(); try { dataSource.setDriverClass(driverClass); dataSource.setJdbcUrl(jdbcUrl); dataSource.setUser(user); dataSource.setPassword(password); } catch (Exception e) { e.printStackTrace(); } return dataSource; } /** * 创建sessionFactory * * @param dataSource * @return */ @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource) { SqlSessionFactoryBean factory = new SqlSessionFactoryBean(); factory.setDataSource(dataSource); return factory; } }
2、service层配置类
TxConfig.java
package com.ssm.config; import javax.sql.DataSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.EnableTransactionManagement; @ContextConfiguration // 将该java文件当作一个配置类 @ComponentScan("com.ssm.service") // 配置要扫描的service层的注解 @EnableTransactionManagement // 开始事务管理器的注解 public class TxConfig { /** * 配置事务管理器 * * @param dataSource * @return */ @Bean public DataSourceTransactionManager getDataSourceTransactionManager(DataSource dataSource) { DataSourceTransactionManager manager = new DataSourceTransactionManager(); manager.setDataSource(dataSource); return manager; } }
3、web层配置类
SpringMvcConfig.java
package com.ssm.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.test.context.ContextConfiguration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.view.InternalResourceViewResolver; @ContextConfiguration // 将该java文件当作一个配置类 @ComponentScan("com.ssm.controller") // 配置要扫描的springmvc的注解的包 @EnableWebMvc // 相当于xml中配置的<mvc:annotation-driver>注解:配置适配器、映射器 public class SpringMvcConfig { @Bean public InternalResourceViewResolver getInternalResourceViewResolver() { String prefix = "/WEB-INF/pages/"; String suffix = ".jsp"; InternalResourceViewResolver res = new InternalResourceViewResolver(prefix, suffix); return res; } }
4、web.xml中配置变注解
WebXMLConfig.java
package com.ssm.config; import java.util.EnumSet; import javax.servlet.DispatcherType; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletRegistration.Dynamic; import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; import org.springframework.web.servlet.DispatcherServlet; /** * 该配置类实现WebApplicationInitializer接口,在项目启动时,会执行该类中的onStartup方法 * * @author wingz * */ public class WebXMLConfig implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) throws ServletException { // AnnotationConfigWebApplicationContext对象的作用是:把所有的配置类加载到spring容器中 AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(JdbcConfig.class, SpringMvcConfig.class, TxConfig.class); // 添加spring核心控制器 servletContext.addListener(new ContextLoaderListener(context)); // 配置springmvc前端控制器 Dynamic servlet = servletContext.addServlet("springmvc", new DispatcherServlet(context)); servlet.addMapping("*.do"); // 配置拦截所有.do结尾的请求 // 添加编码过滤器 javax.servlet.FilterRegistration.Dynamic filter = servletContext.addFilter("encoding", new CharacterEncodingFilter("UTF-8")); // EnumSet<DispatcherType>:枚举类型,配置过滤器过滤的请求类型 EnumSet<DispatcherType> dispatcherTypes = EnumSet.noneOf(DispatcherType.class); dispatcherTypes.add(DispatcherType.FORWARD); dispatcherTypes.add(DispatcherType.REQUEST); filter.addMappingForUrlPatterns(dispatcherTypes, false, "/*"); } }
注意:使用3.0以后版本的servlet-api.jar,才可以使用注解式的xml
三、测试环境
1、创建表
CREATE TABLE product( id varchar2(32) DEFAULT SYS_GUID() PRIMARY KEY, productNum varchar2(50) NOT NULL, productName varchar2(50), cityName varchar2(50), DepartureTime date, productPrice Number, productDesc varchar2(500), productStatus number, CONSTRAiNT product UNIQUE (id, productNum) );
2、创建实体类
public class Product { private String id; private String productNum; private String productName; private String cityName; private Date departureTime; private String departureTimeStr; private double productPrice; private String productDesc; private Integer productStatus; private String productStatusStr;
3、编写Dao、service、controller层代码以及jsp页面
ProductDao.java
package com.ssm.dao; import java.util.List; import org.apache.ibatis.annotations.Select; import com.ssm.domain.Product; public interface ProductDao { @Select("select * from product") public List<Product> findAllProduct(); }
ProductServiceImpl.java
package com.ssm.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ssm.dao.ProductDao; import com.ssm.domain.Product; import com.ssm.service.ProductService; @Service @Transactional public class ProductServiceImpl implements ProductService { @Autowired private ProductDao productDao; public List<Product> findAllProduct() { List<Product> list = productDao.findAllProduct(); return list; } }
PorductController.java
package com.ssm.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 com.ssm.domain.Product; import com.ssm.service.ProductService; @Controller @RequestMapping("product") public class ProductController { @Autowired private ProductService productService; @RequestMapping("findAll") public String findAllProducts(Model model) { List<Product> list = productService.findAllProduct(); model.addAttribute("list", list); return "product-list"; } }
product-list.jsp
4、关于时间类型的参数显示以及接受的问题
时间类型的字段在jsp页面显示:
方式1:使用jsp的<fmt>标签
方式2:修改实体类中对应字段的get方法
时间类型的字段在后台接受参数的处理:
方式1:在实体类中的时间类型属性上加入注解:
方式2:在controller中使用注解进行转换
5、