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.offcn.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.offcn.mapper")
//spring组件的扫描(排除被springmvc容器@Controller注解的类)
@ComponentScan(basePackages = "com.offcn",
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.offcn.controller")  //相当于<context:component-scan base-package="com.offcn.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界面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值