博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring、Spring MVC和MyBatis编程式集成示例
阅读量:4045 次
发布时间:2019-05-24

本文共 9413 字,大约阅读时间需要 31 分钟。

Spring、Spring MVC和MyBatis编程式集成示例

在mysql环境下创建数据库

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中部分数据如下:

在这里插入图片描述

创建Maven项目,导入依赖

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/java下
包org.xdq.demo.config : 放配置类
包org.xdq.demo.dao : 放映射器
包org.xdq.demo.service : 放业务接口
包org.xdq.demo.service.impl : 放业务实现类
包org.xdq.demo.controller : 放控制器类
包org.xdq.demo.dto : 放数据传输对象封装类
包org.xdq.demo.model : 放实体数据类

文件夹src/main/resources下

包mapper : 放映射文件
app.properties : 自定义的配置文件
log4j2.xml : log4j的配置文件

创建配置类

在这里插入图片描述

Web应用初始化配置类MyAppInitializer

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[] {
"/"}; }}

根上下文容器配置类RootConfig

自定义配置文件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(); }}

前端应用上下文配置类MvcConfig

@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); }}

log4j的配置文件log4j2.xml

在这里插入图片描述

数据封装类的开发

在这里插入图片描述

实体数据对象:Employee(用于封装从数据库查询出来的数据)
在这里插入图片描述

数据传输对象:EmployeeDto(用于封装客户端传给服务器的数据)

在这里插入图片描述

数据访问对象的开发示例

在这里插入图片描述

映射器:EmployeeDao接口

public interface EmployeeDao {
@Select("select * from emp") List
findEmployeeList(); List
findEmployeeListByName(String e_name); List
findEmployeeListByDate(Date e_date);}

映射文件:EmployeeDao.xml

业务对象开发示例

在这里插入图片描述

业务接口:TestService

public interface TestService {
List
getEmployeeList(); List
getEmployeeList(String e_name); List
getEmpList(Date e_date);}

业务实现类:TestServiceImpl

@Service // 声明为业务对象@Transactional //声明本类所有方法都是事务性的public class TestServiceImpl implements TestService {
@Autowired //配置自动依赖注入 private EmployeeDao employeeDao; @Override public List
getEmployeeList() {
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); }}

控制器开发示例

在这里插入图片描述

控制器:TestController

@RestController //声明控制器组件,且本组件的处理方法一律向客户端发送请求体。public class TestController {
@Autowired private TestService testService; @RequestMapping("/hello") public String sayHello() {
return "大家好!"; } @RequestMapping("/data") public Map
outData(){
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/

你可能感兴趣的文章
No.175 - LeetCode1306
查看>>
No.176 - LeetCode1309
查看>>
No.182 - LeetCode1325 - C指针的魅力
查看>>
mysql:sql alter database修改数据库字符集
查看>>
mysql:sql truncate (清除表数据)
查看>>
yuv to rgb 转换失败呀。天呀。谁来帮帮我呀。
查看>>
yuv420 format
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>