本文共 9413 字,大约阅读时间需要 31 分钟。
drop database if exists mydb;create database mydb;use mydb;drop table if exists emp;create table emp( e_id varchar(20) primary key, e_name varchar(20) not null, e_sal decimal(10,2), e_date date);drop procedure if exists proc_emp_init;delimiter $$create procedure proc_emp_init(cnt int)begin delete from emp; set @i = 1; while @i <= cnt do insert into emp(e_id,e_name,e_sal,e_date) values(lpad(@i,5,'0'),concat('员工_',round(rand()*99999)),round(rand()*5000+2000,2),subdate(now(),INTERVAL rand()*10*365 day)); set @i = @i+1; end while;end$$delimiter ;call proc_emp_init(89);select * from emp;
表emp中部分数据如下:
javax.servlet javax.servlet-api 3.1.0 provided org.springframework spring-context 5.2.2.RELEASE org.springframework spring-tx 5.2.2.RELEASE org.springframework spring-jdbc 5.2.2.RELEASE org.springframework spring-webmvc 5.2.2.RELEASE org.mybatis mybatis 3.5.3 org.mybatis mybatis-spring 2.0.3 mysql mysql-connector-java 8.0.18 com.alibaba druid 1.1.21 org.apache.logging.log4j log4j-core 2.13.0 com.alibaba fastjson 1.2.62
文件夹src/main/resources下
包mapper : 放映射文件 app.properties : 自定义的配置文件 log4j2.xml : log4j的配置文件public class MyAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class [] getRootConfigClasses() { return new Class[] { RootConfig.class}; } @Override protected Class [] getServletConfigClasses() { return new Class[] { MvcConfig.class}; } @Override protected String[] getServletMappings() { // TODO Auto-generated method stub return new String[] { "/"}; }}
自定义配置文件app.properties
jdbc.driverClassName=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/mydbjdbc.username=rootjdbc.password=rootjdbc.filters=statjdbc.maxActive=20jdbc.initialSize=1jdbc.maxWait=60000jdbc.minIdle=1jdbc.timeBetweenEvictionRunsMillis=60000jdbc.minEvictableIdleTimeMillis=300000jdbc.testWhileIdle=truejdbc.testOnBorrow=falsejdbc.testOnReturn=falsejdbc.poolPreparedStatements=truejdbc.maxOpenPreparedStatements=20jdbc.asyncInit=truemybatis.mapper-locations=classpath:/mapper/**/*.xml
RootConfig类
@Configuration // 声明本类为spring的配置类@PropertySource(value="classpath:/app.properties",ignoreResourceNotFound = true) // 配置属性资源文件@ComponentScan("org.xdq.demo.service") // 配置业务对象的扫描基包@MapperScan("org.xdq.demo.dao") // 配置mybatis映射器扫描基包@EnableTransactionManagement // 配置启用事务注解public class RootConfig { @Value("${jdbc.driverClassName}") private String driverClassName; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Value("${jdbc.filters}") private String filters; @Value("${jdbc.maxActive}") private int maxActive; @Value("${jdbc.initialSize}") private int initialSize; @Value("${jdbc.maxWait}") private int maxWait; @Value("${jdbc.minIdle}") private int minIdle; @Value("${jdbc.timeBetweenEvictionRunsMillis}") private long timeBetweenEvictionRunsMillis; @Value("${jdbc.minEvictableIdleTimeMillis}") private long minEvictableIdleTimeMillis; @Value("${jdbc.testWhileIdle}") private boolean testWhileIdle; @Value("${jdbc.testOnBorrow}") private boolean testOnBorrow; @Value("${jdbc.testOnReturn}") private boolean testOnReturn; @Value("${jdbc.poolPreparedStatements}") private boolean poolPreparedStatements; @Value("${jdbc.maxOpenPreparedStatements}") private int maxOpenPreparedStatements; @Value("${jdbc.asyncInit}") private boolean asyncInit; @Value("${mybatis.mapper-locations}") private String mybatisMapperLocations; //配置数据源 @Bean(initMethod = "init",destroyMethod = "close") public DataSource dataSource() throws SQLException { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driverClassName); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); ds.setFilters(filters); ds.setMaxActive(maxActive); ds.setInitialSize(initialSize); ds.setMaxWait(maxWait); ds.setMinIdle(minIdle); ds.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); ds.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); ds.setTestWhileIdle(testWhileIdle); ds.setTestOnReturn(testOnReturn); ds.setTestOnReturn(testOnReturn); ds.setPoolPreparedStatements(poolPreparedStatements); ds.setMaxOpenPreparedStatements(maxOpenPreparedStatements); ds.setAsyncInit(asyncInit); return ds; } //配置事务管理器 @Bean @Autowired public PlatformTransactionManager txManager() throws SQLException { DataSourceTransactionManager txManager = new DataSourceTransactionManager(); txManager.setDataSource(dataSource()); return txManager; } //配置SqlSessionFactory @Bean @Autowired public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean(); factoryBean.setDataSource(dataSource()); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); factoryBean.setMapperLocations(resolver.getResources(mybatisMapperLocations)); return factoryBean.getObject(); }}
@Configuration // 声明本类为spring的配置类@ComponentScan("org.xdq.demo.controller") // 配置控制器对象的扫描基包@EnableWebMvc // 启用springmvc注解public class MvcConfig implements WebMvcConfigurer { //跨域设置 @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**"); /*允许所有请求跨域*/ .allowCredentials(true); /*允许请求发送session认证*/ .allowedMethods("*"); /*允许所有请求方式跨域*/ } // 跨域设置配置FastJson转换器,用于接收json格式请求体数据、发送json格式响应数据 @Override public void configureMessageConverters(List> converters) { StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(); stringConverter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(0,stringConverter); FastJsonHttpMessageConverter jsonConverter = new FastJsonHttpMessageConverter(); jsonConverter.setDefaultCharset(Charset.forName("UTF-8")); converters.add(1,jsonConverter); }}
数据传输对象:EmployeeDto(用于封装客户端传给服务器的数据)
public interface EmployeeDao { @Select("select * from emp") ListfindEmployeeList(); List findEmployeeListByName(String e_name); List findEmployeeListByDate(Date e_date);}
映射文件:EmployeeDao.xml
public interface TestService { ListgetEmployeeList(); List getEmployeeList(String e_name); List getEmpList(Date e_date);}
业务实现类:TestServiceImpl
@Service // 声明为业务对象@Transactional //声明本类所有方法都是事务性的public class TestServiceImpl implements TestService { @Autowired //配置自动依赖注入 private EmployeeDao employeeDao; @Override public ListgetEmployeeList() { return employeeDao.findEmployeeList(); } @Override public List getEmployeeList(String e_name) { return employeeDao.findEmployeeListByName(e_name); } @Override public List getEmpList(Date e_date) { return employeeDao.findEmployeeListByDate(e_date); }}
@RestController //声明控制器组件,且本组件的处理方法一律向客户端发送请求体。public class TestController { @Autowired private TestService testService; @RequestMapping("/hello") public String sayHello() { return "大家好!"; } @RequestMapping("/data") public MapoutData(){ Map map = new HashMap (); map.put("empId", "001"); map.put("empName", "员工1"); map.put("empSal", 8700); return map; } @RequestMapping("/empList") public List empList(){ return testService.getEmployeeList(); } @RequestMapping("/empList/{e_name}") public List empList2(@PathVariable String e_name){ return testService.getEmployeeList(e_name); } @RequestMapping("/emp/{e_date}") public List empList3(@PathVariable @DateTimeFormat(pattern = "yyyy-MM-dd") Date e_date){ return testService.getEmpList(e_date); }}
在浏览器地址栏输入地址:http://localhost:8080/ssm-demo/emp/2016-10-20
测试结果如下图所示,说明Spring、Spring MVC和MyBatis集成成功。转载地址:http://onhdi.baihongyu.com/