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

    SpringBoot整合MyBatis

    系统要求

    Java 8+

    springBoot2.5 +

    创建springBoot项目工程

    导入依赖
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--Druid starter-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.22</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
    项目结构目录

    配置application.yaml
    spring:
      datasource:
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3307/webapp1?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
        username: webapp1
        password: webapp1
        type: com.alibaba.druid.pool.DruidDataSource
    
        #Spring Boot 默认是不注入这些属性值的,需要自己绑定
        #druid 数据源专有配置
        # 初始化大小,最小,最大
        initialSize: 5
        minIdle: 5
        maxActive: 200
        # 配置获取连接等待超时的时间
        maxWait: 60000
        # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
        timeBetweenEvictionRunsMillis: 60000
        # 配置一个连接在池中最小生存的时间,单位是毫秒
        minEvictableIdleTimeMillis: 300000
        # 用来检测连接是否有效的sql,要求是一个查询语句
        validationQuery: SELECT 1 FROM DUAL
        # 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
        testWhileIdle: true
        # 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
        testOnBorrow: false
        # 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
        testOnReturn: false
        # 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
        poolPreparedStatements: true
        # 要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。
        max-pool-prepared-statement-per-connection-size: 50
    
        #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
        #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
        #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
        filters: stat,wall,log4j
        # 合并多个DruidDataSource的监控数据
        useGlobalDataSourceStat: true
        # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
        connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
    
    mybatis:
      #sql映射文件的位置
    #  mapper-locations: classpath:com/xiang/mapper/*.xml
      mapper-locations: classpath:mapper/*.xml
      #开启驼峰命名转化
      configuration:
        map-underscore-to-camel-case: true
      #开启别名
      type-aliases-package: com.xiang
    
    
    创建User类
    package com.xiang.pojo;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    import org.springframework.stereotype.Component;
    
    import java.util.Date;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/17 23:52
     */
    @Component
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class User {
        private int id;
        private String username;
        private String age;
        private Date birthday;
    }
    
    
    创建UserMapper
    package com.xiang.mapper;
    
    import com.xiang.pojo.User;
    import org.apache.ibatis.annotations.Mapper;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/17 23:54
     */
    @Mapper
    @Repository
    public interface UserMapper {
        User findById(int id);
    
        List<User> findAll();
    }
    
    
    创建UserMapper.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.xiang.mapper.UserMapper">
    
        <select id="findById" resultType="user">
            select * from user where id = #{id}
        </select>
        <select id="findAll" resultType="user">
            select * from user
        </select>
    
    </mapper>
    
    创建UserService
    package com.xiang.service;
    
    import com.xiang.pojo.User;
    
    import java.util.List;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/18 15:01
     */
    public interface UserService {
        User findById(int id);
        List<User> findAll();
    }
    
    
    创建UserServiceImpl
    package com.xiang.service.impl;
    
    import com.xiang.mapper.UserMapper;
    import com.xiang.pojo.User;
    import com.xiang.service.UserService;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/18 15:02
     */
    @Service
    
    public class UserServiceImpl implements UserService {
        @Autowired
        private UserMapper userMapper;
    
        @Override
        public User findById(int id) {
            return userMapper.findById(id);
    
        }
    
        @Override
        public List<User> findAll() {
            return userMapper.findAll();
        }
    
    
    }
    
    
    运行测试
    package com.xiang;
    
    import com.alibaba.druid.pool.DruidDataSource;
    import com.xiang.pojo.User;
    import com.xiang.service.impl.UserServiceImpl;
    import org.junit.jupiter.api.Test;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import javax.sql.DataSource;
    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.List;
    import java.util.Map;
    
    @SpringBootTest
    class SpringBootDatabaseApplicationTests {
        @Autowired
        UserServiceImpl userService;
    
        /***
         * 根据id查
         */
        @Test
        public  void  findById(){
            User user = userService.findById(1);
            System.out.println(user);
        }
    
        /**
         * 查所有
         */
        @Test
        public  void  findAll(){
            System.out.println(userService.findAll());
            System.out.println("/*******************************************/");
            List<User> userList = userService.findAll();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    }
    
    
    测试运行结果

    创建UserController
    package com.xiang.controller;
    
    import com.xiang.pojo.User;
    import com.xiang.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    /**
     * Created by IntelliJ IDEA.
     * User: xiang
     * Date: 2021/10/18 22:03
     */
    @Controller
    public class UserController {
        @Autowired
        UserService userService;
    
        @RequestMapping("findById")
        @ResponseBody
        public String findById(@RequestParam("id") int id) {
            User byId = userService.findById(id);
            return byId.toString();
        }
    }
    
    
    前端运行结果

  • 相关阅读:
    使用xdebug调试PHP程序
    删除有序数组中的重复元素
    libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
    C++中的纯虚方法
    排序算法:堆排序算法实现及分析
    虚拟蜜罐honeyd安装使用
    软件目录结构规范(以python为例)
    python源码为何都是pass
    对类的实例直接赋值
    Path Analyzer Pro出现raw socket问题
  • 原文地址:https://www.cnblogs.com/d534/p/15422641.html
Copyright © 2011-2022 走看看