1. 程式人生 > 實用技巧 >SSM純註解

SSM純註解

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介面