ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mybatis-映射文件

2021-11-16 01:00:59  阅读:167  来源: 互联网

标签:文件 映射 grade gradeId sqlSession student mybatis stuId public


目录

基本介绍

环境

/*
 Navicat Premium Data Transfer

 Source Server         : school
 Source Server Type    : MySQL
 Source Server Version : 80022
 Source Host           : localhost:3306
 Source Schema         : school

 Target Server Type    : MySQL
 Target Server Version : 80022
 File Encoding         : 65001

 Date: 15/11/2021 19:49:16
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for grade
-- ----------------------------
DROP TABLE IF EXISTS `grade`;
CREATE TABLE `grade`  (
  `gradeId` int(0) NOT NULL AUTO_INCREMENT,
  `gradeName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`gradeId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of grade
-- ----------------------------
INSERT INTO `grade` VALUES (1, 'S1');
INSERT INTO `grade` VALUES (2, 'Y1');

SET FOREIGN_KEY_CHECKS = 1;

/*
 Navicat Premium Data Transfer

 Source Server         : school
 Source Server Type    : MySQL
 Source Server Version : 80022
 Source Host           : localhost:3306
 Source Schema         : school

 Target Server Type    : MySQL
 Target Server Version : 80022
 File Encoding         : 65001

 Date: 15/11/2021 19:49:31
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `stuId` int(0) NOT NULL AUTO_INCREMENT,
  `stuName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `stuAge` int(0) NULL DEFAULT NULL,
  `stuBirth` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `gradeId` int(0) NOT NULL,
  PRIMARY KEY (`stuId`) USING BTREE,
  INDEX `gradeId`(`gradeId`) USING BTREE,
  CONSTRAINT `student_ibfk_1` FOREIGN KEY (`gradeId`) REFERENCES `grade` (`gradeId`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '张三', 18, '2010-10-02', 1);
INSERT INTO `student` VALUES (2, '李四', 18, '2002-10-02', 2);
INSERT INTO `student` VALUES (3, '王五', 16, '2005-10-02', 2);
INSERT INTO `student` VALUES (5, '赵六', 22, '2020-10-27 00:00:00.0', 1);
INSERT INTO `student` VALUES (6, '赵六', 22, '2020-10-27 00:00:00.0', 1);
INSERT INTO `student` VALUES (7, '田七', 22, '2021-05-18 17:13:40', 2);

SET FOREIGN_KEY_CHECKS = 1;
<?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>

    <properties resource="dbconfig.properties"/>
    
    <settings>
        <!--开启驼峰命名自动映射-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <typeAliases>
        <package name="com.fly.entity"/>
    </typeAliases>

    <environments default="development">
        <!--每个environment是一个环境,default属性指向使用哪个环境-->
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${db.driver}"/>
                <property name="url" value="${db.url}"/>
                <property name="username" value="${db.username}"/>
                <property name="password" value="${db.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--mybatis-config.xml-->
       <mapper resource="mapper/GradeMapper.xml"/>
    </mappers>

</configuration>

db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
db.username=root
db.password=123456

dbconfig.properties

package com.fly.entity;

import java.util.Date;

/**
 * @author 26414
 */
public class Student {

  private Integer stuId;
  private String stuName;
  private Integer stuAge;
  private Date stuBirth;

  @Override
  public String toString() {
    return "Student{" +
            "stuId=" + stuId +
            ", stuName='" + stuName + '\'' +
            ", stuAge=" + stuAge +
            ", stuBirth=" + stuBirth +
            ", grade=" + grade +
            '}';
  }

  private Grade grade;

  public Integer getStuId() {
    return stuId;
  }

  public void setStuId(Integer stuId) {
    this.stuId = stuId;
  }

  public String getStuName() {
    return stuName;
  }

  public void setStuName(String stuName) {
    this.stuName = stuName;
  }

  public Integer getStuAge() {
    return stuAge;
  }

  public void setStuAge(Integer stuAge) {
    this.stuAge = stuAge;
  }

  public Date getStuBirth() {
    return stuBirth;
  }

  public void setStuBirth(Date stuBirth) {
    this.stuBirth = stuBirth;
  }

  public Grade getGrade() {
    return grade;
  }

  public void setGrade(Grade grade) {
    this.grade = grade;
  }
}

package com.fly.dao;

import com.fly.entity.Grade;

/**
 * @author 26414
 */
public interface GradeMapper {

  /**
   * 根据id查询年级
   * @param gradeId 年级id
   * @return gradeId对应的年级
   */
  Grade getGradeById(Integer gradeId);

}

insert


 /**
   * GradeMapper
   * 添加年级
   * @param grade 年级对象
   */
  void insert(Grade grade);
   <!--GradeMapper.xml-->
    <insert id="insert">
        insert into grade values(null,#{gradeName})
    </insert>
  @Test
  public void test4() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      GradeMapper mapper = sqlSession.getMapper(GradeMapper.class);
      Grade grade = new Grade();
      grade.setGradeName("一年级");
      mapper.insert(grade);
      //手动提交事务
      sqlSession.commit();
    }
  }


返回主键

<!--GradeMapper.xml-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="gradeId">
        insert into grade values(null,#{gradeName})
    </insert>
 @Test
  public void test4() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      GradeMapper mapper = sqlSession.getMapper(GradeMapper.class);
      Grade grade = new Grade();
      grade.setGradeName("二年级");
      mapper.insert(grade);
      //手动提交事务
      sqlSession.commit();
      System.out.println("grade.getGradeId() = " + grade.getGradeId());
    }
  }


delete

 /**
   * GradeMapper
   * 根据id删除年级
   * @param gradeId 年级id
   */
  void deleteById(Integer gradeId);
   <!--GradeMapper.xml-->
    <delete id="deleteById">
        delete from grade where gradeId = #{gradeId}
    </delete>
 @Test
  public void test5() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      GradeMapper mapper = sqlSession.getMapper(GradeMapper.class);
      mapper.deleteById(8);
      //手动提交事务
      sqlSession.commit();
    }
  }


update

 /**
   * GradeMapper
   * @param grade 年级对象
   */
  void updateById(Grade grade);
  <!--GradeMapper.xml-->
    <update id="updateById">
        update grade set gradeName = #{gradeName} where gradeId = #{gradeId}
    </update>
 @Test
  public void test6() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      GradeMapper mapper = sqlSession.getMapper(GradeMapper.class);
      Grade grade = new Grade();
      grade.setGradeId(6);
      grade.setGradeName("一年级...");
      mapper.updateById(grade);
      //手动提交事务
      sqlSession.commit();
    }
  }


参数处理

单个参数

MyBatis可直接使用这个参数,不需要经过任何处理。

多个参数


会被MyBatis重新包装成一个Map传入。Map的key是param1,param2,arg0,arg1…,值就是参数的值。

package com.fly.dao;

import com.fly.entity.Student;

/**
 * @author 26414
 */
public interface StudentMapper {

  /**
   * StudentMapper
   * 根据姓名和年级查询学生
   * @param stuName 学生姓名
   * @param stuAge 学生年龄
   * @return 学生
   */
  Student selectByNameAndAge(String stuName,Integer stuAge);

}
 <!--StudentMapper.xml-->
    <select id="selectByNameAndAge" resultType="com.fly.entity.Student">
        select * from student where stuName = #{arg0} and stuAge = #{arg1}
    </select>
  <mappers>
        <!--mybatis-config.xml-->
        <mapper resource="mapper/GradeMapper.xml"/>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
  @Test
  public void test1() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
      Student student = mapper.selectByNameAndAge("张三", 18);
      System.out.println("student = " + student);
      //手动提交事务
      sqlSession.commit();
    }
  }


···xml

<select id="selectByNameAndAge" resultType="com.fly.entity.Student">
    select * from student where stuName = #{param1} and stuAge = #{param2}
</select>
![](https://www.icode9.com/i/l/?n=20&i=blog/2276392/202111/2276392-20211115234705480-1575124065.png)
###命名参数
为参数使用@Param起一个名字,MyBatis就会将这些参数封装进map中,key就是我们自己指定的名字
```java
  /**
   * StudentMapper
   * 根据姓名和年级查询学生
   * @param stuName 学生姓名
   * @param stuAge 学生年龄
   * @return 学生
   */
  Student selectByNameAndAge(@Param("stuName") String stuName, @Param("stuAge") Integer stuAge);
 <!--StudentMapper.xml-->
    <select id="selectByNameAndAge" resultType="com.fly.entity.Student">
        select * from student where stuName = #{stuName} and stuAge = #{stuAge}
    </select>


${}

{key}:获取参数的值,预编译到SQL中。安全。

${key}:获取参数的值,拼接到SQL中。有SQL注入问题。

select

映射

自动映射


1)autoMappingBehavior默认是PARTIAL,开启自动映射的功能。唯一的要求是列名和javaBean属性名一致
2)如果autoMappingBehavior设置为null则会取消自动映射
3)数据库字段命名规范,POJO属性符合驼峰命名法,如A_COLUMNaColumn,我们可以开启自动驼峰命名规则映射功能,mapUnderscoreToCamelCase=true。

自定义映射



association

/**
   * StudentMapper
   * 根据id查学生
   * @param stuId 学生id
   * @return 学生对象
   */
  Student selectById(@Param("stuId") Integer stuId);
 <resultMap id="fullResultMap" type="student">
        <id column="stuId" property="stuId"/>
        <result column="stuName" property="stuName"/>
        <result column="stuAge" property="stuAge"/>
        <result column="stuBirth" property="stuBirth"/>
        <association property="grade" javaType="grade">
            <id column="gradeId" property="gradeId"/>
            <result column="gradeName" property="gradeName"/>
        </association>
    </resultMap>
<!--StudentMapper.xml-->
    <select id="selectById" resultMap="fullResultMap">
        SELECT * FROM student s, grade g where stuId = #{stuId} and
            s.gradeId = g.gradeId
    </select>
 @Test
  public void test2() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
      Student student = mapper.selectById(1);
      System.out.println("student = " + student);
      //手动提交事务
      sqlSession.commit();
    }
  }


#######分段查询

 /**
   * StudentMapper
   * 根据id查学生
   * @param stuId 学生id
   * @return 学生对象
   */
  Student selectByIdAndStep(@Param("stuId") Integer stuId);
 <resultMap id="fullResultMapByStep" type="student">
        <id column="stuId" property="stuId"/>
        <result column="stuName" property="stuName"/>
        <result column="stuAge" property="stuAge"/>
        <result column="stuBirth" property="stuBirth"/>
        <association property="grade"
                     select="com.fly.dao.GradeMapper.getGradeById"
                     column="gradeId"/>
    </resultMap>
<!--StudentMapper.xml-->
    <select id="selectByIdAndStep" resultMap="fullResultMapByStep">
        select * from student where stuId = #{stuId}
    </select>
  @Test
  public void test3() throws IOException {
    String resource = "mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
      StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
      Student student = mapper.selectByIdAndStep(1);
      System.out.println("student = " + student);
      //手动提交事务
      sqlSession.commit();
    }
  }


#######延迟加载

   <settings>
        <!--开启驼峰命名自动映射-->
        <!--mybatis-config.xml-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="lazyLoadingEnabled" value="trie"/>
        <setting name="aggressiveLazyLoading" value="false"/>
    </settings>

标签:文件,映射,grade,gradeId,sqlSession,student,mybatis,stuId,public
来源: https://www.cnblogs.com/ftlzypx/p/15559281.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有