全注解整合SSM框架

版权声明:转载注明出处 https://blog.csdn.net/czr11616/article/details/84325586

目录

1.创建WebAppInitializer配置类

2.配置dispatcherServlet

3.配置Spring IoC

4.配置Mybatis

5.配置映射器

6.创建Mapper接口

7.最后


1.创建WebAppInitializer配置类

继承AbstractAnnotationConfigDispatcherServletInitializer类,配置拦截请求,同时引入dispatcherServlet配置和spring ioc配置

package com.ssm.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer{

	//拦截请求配置
	@Override
	protected String[] getServletMappings() {
		
		return new String[] {"*.do"};
	}
	
	//dispatcherServlet环境配置
	@Override
	protected Class<?>[] getServletConfigClasses() {
		
		return new Class<?>[] {WebConfig.class};
	}

	//spring Ioc环境配置
	@Override
	protected Class<?>[] getRootConfigClasses() {
		
		return new Class<?>[] {RootConfig.class};
	}
}

2.配置dispatcherServlet

创建配置类WebConfig.class,其中配置了视图解析器以及自定义适配器。

package com.ssm.config;

import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
//定义spring mvc扫描的包
@ComponentScan(value="com.*",includeFilters= {@Filter(type=FilterType.ANNOTATION,value=Controller.class)})
//启动srping mvc配置
@EnableWebMvc
public class WebConfig {
	/*
	 * 通过注解@Bean初始化视图解析器
	 * @return ViewResolver视图解析器
	 */
	@Bean(name="internalResourceViewResolver")
	public ViewResolver initViewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/jsp");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}
	/*
	 * 自定义适配器
	 * 初始化RequestMappingHandlerAdapter,并加载Http的Json转换器
	 * @return RequestMappingHandlerAdapter对象
	 */
	@Bean(name="requestMappingHandlerAdapter")
	public HandlerAdapter initRequestMappingHandlerAdapter() {
		//RequestMappingHandlerAdapter
		RequestMappingHandlerAdapter rmha = new RequestMappingHandlerAdapter();
		//http json转换器
		MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
		//MappingJackson2HttpMessageConverter接收json类型消息的转换
		MediaType mediaType = MediaType.APPLICATION_JSON_UTF8;
		List<MediaType> mediaTypes = new ArrayList<MediaType>();
		mediaTypes.add(mediaType);
		//加入转换器的支持类型
		jsonConverter.setSupportedMediaTypes(mediaTypes);
		//往适配器加入json转换器
		rmha.getMessageConverters().add(jsonConverter);
		return rmha;
	}
}

3.配置Spring IoC

创建配置类RootConfig.class,其中配置了数据库连接池、sqlSessionFactory、Mybatis Mapper接口的自动扫描以及注解事务,

其中sqlSessionFactory的配置中又引入了mybatis配置文件mybatis-config.xml

package com.ssm.config;

import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;

//表明其为一个配置类
@Configuration
//定义spring扫描的包
@ComponentScan("com.*")
//使用事务驱动管理器
@EnableTransactionManagement
//实现接口TransactionManagementConfigurer,这样可以配置注解驱动事务
public class RootConfig implements TransactionManagementConfigurer{
	
	private DataSource dataSource = null;
	/*
	 * 配置数据库
	 * @return 数据库连接池
	 */
	@Bean(name="dataSource")
	public DataSource initDataSource() {
		if(dataSource != null) {
			return dataSource;
		}
		Properties props = new Properties();
		props.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
		props.setProperty("url", "jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false");
		props.setProperty("username", "root");
		props.setProperty("password", "123");
		try {
			dataSource = BasicDataSourceFactory.createDataSource(props);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return dataSource;
	}
	/*
	 * 配置SqlSessionFactoryBean
	 * @return SqlSessionFactoryBean
	 */
	@Bean(name="sqlSessionFactory")
	public SqlSessionFactoryBean initSqlSessionFactory() {
		
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		sqlSessionFactory.setDataSource(initDataSource());
		//配置mybatis配置文件
		Resource resource = new ClassPathResource("com/ssm/dao/mybatis-config.xml");
		sqlSessionFactory.setConfigLocation(resource);
		return sqlSessionFactory;
	}

	/*
	 * 通过自动扫描,发现Mybatis Mapper接口
	 * @return Mapper扫描器
	 */
	@Bean
	public MapperScannerConfigurer initMapperScannerConfigurer() {
		
		MapperScannerConfigurer msc = new MapperScannerConfigurer();
		//扫描包
		msc.setBasePackage("com.*");
		msc.setSqlSessionFactoryBeanName("sqlSessionFactory");
		//区分注解扫描
		msc.setAnnotationClass(Repository.class);
		return msc;
	}
	/*
	 * 实现接口方法,注册注解事务,当@Transactional使用的时候产生数据库事务
	 */
	@Override
	@Bean(name="annotationDrivenTransactionManager")
	public PlatformTransactionManager annotationDrivenTransactionManager() {
		
		DataSourceTransactionManager transactionManager =  new DataSourceTransactionManager();
		transactionManager.setDataSource(initDataSource());
		return transactionManager;
	}

}

4.配置Mybatis

创建mybatis配置文件mybatis-config.xml,其中包含了一些基础设置,别名配置,以及最后引入了映射器配置文件(mapper)

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
        "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
<configuration>
	<settings>
		<!-- 这个配置使全局的映射器启用或禁用缓存 -->
		<setting name="cacheEnabled" value="true"/>
		<!-- 允许jdbc支持生成的键 -->
		<setting name="useGeneratedKeys" value="true"/>
		<!-- 配置默认的执行器 -->
		<setting name="defaultExecutorType" value="REUSE"/>
		<!-- 全局启用或禁用延迟加载 -->
		<setting name="lazyLoadingEnabled" value="true"/>
		<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
		<setting name="defaultStatementTimeout" value="25000"/>
	</settings>
	<!-- 别名配置 -->
	<typeAliases>
		<typeAlias alias="role" type="com.ssm.pojo.Role"/>
	</typeAliases>
	<!-- 指定映射器路径 -->
	<mappers>
		<mapper resource="com/ssm/dao/sql/RoleMapper.xml"/>
		<mapper resource="com/ssm/dao/sql/RedPacketMapper.xml"/>
		<mapper resource="com/ssm/dao/sql/UserRedPacketMapper.xml"/>
	</mappers>
</configuration>

5.配置映射器

根据你的实体类创建映射器,sql语句都需要写在映射器中,映射器根据namespae和id定位到你的sql语句并执行数据库操作

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 

<mapper namespace="com.ssm.dao.RoleDao">
	
	<select id="getRole" parameterType="long" resultType="role">
  		SELECT id,role_name as roleName,note FROM t_role WHERE ID = #{id}
	</select>
	
	<insert id="insertRole" useGeneratedKeys="true" keyProperty="id">
		insert into t_role (role_name,note)
		values (#{roleName},#{note})
	</insert>

	<update id="updateRole">
		update t_role set
		role_name = #{roleName},
		note = #{note}
		where id = #{id}
	</update>

	<delete id="deleteRole">
		delete from t_role where id = #{id}
	</delete>
	<select id="findRoles" resultType="role">
		SELECT id,role_name as roleName,note FROM t_role
		<where>
			<if test="roleName != null">
				role_name like concat('%',#{roleName},'%')
			</if>
			<if test="note != null">
				note like concat('%',#{note},'%')
			</if>
		</where>
	</select>
</mapper>

6.创建Mapper接口

要操作数据库,光有映射器还不够,还需要对应的接口,接口名即为映射器中的namespace,接口中的方法即为映射器中sql语句的id名

package com.ssm.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import com.ssm.pojo.Role;

@Repository
public interface RoleDao {

	public Role getRole(Long id);
	public int deleteRole(Long id);
	public int insertRole(Role role);
	public int updateRole(Role role);
	public List<Role> findRoles(@Param("roleName") String roleName,@Param("note") String note);
}

7.最后

到此为止SSM整合基本的配置就完成了,当然作为Web项目,接下来就是对Controller和Service基于业务的开发了。。。。 

猜你喜欢

转载自blog.csdn.net/czr11616/article/details/84325586