SpringBoot构建微服务实战 之 整合Mybatis(二)

前言

本节我们将学习一下SpringBoot整合Mybatis,首先说明一下,SpringBoot 整合Mybatis主流的由两种:基于注解形式的,基于配置形式的(推荐使用。)


基于注解的整合

我之前有些过一篇,请移步至:SpringBoot构建微服务实战 之 整合Mybatis(一)


基于配置的整合

首先SpringBoot 以配置的方式整合Mybatis 的先决条件:需要配置DataSource,因而本节将基于 SpringBoot构建微服务实战 之 DataSource(二) 来学习。

  • Maven 构建新的SpringBoot项目
    这里写图片描述
  • 引入Mybatis及相关依赖

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <mybatis-spring-boot-starter.version>1.1.1</mybatis-spring-boot-starter.version>
            <mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <!-- SpringBoot Web容器 -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <!-- SpringBoot集成mybatis框架 -->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>${mybatis-spring-boot-starter.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-jdbc</artifactId>
            </dependency>
    
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.8</version>
            </dependency>
    
            <!-- <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> 
                <version>0.9.1.2</version> </dependency> -->
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
  • 编写逻辑

    • ExmapleController.java

      @Controller
      @RequestMapping("/emxaple")
      public class ExmapleController {
      
          @Autowired
          private ExmapleSercive exmapleService;
      
          @RequestMapping("/addLock")
          @ResponseBody
          public int addLock() throws Exception{
              int ret = -1;
              Lock lock = new Lock("123","456");
              ret = exmapleService.insertLock(lock);
              return ret;
      
          }
      }
      
    • ExmapleDao.java

      public interface ExmapleDao {
      
          public int insertLock(Lock lock);
      }
      
    • Lock.java

      public class Lock implements Serializable {
      
          private String schedName;
          private String lockName;
      
      
          @Override
          public String toString() {
              return "Lock [schedName=" + schedName + ", lockName=" + lockName + "]";
          }
      
      
          public String getSchedName() {
              return schedName;
          }
      
      
          public void setSchedName(String schedName) {
              this.schedName = schedName;
          }
      
      
          public String getLockName() {
              return lockName;
          }
      
      
          public void setLockName(String lockName) {
              this.lockName = lockName;
          }
      
      
          public Lock() {
              super();
          }
      
      
          public Lock(String schedName, String lockName) {
              super();
              this.schedName = schedName;
              this.lockName = lockName;
          }
      
      
      
      }
    • ExmapleSercive.java

      public interface ExmapleSercive {
      
          public int insertLock(Lock lock);
      }
    • ExmapleServiceImpl.java

      @Service("exmapleService")
      public class ExmapleServiceImpl implements ExmapleSercive {
      
          @Autowired 
          private ExmapleDao exmapleDao;
      
          @Override
          public int insertLock(Lock lock) {
              int ret = -1;
              try {
                  ret = exmapleDao.insertLock(lock);
              } catch (Exception e) {
                  e.printStackTrace();
              }
              return ret;
          }
      
      
      }
    • DruidExmapleApplication.java

      @SpringBootApplication
      @MapperScan("com.example.demo.dao")
      public class DruidExmapleApplication {
      
          public static void main(String[] args) {
              SpringApplication.run(DruidExmapleApplication.class, args);
          }
      }
      
  • application.yml 全局设置

    
    #dubbo配置
    
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.jdbc.Driver
        #url: jdbc:mysql://10.213.24.45:3306/demo2?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
        url: jdbc:mysql://localhost:3306/demo2?useUnicode=true&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull
        username: root
        password: bai5331359
        # 初始化大小,最小,最大
        initialSize: 1
        minIdle: 3
        maxActive: 20
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 30000
        validationQuery: select 'x'
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        # 打开PSCache,并且指定每个连接上PSCache的大小
        poolPreparedStatements: true
        maxPoolPreparedStatementPerConnectionSize: 20
        # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
        filters: stat,wall,slf4j
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
        # 合并多个DruidDataSource的监控数据
        #useGlobalDataSourceStat: true
    
    
    #Mybatis Settings
    
    mybatis:
      #配置Mybatis typealias,Mapper XML 文件中将不再做繁琐的别名申明,一般扫描实体(包/类)    
      type-aliases-package: com.example.demo.dao
      config-location: classpath:mybatis/mybatis-config.xml
      mapper-locations: classpath:mybatis/mapper/*.xml
    
    
    #Server
    
    server:
      port: 8080
      tomcat:
        uri-encoding: utf-8
      servlet:
        context-path: /impact
  • mybatis-config.xml Mybatyis设置文件

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="cacheEnabled"        value="true" />  <!-- 全局映射器启用缓存 ,即二级缓存-->
            <setting name="useGeneratedKeys"    value="true" />  <!-- 允许 JDBC 支持自动生成主键 -->
            <setting name="defaultExecutorType" value="REUSE" /> <!-- 配置默认的执行器 -->
            <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- 开启驼峰名命名法 -->
            <setting name="logImpl"             value="SLF4J" /> <!-- 指定 MyBatis 所用日志的具体实现 -->
        </settings>
    </configuration>
  • ExmapleDao.xml Mapper 文件

    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.example.demo.dao.ExmapleDao">
        <resultMap type="Lock" id="LockResult">
            <result property="schedName"   column="sched_name"    />
            <result property="lockName"    column="lock_name"     />
        </resultMap>
    
        <insert id="insertLock" parameterType="Lock">
            insert into qrtz_locks (sched_name,lock_name) values ( #{schedName},#{lockName} )
        </insert>
    
    
    
    </mapper>
  • DB 表信息

    CREATE TABLE `qrtz_locks` (
      `sched_name` varchar(120) NOT NULL,
      `lock_name` varchar(40) NOT NULL,
      PRIMARY KEY (`sched_name`,`lock_name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    
  • 结果
    这里写图片描述


小结

  • SpringBoot整合Mybatis 一定要在启动类(DruidExmapleApplication.java)上添加 @MapperScan(“com.example.demo.dao”) 来扫描指定路径下的Mapper接口已将Dao层Bean注入到Spring IOC contianor中。
  • 本节中对于Lock 别名的申明我们交由Spring Scan Bean的装配来完成的,进而不用再Mybatis配置文件中做繁琐的别名申明了,一般在Application的配置文件中配置:mybatis.type-aliases-package=com.example.demo.entity(实体类集中的包),即可在Mapper xml 文件中引用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值