基于spring5的ssm整合练习 -- day01 纯注解配置

一、搭建项目环境


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、


猜你喜欢

转载自blog.csdn.net/wingzhezhe/article/details/80341518
今日推荐