MyBaits概念

ORM:对象关系映射,是一个程序设计技术,用于实现面向对象编程语言里不同类型的数据之间的转换。
image.png
mybaits:对象关系映射(ORM)框架。常见的ORM框架还有:Hibernate,EclipseLink,JFinal等。

MyBatis的使用案例

  1. 添加依赖
    1. mybaits依赖
    2. 数据库驱动
    3. junit
  2. 创建数据库映射的实体类
  3. 配置mybatis-config.xml配置文件
  4. 配置mapper.xml接口映射的配置文件
  5. 测试

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.quail</groupId>
    7. <artifactId>MyBatis-01</artifactId>
    8. <version>1.0-SNAPSHOT</version>
    9. <dependencies>
    10. <dependency>
    11. <groupId>junit</groupId>
    12. <artifactId>junit</artifactId>
    13. <version>4.11</version>
    14. <scope>test</scope>
    15. </dependency>
    16. <!--mybatis依赖-->
    17. <dependency>
    18. <groupId>org.mybatis</groupId>
    19. <artifactId>mybatis</artifactId>
    20. <version>3.5.1</version>
    21. </dependency>
    22. <!--mysql驱动-->
    23. <dependency>
    24. <groupId>mysql</groupId>
    25. <artifactId>mysql-connector-java</artifactId>
    26. <version>8.0.22</version>
    27. </dependency>
    28. </dependencies>
    29. <!--
    30. 此配置用于编译mapper.xml
    31. 如果没有这个配置,将映射文件配置在接口下时,编译器不会读取
    32. 这个配置是告诉编译器去这个目录找xml,进行编译
    33. -->
    34. <build>
    35. <resources>
    36. <resource>
    37. <directory>src/main/java</directory>
    38. <includes>
    39. <include>**/*.xml</include>
    40. </includes>
    41. </resource>
    42. </resources>
    43. </build>
    44. </project>
    <?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:控制mybatis全局行为。
     setting name=“logImpl”:设置mybatis输出日志
     -->
     <!--    <settings>-->
     <!--        <setting name="logImpl" value="STDOUT_LOGGING"/>-->
     <!--    </settings>-->
     <!--
         环境配置:数据库的连接信息
         default:必须和某个environment的id值一样。
         告诉mybatis使用哪个数据库的连接信息。就是访问哪个数据库
     -->
     <environments default="mybatis">
         <!--
             environment:一个数据库信息的配置,环境
             id:唯一值,自定义,表示环境名称
         -->
         <environment id="mybatis">
             <!--
                 transactionManager:mybatis的事务类型
                 type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)
             -->
             <transactionManager type="JDBC"></transactionManager>
             <!--
                 dataSource:表示数据源,连接数据库
                 type:表示数据源的类型,POOLED表示使用连接池
             -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                 <property name="url" value="jdbc:mysql://localhost:3306/mis?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC"/>
                 <property name="username" value="root"/>
                 <property name="password" value="root"/>
             </dataSource>
         </environment>
     </environments>
    
     <!--sql mapper(sql映射文件)的位置-->
     <mappers>
         <mapper resource="com/quail/dao/TeacherMapper.xml"/>
     </mappers>
    </configuration>
    

    ```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">
    

```java
package com.quail.test;

import com.quail.pojo.Teacher;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.InputStream;

/**
 * @author quail
 * @date 2021/3/19 20:53
 * @TODO
 */
public class MybatisTest {
    @Test
    public void test(){
        // 获取配置文件流
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("mybatis-config.xml");
        // 创建连接
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = factory.openSession();
        // 执行sql语句
        Teacher teacher = sqlSession.selectOne("TeacherDao.queryById", 3l);
        System.out.println(teacher);
    }
}

MyBatis实现简单的CRUD

tips:-

  • (DML)增删改操作需要提交事务
  • 模糊查询时使用${}替换符,因为#{}占位符在’’(单引号)中不生效
  • 像分页查询这样需要传入多个参数的方法,要使用map来配合。mybatis的sqlSession执行sql语句的方法中没有可以创多个参数的方法,所以只能用map。

    <?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="TeacherDao">
      <select id="queryById" resultType="com.quail.pojo.Teacher">
          select * from teacher where teacherId = #{teacherId};
      </select>
    
      <insert id="create" parameterType="com.quail.pojo.Teacher">
          insert into teacher(teacherName,loginPass,teacherGender,teacherTel,status)
           values(#{teacherName},#{loginPass},#{teacherGender},#{teacherTel},#{status})
      </insert>
    
      <delete id="delete" parameterType="long">
          delete from teacher where teacherId = #{teacherId}
      </delete>
    
      <update id="update" parameterType="com.quail.pojo.Teacher">
          update teacher set teacherName = #{teacherName} where teacherId = #{teacherId}
      </update>
    
      <select id="limitQuery" parameterType="int" resultType="com.quail.pojo.Teacher">
          select * from teacher limit #{start},#{count}
      </select>
    
      <select id="likeQuery" parameterType="string" resultType="com.quail.pojo.Teacher">
          select * from teacher where teacherName like '%${value}%'
      </select>
    </mapper>
    

    ```java package com.quail.test;

import com.quail.pojo.Teacher; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test;

import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map;

/**

  • @author quail
  • @date 2021/3/19 20:53
  • @TODO */ public class MybatisTest { // 获取配置文件流 private InputStream in = this.getClass().getClassLoader().getResourceAsStream(“mybatis-config.xml”); // 创建连接 private SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); private SqlSession sqlSession = factory.openSession();

    private String mapper = “TeacherDao.”;

    @Test public void test(){

     Teacher teacher = sqlSession.selectOne("TeacherDao.queryById", 3l);
     System.out.println(teacher);
    

    }

    @Test public void testCreate(){

     Teacher teacher = new Teacher();
     teacher.setLoginPass("123");
     teacher.setStatus(1);
     teacher.setTeacherGender(2);
     teacher.setTeacherName("quail");
     teacher.setTeacherTel("1829392123");
     int insert = sqlSession.insert(mapper + "create", teacher);
     System.out.println(insert);
     // 增删改操作需要手动提交事务,DML
     sqlSession.commit();
    

    }

    @Test public void testDelete(){

     int delete = sqlSession.delete(mapper + "delete", 20l);
     sqlSession.commit();
    

    }

    @Test public void testUpdate(){

     Teacher teacher = new Teacher();
     teacher.setTeacherId(18l);
     teacher.setTeacherName("鹌鹑");
     int delete = sqlSession.delete(mapper + "update", teacher);
     System.out.println(delete);
     sqlSession.commit();
    

    }

    @Test public void testLimitQuery(){

     Map<String,Integer> map = new HashMap<String,Integer>();
     map.put("start",0);
     map.put("count",5);
     List<Teacher> list = sqlSession.selectList(mapper + "limitQuery",map);
     System.out.println(list);
    

    }

    @Test public void testLikeQuery(){

     String data = "双虎";
     List<Teacher> list = sqlSession.selectList(mapper + "likeQuery",data);
     System.out.println(list);
    

    } }

```