spring boot 尚桂谷学习笔记08 数据访问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结果

 

 https://www.bilibili.com/video/av23478787/?p=66

猜你喜欢

转载自www.cnblogs.com/lixuchun/p/9141377.html