zoukankan      html  css  js  c++  java
  • SpringBoot整合Mybatis

    mybatis-spring-boot-starter

    mybatis-spring-boot-starter主要由两种解决方案,一种是使用注解解决一切问题,一种的简化后的老传统。

    当然任何模式都需要先引入mybatis-spring-boot-starter的pom文件,现在最新版本是

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.1</version>
    </dependency>

    无配置注解版

    1.添加maven文件

    <dependencies>
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jdbc</artifactId>
       </dependency>
     
       <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
     
       <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>2.1.1</version>
       </dependency>
     
       <dependency>
          <groupId>com.oracle.ojdbc</groupId>
          <artifactId>ojdbc8</artifactId>
          <scope>runtime</scope>
       </dependency>
     
       <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
       <dependency>
          <groupId>com.alibaba</groupId>
          <artifactId>druid</artifactId>
          <version>1.1.21</version>
       </dependency>
     
       <!-- https://mvnrepository.com/artifact/log4j/log4j -->
       <dependency>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
          <version>1.2.17</version>
       </dependency>
    </dependencies>

    2.application.yml添加相关配置

    spring:
      datasource:
        username: mine
        password: mine
        url: jdbc:oracle:thin:@127.0.0.1:1521:orcl
        driver-class-name: oracle.jdbc.driver.OracleDriver
        type: com.alibaba.druid.pool.DruidDataSource
        initialSize: 5
        minIdle: 5
        maxActive: 20
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdleTimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIdle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
        filters: stat,wall,log4j
        maxPoolPreparedStatementPerConnectionSize: 20
        useGlobalDataSourceStat: true
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

    Spring Boot 会自动加载spring.datasource.*相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中,对了,你一切都不用管了,直接拿起来使用就行了。

    在启动类中添加对 mapper 包扫描@MapperScan

    @MapperScan(value="com.demo.mapper")
    @SpringBootApplication
    public class DemoApplication {
       public static void main(String[] args) {
          SpringApplication.run(DemoApplication.class, args);
       }
    }

    或者直接在 Mapper 类上面添加注解@Mapper,建议使用上面那种,不然每个 mapper 加个注解也挺麻烦的。

    controller

    @RestController
    public class DeptController {
        @Autowired
        DepartmentMapper departmentMapper;
     
        @GetMapping("/dept/{id}")
        public Department getDepartment(@PathVariable("id") Integer id){
            return departmentMapper.getDeptById(id);
        }
     
        @GetMapping("/dept")
        public int insertDeptById(@PathVariable("id") Integer id,@PathVariable("departmentName") String departmentName){
            int ret = departmentMapper.insertDept(id,departmentName);
            return ret;
        }
    }

    开发mapper

    public interface DepartmentMapper {
        @Select("select * from SSH_DEPARTMENT where id=#{id}")
        public Department getDeptById(Integer id);
     
        @Delete("delete from SSH_DEPARTMENT where id=#{id}")
        public int deleteDeptById(Integer id);
        
        @Options(useGeneratedKeys = true,keyProperty = "id")
        @Insert("insert into SSH_DEPARTMENT(department_name) values(#{departmentName})")
        public int insertDept(Department department);
        
        @Update("update SSH_DEPARTMENT set departmentName=#{DEPARTMENT_NAME} where id=#{id}")
        public int updateDept(Department department);
    }
    • @Select 是查询类的注解,所有的查询均使用这个
    • @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。
    • @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值
    • @Update 负责修改,也可以直接传入对象
    • @delete 负责删除

    极简xml配置

    极简 xml 版本保持映射文件的老传统,接口层只需要定义空方法,系统会自动根据方法名在映射文件中找对应的 Sql

    配置

    pom 文件和上个版本一样,只是application.yml新增以下配置

    mybatis.config-location=classpath:mybatis/mybatis-config.xml
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

    mybatis-config.xml 配置

    <?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="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    </configuration>

    两种模式的选择

      两种模式各有特点,注解版适合简单快速的模式,其实像现在流行的这种微服务模式,一个微服务就会对应一个自己的数据库,多表连接查询的需求会大大的降低,会越来越适合这种模式。

      老传统模式比较适合大型项目,可以灵活的动态生成sql,方便调整sql,有的人就是爱写sql,再配上点存储过程,越复杂越好,感觉自己越牛,那你就用这个。

  • 相关阅读:
    使用Mutex实现程序单实例运行(c#)
    KMP(转载来自Matrix67原创)
    【转载】搞ACM的你伤不起(转载,不过这个神作实在是太经典了)
    POJ 3125 Printer Queue【打印队列】
    弱校ACM奋斗史
    POJ 2063 Investment
    程序员的艺术:排序算法舞蹈【视频】
    POJ 2063 Investment【经典完全背包】
    快速幂模板
    搞ACM的你伤不起(转载,不过这个神作实在是太经典了)
  • 原文地址:https://www.cnblogs.com/Gazikel/p/14911307.html
Copyright © 2011-2022 走看看