• un8.15:SpringBoot——集成MyBatis+SpringMVC


    今天我给大家分享的是SpringBoot集成mybatis+SpringMVC,所需软件:JDK1.8、IDEA、MYSQL。

    一、新建项目,之前的博客中有提到,在这里就不多说了,建好后修改pom.xml文件,如下:

    1. <project xmlns="http://maven.apache.org/POM/4.0.0"
    2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. <modelVersion>4.0.0modelVersion>
    5. <parent>
    6. <groupId>org.springframework.bootgroupId>
    7. <artifactId>spring-boot-starter-parentartifactId>
    8. <version>1.5.2.RELEASEversion>
    9. parent>
    10. <groupId>cn.personal.qin.demogroupId>
    11. <artifactId>springboot_demoartifactId>
    12. <version>0.0.1-SNAPSHOTversion>
    13. <packaging>warpackaging>
    14. <name>springbootname>
    15. <url>http://maven.apache.orgurl>
    16. <properties>
    17. <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
    18. <java.version>1.8java.version>
    19. properties>
    20. <dependencies>
    21. <dependency>
    22. <groupId>junitgroupId>
    23. <artifactId>junitartifactId>
    24. <scope>testscope>
    25. dependency>
    26. <dependency>
    27. <groupId>org.springframework.bootgroupId>
    28. <artifactId>spring-boot-starter-webartifactId>
    29. dependency>
    30. <dependency>
    31. <groupId>mysqlgroupId>
    32. <artifactId>mysql-connector-javaartifactId>
    33. dependency>
    34. <dependency>
    35. <groupId>org.mybatis.spring.bootgroupId>
    36. <artifactId>mybatis-spring-boot-starterartifactId>
    37. <version>1.3.2version>
    38. dependency>
    39. <dependency>
    40. <groupId>org.mybatisgroupId>
    41. <artifactId>mybatis-springartifactId>
    42. <version>1.3.1version>
    43. dependency>
    44. <dependency>
    45. <groupId>org.mybatisgroupId>
    46. <artifactId>mybatisartifactId>
    47. <version>3.5.0version>
    48. dependency>
    49. <dependency>
    50. <groupId>com.jolboxgroupId>
    51. <artifactId>bonecp-springartifactId>
    52. <version>0.8.0.RELEASEversion>
    53. dependency>
    54. <dependency>
    55. <groupId>org.springframeworkgroupId>
    56. <artifactId>spring-txartifactId>
    57. dependency>
    58. <dependency>
    59. <groupId>org.springframeworkgroupId>
    60. <artifactId>spring-jdbcartifactId>
    61. dependency>
    62. <dependency>
    63. <groupId>org.springframeworkgroupId>
    64. <artifactId>spring-aspectsartifactId>
    65. dependency>
    66. <dependency>
    67. <groupId>org.apache.tomcat.embedgroupId>
    68. <artifactId>tomcat-embed-jasperartifactId>
    69. <scope>providedscope>
    70. dependency>
    71. dependencies>
    72. <build>
    73. <finalName>${project.artifactId}finalName>
    74. <plugins>
    75. <plugin>
    76. <groupId>org.apache.maven.pluginsgroupId>
    77. <artifactId>maven-resources-pluginartifactId>
    78. <configuration>
    79. <encoding>UTF-8encoding>
    80. configuration>
    81. plugin>
    82. <plugin>
    83. <groupId>org.apache.maven.pluginsgroupId>
    84. <artifactId>maven-compiler-pluginartifactId>
    85. <configuration>
    86. <source>1.7source>
    87. <target>1.7target>
    88. <encoding>UTF-8encoding>
    89. configuration>
    90. plugin>
    91. <plugin>
    92. <groupId>org.springframework.bootgroupId>
    93. <artifactId>spring-boot-maven-pluginartifactId>
    94. plugin>
    95. plugins>
    96. <pluginManagement>
    97. <plugins>
    98. <plugin>
    99. <groupId>org.apache.tomcat.mavengroupId>
    100. <artifactId>tomcat7-maven-pluginartifactId>
    101. <version>2.2version>
    102. plugin>
    103. plugins>
    104. pluginManagement>
    105. build>
    106. project>

    二、创建包,创建controller类,如下:

    1. package org.personal.qin.demo;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.context.annotation.Configuration;
    5. import org.springframework.stereotype.Controller;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.ResponseBody;
    8. @Controller //springmvc的controller控制器
    9. @SpringBootApplication //springboot核心注解,目的是开启自动配置,scan会自动扫描该类所在的包或者子包
    10. @Configuration
    11. public class MainApplication {
    12. @RequestMapping("hello")
    13. @ResponseBody
    14. public String hello() {
    15. return "hello world!";
    16. }
    17. public static void main(String[] args) {
    18. SpringApplication.run(MainApplication.class, args);
    19. }
    20. }

    通过代码可以发现,hello方法是一个controller方法,我们通过浏览器访问hello就可以访问该controller。由于SpringBoot内置了Tomcat所以Web项目不需要部署,直接运行即可:鼠标右键-->run as-->Java Application 

    三、测试,网址:http://127.0.0.1:8080/hello 

     四、将配置文件拷贝到src/main/resources文件夹中。

     五、配置mybatis。

    1、MyBatis目录配置类Cast,Cast.java类的作用是用于配置MyBatis中配置文件及mapper、pom的位置。

    1. package org.personal.qin.demo.config;
    2. public class Cast {
    3. //配置MyBatis
    4. public static final String MYBATIS_CONFIG = "classpath:mybatis-config.xml";
    5. public static final String PO_PACKAGE = "org.personal.qin.demo.po";
    6. public static final String MAPPER_PACKAGE = "org.personal.qin.demo.mapper";
    7. public static final String MAPPER_SCANNER = "classpath:config/mapper/*.xml";
    8. }

    2、MyBatis加载配置文件及配置数据源MyBatisConfig,MyBatisConfig.java类的作用是加载MyBatis配置文件,并配置数据源。

    1. package org.personal.qin.demo.config;
    2. import javax.sql.DataSource;
    3. import org.apache.ibatis.session.SqlSessionFactory;
    4. import org.mybatis.spring.SqlSessionFactoryBean;
    5. import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
    6. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    7. import org.springframework.context.annotation.Bean;
    8. import org.springframework.context.annotation.Configuration;
    9. import org.springframework.core.io.Resource;
    10. import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
    11. import org.springframework.core.io.support.ResourcePatternResolver;
    12. @Configuration
    13. public class MyBatisConfig {
    14. /**
    15. * ConditionalOnMissingBean当容器里没有指定的Bean的情况下创建该对象
    16. */
    17. @Bean
    18. @ConditionalOnMissingBean
    19. public SqlSessionFactory sqlSessionFactoryBean(DataSource dataSource) throws Exception {
    20. SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
    21. // 设置数据源
    22. sqlSessionFactoryBean.setDataSource(dataSource);
    23. // 添加一行如下代码,解决setTypeAliasesPackage别名设置不起作用问题
    24. sqlSessionFactoryBean.setVfs(SpringBootVFS.class);
    25. //设置mybatis的主配置文件
    26. ResourcePatternResolver resourceResolver = new PathMatchingResourcePatternResolver();
    27. Resource mybatisConfigXml = resourceResolver.getResource(Cast.MYBATIS_CONFIG);
    28. sqlSessionFactoryBean.setConfigLocation(mybatisConfigXml);
    29. // 设置别名包
    30. sqlSessionFactoryBean.setTypeAliasesPackage(Cast.PO_PACKAGE);
    31. PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
    32. sqlSessionFactoryBean.setMapperLocations(resolver.getResources(Cast.MAPPER_SCANNER));
    33. return sqlSessionFactoryBean.getObject();
    34. }
    35. }

    3、Mapper扫描MapperScannerConfig,MapperScannerConfig.java类的作用是扫描Mapper。

    1. package org.personal.qin.demo.config;
    2. import org.mybatis.spring.mapper.MapperScannerConfigurer;
    3. import org.springframework.boot.autoconfigure.AutoConfigureAfter;
    4. import org.springframework.context.annotation.Bean;
    5. import org.springframework.context.annotation.Configuration;
    6. /**
    7. * 保证在MybatisConfig类实例化后才实例化此方法
    8. */
    9. @Configuration
    10. @AutoConfigureAfter(MyBatisConfig.class)
    11. public class MapperScannerConfig {
    12. /**
    13. * mapper接口的扫描器
    14. *
    15. * @return
    16. */
    17. @Bean
    18. public MapperScannerConfigurer mapperScannerConfigurer() {
    19. MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
    20. mapperScannerConfigurer.setBasePackage(Cast.MAPPER_PACKAGE);
    21. return mapperScannerConfigurer;
    22. }
    23. }

    五、配置SpringBoot。

    BootApplication.java文件的作用是配置SpringBoot,并加载jdbc配置文件,配置数据库及数据库连接池,MainApplication.java提供了main方法,是该程序的入口以供程序运行。

    1. package org.personal.qin.demo.config;
    2. import javax.sql.DataSource;
    3. import com.jolbox.bonecp.BoneCPDataSource;
    4. import org.springframework.beans.factory.annotation.Value;
    5. import org.springframework.boot.autoconfigure.SpringBootApplication;
    6. import org.springframework.boot.builder.SpringApplicationBuilder;
    7. import org.springframework.context.annotation.Bean;
    8. import org.springframework.context.annotation.ComponentScan;
    9. import org.springframework.context.annotation.Configuration;
    10. import org.springframework.context.annotation.PropertySource;
    11. /**
    12. * 配置文件读取和扫描
    13. */
    14. @Configuration
    15. @PropertySource(value = { "classpath:jdbc.properties" })
    16. @ComponentScan(basePackages = "org.personal.qin.demo")
    17. @SpringBootApplication
    18. public class BootApplication {
    19. @Value("${jdbc.driver}")
    20. private String driverClassName; // 数据库驱动
    21. @Value("${jdbc.url}")
    22. private String url; // 相应驱动的jdbcUrl
    23. @Value("${jdbc.username}")
    24. private String username; // 数据库的用户名
    25. @Value("${jdbc.password}")
    26. private String password; // 数据库的密码
    27. @Value("${jdbc.period_in_minutes}")
    28. private int periodInMinutes; // 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
    29. @Value("${jdbc.max_age_in_minutes}")
    30. private int maxAgeInMinutes; // 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
    31. @Value("${jdbc.max_connections_per_partition}")
    32. private int maxConnectionsPerPartition; // 每个分区最大的连接数
    33. @Value("${jdbc.min_connections_per_partition}")
    34. private int minConnectionsPerPartition; // 每个分区最小的连接数
    35. /**
    36. * 配置数据源
    37. *
    38. * @return
    39. */
    40. @Bean(destroyMethod = "close")
    41. public DataSource dataSource() {
    42. BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
    43. boneCPDataSource.setDriverClass(driverClassName);
    44. boneCPDataSource.setJdbcUrl(url);
    45. boneCPDataSource.setUsername(username);
    46. boneCPDataSource.setPassword(password);
    47. boneCPDataSource.setIdleConnectionTestPeriodInMinutes(periodInMinutes);
    48. boneCPDataSource.setIdleMaxAgeInMinutes(maxAgeInMinutes);
    49. boneCPDataSource.setMaxConnectionsPerPartition(maxConnectionsPerPartition);
    50. boneCPDataSource.setMinConnectionsPerPartition(minConnectionsPerPartition);
    51. return boneCPDataSource;
    52. }
    53. protected SpringApplicationBuilder springApplicationBuilder(SpringApplicationBuilder builder) {
    54. return builder.sources(BootApplication.class);
    55. }
    56. }

    六、开始编写业务层代码Pojo、Mapper、Controller

    1、Pojo
    User.java是Pojo

    1. package org.personal.qin.demo.po;
    2.  
    3. public class User {
    4.  
    5.     private int id;
    6.     private String name;
    7.     private String password;
    8.  
    9.     public int getId() {
    10.         return id;
    11.     }
    12.  
    13.     public void setId(int id) {
    14.         this.id = id;
    15.     }
    16.  
    17.     public String getName() {
    18.         return name;
    19.     }
    20.  
    21.     public void setName(String name) {
    22.         this.name = name;
    23.     }
    24.  
    25.     public String getPassword() {
    26.         return password;
    27.     }
    28.  
    29.     public void setPassword(String password) {
    30.         this.password = password;
    31.     }
    32.  
    33.     @Override
    34.     public String toString() {
    35.         return "【User】: name=" + name + ", password=" + password;
    36.     }
    37.  
    38. }

    2、Mapper
    UserMapper.java是Mapper接口,UserMapper.xml是操作数据库的配置文件。

    1. package org.personal.qin.demo.mapper;
    2.  
    3. import java.util.List;
    4.  
    5. import org.personal.qin.demo.po.User;
    6.  
    7. public interface UserMapper {
    8.  
    9.     /**
    10.      * 获取全部用户
    11.      * 
    12.      * @return
    13.      */
    14.     List<User> listAll();
    15.  
    16. }
    17. mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    18. <mapper namespace="org.personal.qin.demo.mapper.UserMapper">
    19.     <select id="listAll" resultType="User">
    20.         select * from t_user
    21.     select>
    22. mapper>

    3、Controller
    UserController.java是控制器,提供给web访问

    1. package org.personal.qin.demo.controller;
    2.  
    3. import java.util.List;
    4.  
    5. import org.personal.qin.demo.mapper.UserMapper;
    6. import org.personal.qin.demo.po.User;
    7. import org.springframework.beans.factory.annotation.Autowired;
    8. import org.springframework.stereotype.Controller;
    9. import org.springframework.web.bind.annotation.RequestMapping;
    10. import org.springframework.web.bind.annotation.ResponseBody;
    11.  
    12. @Controller
    13. public class UserController {
    14.  
    15.     @Autowired
    16.     private UserMapper mapper;
    17.  
    18.     @RequestMapping("/users")
    19.     @ResponseBody
    20.     public Object getAllUser() {
    21.         List users = mapper.listAll();
    22.         return users;
    23.     }
    24.  
    25. }

    七、浏览器测试,网址:http://127.0.0.1:8080/users
    运行MainApplication.java中的main方法

     八、在配置包下添加springMVCconfig。

    1. package org.personal.qin.demo.config;
    2. import java.nio.charset.Charset;
    3. import java.util.List;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import org.springframework.context.annotation.Configuration;
    7. import org.springframework.http.converter.HttpMessageConverter;
    8. import org.springframework.http.converter.StringHttpMessageConverter;
    9. import org.springframework.web.servlet.HandlerInterceptor;
    10. import org.springframework.web.servlet.ModelAndView;
    11. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    12. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    13. @Configuration //申明这是一个配置
    14. public class SrpingMVCConfig extends WebMvcConfigurerAdapter {
    15. /**
    16. * 自定义拦截器
    17. */
    18. @Override
    19. public void addInterceptors(InterceptorRegistry registry) {
    20. HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {
    21. @Override
    22. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    23. throws Exception {
    24. System.out.println("自定义拦截器............");
    25. return true;
    26. }
    27. @Override
    28. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    29. ModelAndView modelAndView) throws Exception {
    30. }
    31. @Override
    32. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
    33. Exception ex) throws Exception {
    34. }
    35. };
    36. registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");
    37. }
    38. /**
    39. * 自定义消息转化器的第二种方法
    40. */
    41. @Override
    42. public void configureMessageConverters(List> converters) {
    43. StringHttpMessageConverter converter = new StringHttpMessageConverter(Charset.forName("UTF-8"));
    44. converters.add(converter);
    45. }
    46. }

    九、测试,运行MainApplication.java中的main方法。

    如此,我们便在springboot中集成了mybatis和springVMC,快行动起来试试。 

  • 相关阅读:
    金仓数据库KingbaseES客户端编程接口指南-JDBC(9. JDBC 读写分离)
    【JAVA面试】JAVA面试指南
    淘宝API参数说明,代码数据生成
    离散数学 --- 命题逻辑 -- 命题符号化与命题公式
    【绝㊙️】三年开发内功心得
    npm run dev后浏览器没有出现页面
    【DS基础】栈与队列
    Nginx实现本地http转https请求
    ssm网络课程平台的设计与搭建
    Linux命令(二)(文件相关)
  • 原文地址:https://blog.csdn.net/m0_64818669/article/details/126343742