构建基于Java代码的SSM框架

前篇聊到:基于xml配置的SSM框架整合
现在来谈谈如何构建基于Java代码的SSM框架,即不使用xml配置

核心
AbstractAnnotationConfigDispatcherServletInitializer
WebMvcConfigurerAdapter
BasicDataSource
SqlSessionFactory
Logger

Eclipsse构建的项目结构:

在这里插入图片描述

1.导jar:
spring-core.jar		spring-beans.jar			spring-context.jar		spring-aop.jar	spring-expression.jar
spring-web.jar		spring-context-support.jar	spring-webmvc-4.3.9.RELEASE.jar
spring-tx.jar		spring-jdbc.jar				mybatis-spring.jar
mybatis.jar			commons-pool.jar			commons-dbcp.jar	mysql-connector-java.jar
log4j.jar			commons-logging.jar	
2.建立 类-表 对应关系

一般包名xxx/dao/beans

3.继承AbstractAnnotationConfigDispatcherServeltInitializer类并实现父类规定的三个方法-应用程序初始化类-SSMApplicationInitializer.java:
//应用程序初始化类
public class SSMApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

	@Override
	protected Class<?>[] getRootConfigClasses() {
		//Spring的配置类
        return new Class[]{SpringConfig.class};
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		//Spring MVC的配置类
		return new Class[]{SpringMVCConfig.class};
	}

	@Override
	protected String[] getServletMappings() {
		//返回映射到DispatcherServlet的请求路径
        return new String[]{"/"};
	}
4.SpringMVC的配置类-SpringMVCConfig.java:
//SpringMVC的配置类
@Configuration
@EnableWebMvc
@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class))
public class SpringMVCConfig extends WebMvcConfigurerAdapter{

	//添加视图控制器
	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController("/").setViewName("index");
	}

	//配置视图解析器
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		//定义了一个内部资源视图解析器(InternalResourceViewResolver)
		registry.jsp("/", ".jsp");		//自动添加prefix前缀和suffix后缀
	}
	
	//配置tomcat原ServletHandling-直观体现-图片的正常显示
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
	
}
5.加入Log4j日志jar包-在src目录下放置log4j.properties:
log4j.rootLogger=WARN,stdOut
log4j.appender.stdOut=org.apache.log4j.ConsoleAppender
log4j.appender.stdOut.layout=org.apache.log4j.PatternLayout
log4j.appender.stdOut.layout.conversionPattern=%d %5p (%c:%L) - %m%n

# 自定义 my logger
log4j.logger.com.demo=DEBUG
log4j.appender.myFile=org.apache.log4j.FileAppender
log4j.appender.myFile.file=d:/temp_log.log
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
log4j.appender.myFile.layout.conversionPattern=%d [%c]-[%-5p]%m%n
6.Mybaits配置类-MyBatisConfig.java:
//Mybaits配置类
@Configuration
@MapperScan(basePackages = "com.demo.ssm.mapper")
public class MyBatisConfig {
	
	private static Logger logger = Logger.getLogger(MyBatisConfig.class);
	
	//配置数据源
	@Bean(name = "dataSource",destroyMethod = "close")
	public BasicDataSource basicDataSource() {
		BasicDataSource dataSource = new BasicDataSource();
		dataSource.setDriverClassName("com.mysql.jdbc.Driver");	//JDBC驱动类的全限定类名
		dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/xxx");	//连接数据库
		dataSource.setUsername("xxx");		//数据库账号
		dataSource.setPassword("xxx");		//密码

		//池配置属性
		dataSource.setInitialSize(3);		//池启动时创建的连接数量
		dataSource.setMaxActive(50);		//同一时间可分配的最多连接数,0-表示无限制
		dataSource.setMaxIdle(3);			//最多空闲连接数,0-表示无限制
		dataSource.setMinIdle(1); 			//不创建新连接情况下,保持空闲的最小连接数
		dataSource.setMaxWait(4000);		//等待连接回收的最大时间,-1-表示无限制
		
		dataSource.setDefaultAutoCommit(false);	//设置事务非自动提交
		return dataSource;
	}
	
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        //设置要使用的数据源
        factoryBean.setDataSource(dataSource);

        SqlSessionFactory factory = null;
        //设置sml文件中的类所在包
        factoryBean.setTypeAliasesPackage("com.demo.ssm.beans");

        //为了让myBit自动将下划线分隔的列名转换为驼峰表示的属性名
        org.apache.ibatis.session.Configuration configuration = new org.apache.ibatis.session.Configuration();
        configuration.setMapUnderscoreToCamelCase(true);
        factoryBean.setConfiguration(configuration);

        try {
            //设置映射xml文件的路径
            Resource[] resources= new PathMatchingResourcePatternResolver().getResources("classpath:com/demo/ssm/*Mapper.xml");
            factoryBean.setMapperLocations(resources);
            factory =factoryBean.getObject();
        } catch (Exception e) {
            logger.error("解析映射xml文件时异常:"+e.getMessage());
        }
        return factory;
    }
    
}
7.Spring的配置类-SpringConfig.java:
//Spring的配置类
@Configuration
@ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class))
@EnableTransactionManagement
public class SpringConfig {
    @Bean
    public PlatformTransactionManager transactionManager(DataSource dataSource){
        DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
        transactionManager.setDataSource(dataSource);
        return  transactionManager;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值