SSM純註解
阿新 • • 發佈:2020-08-03
SSM純註解
目錄
以查詢資料庫ssm中的user表的所有屬性為例
環境準備
匯入依賴
spring-jdbc、spring-tx、mysql-connector-java、HikariCP、mybatis、mybatis-spring、junit、spring-context、spring-aspects、aspectjrt、aspectjweaver、spring-test、lombok、logback-classic、spring-webmvc、spring-web、servlet-api(provided)、jsp-api(provided)、fastjson
資料庫屬性配置檔案:db.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=root
日誌檔案:logback.xml
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <!--禁止logback預設顯示的日誌資訊--> <statusListener class="ch.qos.logback.core.status.NopStatusListener" /> <!--定義一個帶顏色的控制檯輸出日誌PATTERN--> <property name="CONSOLE_LOG_PATTERN" value="時間:%date{yyyy-MM-dd HH:mm:ss} 級別: %highlight(%-5level) 程序: %boldYellow(%thread) 類: %boldGreen(%logger) 資訊: %msg%n"/> <!--定義一個不帶顏色的檔案日誌輸出格式,因為檔案不能帶顏色--> <property name="ERRINFOFILE_LOG_PATTERN" value="時間:%date{yyyy-MM-dd HH:mm:ss} 級別: %-5level 程序: %thread 類: %logger 資訊: %msg%n"/> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> ${CONSOLE_LOG_PATTERN} </pattern> </layout> </appender> <root level="info"> <appender-ref ref="consoleLog" /> </root> </configuration>
持久層
實體類User
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private int age;
}
UserviceMapper介面
@Component
public interface UserMapper {
public List<User> getAll();
}
UserMapper.xml
<?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.hello.mapper.UserMapper"> <select id="getAll" resultType="user"> select * from user </select> </mapper>
服務層
IUserService介面
public interface IUserService {
public List<User> getAll();
}
UserService實現類
@Service
public class UserService implements IUserService {
@Autowired
private UserMapper mapper;
@Override
public List<User> getAll() {
return mapper.getAll();
}
}
表現層
UserController控制類
@Controller
public class UserController {
@Autowired
public IUserService service;
@RequestMapping("/test")
public String test(){
List<User> all = service.getAll();
for (User user:all) {
System.out.println(user);
}
return "index";
}
}
Spring配置類
資料庫連線池資訊配置類
@PropertySource("classpath:db.properties")
@Component
@Data
public class DataSourcesConfig {
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driverClassName}")
private String driverNmae;
}
將db.properties的內容放到類中。
Spring配置類
//掃描mapper介面
@MapperScan("com.hello.mapper")
//spring元件的掃描(排除被springmvc容器@Controller註解的類)
@ComponentScan(basePackages = "com.hello",
excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = EnableWebMvc.class)})
@Configuration
@EnableTransactionManagement
public class Config {
//配置資料庫連線池
@Bean
public DataSource dataSource(DataSourcesConfig config){
HikariDataSource hikariDataSource = new HikariDataSource();
hikariDataSource.setJdbcUrl(config.getUrl());
hikariDataSource.setUsername(config.getUsername());
hikariDataSource.setPassword(config.getPassword());
hikariDataSource.setDriverClassName(config.getDriverNmae());
return hikariDataSource;
}
//配置sqlSessionFactory
@Bean
public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
PathMatchingResourcePatternResolver path = new PathMatchingResourcePatternResolver();
sqlSessionFactoryBean.setMapperLocations(path.getResources("classpath*:com/offcn/mapper/**/*.xml"));
sqlSessionFactoryBean.setTypeAliasesPackage("com.offcn.bean");
return sqlSessionFactoryBean.getObject();
}
}
SpringMvc配置類
@Configuration
@EnableWebMvc
//spring現在有兩個容器,一個是Springmvc的容器,
// 一個是spring的ioc容器,需要使用@Import將兩個註解關聯
@Import(Config.class)
//相當於<aop:annotation-driven/>
@ComponentScan(basePackages = "com.hello.controller") //相當於<context:component-scan base-package="com.hello.controller"/>
public class MyWebConfig implements WebMvcConfigurer {
//配置檢視解析器:字首、字尾
@Bean
public InternalResourceViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
//<!--servlet容器能處理的對映,springMvc不攔截-->
//<mvc:default-servlet-handler/>
//需要實現WebMvcConfigurer重寫其中的configureDefaultServletHandling方法
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
//自定義異常處理器
@Bean
public MyHandlerExceptionResolver myHandlerExceptionResolver(){
MyHandlerExceptionResolver myHandlerExceptionResolver = new MyHandlerExceptionResolver();
return myHandlerExceptionResolver;
}
}
在SpringMvc中使用@Import(Config.class)匯入Spring配置類(關聯)
web.xml(伺服器啟動時呼叫)
public class MyWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return null;
}
//匯入springmvc配置類
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] { MyWebConfig.class };
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
異常處理,跳轉錯誤介面
public class MyHandlerExceptionResolver implements HandlerExceptionResolver{
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg",e.getMessage());
e.printStackTrace();
modelAndView.setViewName("error");
return modelAndView;
}
}
發生異常時,跳到/error.jsp介面