全註解整合SSM框架
阿新 • • 發佈:2018-12-07
目錄
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基於業務的開發了。。。。