zoukankan      html  css  js  c++  java
  • spring boot 尚桂谷学习笔记10 数据访问02 mybatis

    数据访问 mybatis

      创建一个 springboot 工程,模块选择 sql 中 mysql(数据驱动), jdbc(自动配置数据源), mybatis Web模块中选择 web

      pom 引入:

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

      pom依赖关系图:也可以不引入jdbc 模块 mybatis依赖该模块

      

      创建基本的环境:参照上一章节 (数据源druid 等配置)

      新加入表 employee 并且设置 department 一起开机启动执行

    DROP TABLE IF EXISTS `employee`;
    
    CREATE TABLE `employee` (
      `id` int(10) NOT NULL,
      `lastName` char(20) DEFAULT NULL,
      `email` char(50) DEFAULT NULL,
      `gender` smallint(1) DEFAULT NULL,
      `d_id` int(10) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

      yum 配置文件如下:

    spring:
      datasource:
        password: 101022li
        username: root
        url: jdbc:mysql://192.168.10.129:3306/mybatis
        driver-class-name: com.mysql.jdbc.Driver
        type: com.alibaba.druid.pool.DruidDataSource
        initialSize: 5
        minIdle: 5
        maxActive: 5
        maxWait: 60000
        timeBetweenEvictionRunsMillis: 60000
        minEvictableIdletimeMillis: 300000
        validationQuery: SELECT 1 FROM DUAL
        testWhileIDle: true
        testOnBorrow: false
        testOnReturn: false
        poolPreparedStatements: true
    # 配置监控系统拦截的filters 去掉后监控界面sql无法统计 wall 用于防火墙
        filters: stat,wall,log4j
    #    maxPoolPreparedStatmentPerConnectionSize: 20
    #   useGlobalB
        # 配置执行sql目录下的sql
        schema:
          - classpath:sql/department.sql
          - classpath:sql/employee.sql

      设置 employee bean 以及 department bean 设置好 get set 方法

    employee
        private Integer id;
        private String lastName;
        private Integer gender;
        private String email;
        private Integer did;
    
    department
        private Integer id;
        private String departmentName;

      注解版:

        创建一个mapper文件

    package com.lixuchun.springboot.mapper;
    
    import com.lixuchun.springboot.bean.Department;
    import org.apache.ibatis.annotations.*;
    
    // 这是一个操作数据库的mapper
    @Mapper
    public interface DepartmentMapper {
    
        @Select("select * from department where id=#{id}")
        public Department getDepartmentById(Integer id);
    
        @Delete("delete from department where id=#{id}")
        public Integer deleteDeptById(Integer id);
    
        @Options(useGeneratedKeys = true, keyProperty = "id")
        @Insert("insert into department(departmentName) values(#{departmentName})")
        public Integer insertDept(Department department);
    
        @Update("update department set departmentName=#{departmentName} where id=#{id}")
        public Integer updateDept(Department department);
    }

        创建一个 controller 文件:

    package com.lixuchun.springboot.Controller;
    
    import com.lixuchun.springboot.bean.Department;
    import com.lixuchun.springboot.mapper.DepartmentMapper;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class DeptController {
    
        @Autowired
        DepartmentMapper departmentMapper;
    
        @GetMapping("/dept/{id}")
        public Department getDeptment(@PathVariable("id") Integer id) {
            return departmentMapper.getDepartmentById(id);
        }
    
        @GetMapping("/dept")
        public Department insertDept(Department department) {
            departmentMapper.insertDept(department);
            return department;
        }
    }

        浏览器访问:

          localhost:8080/dept/2 查询deptId=2 的 部门信息

          localhost:8080/dept?departmentName=coding1 插入部门信息 研发部 正常查询插入

        问题:当前 数据库cloum 字段名称和类中字段名称相同 如果不同情况下处理流程如下:

          将 数据库中 departmentName 列名 修改成 department_name 

          对应 mapper 文件中 @Select @Insert 两个sql 注释方法中 修改列名称

            查询发现  localhost:8080/dept/2 只能查询出 id  名称查询不出来 不能映射

          新建一个 MybatisConfig 类 进行mybatis配置:configurationCustomizer

    package com.lixuchun.springboot.config;
    
    import org.apache.ibatis.session.Configuration;
    import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
    import org.springframework.context.annotation.Bean;
    
    @org.springframework.context.annotation.Configuration
    public class MybatisConfig {
    
        @Bean
        public ConfigurationCustomizer configurationCustomizer() {
            return new ConfigurationCustomizer() {
                @Override
                public void customize(Configuration configuration) {
                    // 开启驼峰命名规则
                    configuration.setMapUnderscoreToCamelCase(true);
                }
            };
        }
    
    }

           每一个mapper 类中 都有 @mapper 注解 如果有多个 mapper类非常麻烦

            可以在启动类 使用 @MapperScan注释进行批量扫描配置,代替@mapper 注释-》 Springboot06DataMybatisApplication:

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

      配置文件版:

        http://www.mybatis.org/mybatis-3/zh/index.html mybatis 参考文档

        配置yum 配置文件 新增 mybatis 配置内容

    # mybatis 配置
    mybatis:
      config-location: classPath:mybatis/mybatis-config.xml
      mapper-locations: classPath:mybatis/mapper/EmployeeMapper.xml

        在resource 文件夹下创建 mybatis/mapper 文件夹 并且创建 EmployeeMapper.xml 以及 Mybatis-config.xml 配置文件

        

          EmployeeMapper.xml 模板参照  上面 给出 mybatis 参考文档

    <?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.lixuchun.springboot.mapper.EmployeeMapper">
        <!--
            public Employee getEmployeeById(Integer id);
    
            public void insertEmployee(Employee employee);
        -->
        <select id="getEmployeeById" resultType="com.lixuchun.springboot.bean.Employee">
            SELECT * FROM employee WHERE id=#{id}
        </select>
    
        <insert id="insertEmployee">
            INSERT INTO employee(lastName, email, gender, d_id) VALUES (#{lastName}, #{email}, #{gender}, #{dId})
        </insert>
    </mapper>

          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>

          EmployeeMapper.java 文件内容

    package com.lixuchun.springboot.mapper;
    
    import com.lixuchun.springboot.bean.Employee;
    import org.apache.ibatis.annotations.Mapper;
    
    @Mapper
    public interface EmployeeMapper {
    
        public Employee getEmployeeById(Integer id);
    
        public void insertEmployee(Employee employee);
    
    }

          DeptController 内容增加 employee 访问

    @Autowired
    EmployeeMapper employeeMapper;
    
    @GetMapping("/emp/{id}")
    public Employee getEmployeeById(@PathVariable("id") Integer id) {
        Employee employee = employeeMapper.getEmployeeById(id);
        System.out.println(employee.getLastName());
         return employee;
    }

           访问 localhost:8080/emp/1 正常返回json结果

     

  • 相关阅读:
    Reusable action with query database
    Oracle实现分组统计记录
    Oracle行列转换的几种实现方法
    junit私有方法测试
    Junit实现抽象类测试(二)
    C++的性能C#的产能?! .Net Native 系列《二》:.NET Native开发流程详解
    C++的性能C#的产能?! .Net Native 系列向导
    c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥
    辞职敬礼
    WPF 心路历程
  • 原文地址:https://www.cnblogs.com/lixuchun/p/9141377.html
Copyright © 2011-2022 走看看