1. 程式人生 > >全註解整合SSM框架

全註解整合SSM框架

目錄

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基於業務的開發了。。。。