MyBatis基础

MyBatis基础

什么是MyBatis?

​ MyBatis是ssm三大框架之一,是一个可以自定义sql、存储过程和高级映射的持久层(Dao)框架。

为什么要使用MyBatis而不使用JDBC?
  • 原始JDBC的操作问题分析:

    • 频繁的创建和销毁数据库的连接会造成资源的浪费从而影响系统的性能
    • sql语句在代码中硬编码,如果我们要更改sql,就需要更改Java代码,后期维护较麻烦
    • 每次做查询操作时,都需要把数据封装到实体类中
    • 进行增删改操作需要参数的时候,需要手动的将实体类中的数据设置到对应的sql占位符
  • 解决方案:

    • 使用数据库连接池初始化连接的资源
    • 将sql语句写到配置文件当中
    • 使用反射、内省等技术将实体类和表进行属性和字段自动映射

MyBatis入门程序

  • 导入Jar包

  • 创建核心配置文件(MyBatisConfig.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">
    
  • 配置核心配置文件的信息

    
        <environments default="mysql">
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"></property>
    
                    <!--连接信息-->
                    <property name="url" value="jdbc:mysql://localhost:3306/userdb" ></property>
    
                    <!--数据库账号-->
                    <property name="username" value="root"></property>
    
                    <!--数据库密码-->
                    <property name="password" value="root"></property>
                </dataSource>
    
            </environment>
        </environments>
        <mappers>
            <mapper resource="StudentMapper.xml"></mapper>
        </mappers>
    </configuration>
    
  • 创建映射配置文件(StudentMapper.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">
    
  • 创建一个Student的实体类

    package com.mybatis.domain;
    
    
    public class Student {
        private  int id;
        private  String name;
        private int age;
    
        public Student(int id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    
        public Student() {
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
        
    
        @Override
        public String toString() {
            return "Student{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
    
    
  • 在映射配置文件中写入查询所有学生的sql语句

    <mapper namespace="StudentMapper">
        <select id="selectAll" resultType="com.mybatis.domain.Student">
            select * from student
        </select>
    </mapper>
    
  • 创建Test类写Java代码

      /**
         * 查询所有学生信息
         * @throws Exception
         */
        @Test
        public void selectAll() throws Exception {
            //通过Resources载入配置文件
            InputStream is = Resources.getResourceAsStream("MyBatisConfig.xml");
    
            //创建SqlSessionFactoryBuilder对象,返回一个SqlSessionFactory
            SqlSessionFactory  sqlSessionFactory= new SqlSessionFactoryBuilder().build(is);
    
            //通过sqlSessionFactory.openSession获得sqlSession(重要)
            SqlSession sqlSession = sqlSessionFactory.openSession();
    
            //通过sqlSession返回一个List集合
            List<Student> list = sqlSession.selectList("StudentMapper.selectAll");
    
            //遍历集合
            for (Student student : list) {
                //处理结果
                System.out.println(student);
            }
            //释放资源
            sqlSession.close();
            is.close();
        }
    
    

Resources

  • org.apache.ibatis.io.Resources:加载资源的类

  • 核心方法

    返回值方法名说明
    InputStreamgetResourceAsStream(String fileName)通过类加载器返回指定资源的字节输入流

SqlSessionFactoryBuilder

  • org.apache.ibatis.session.SqlSessionFactoryBuilder:获取SqlSessionFactory工厂对象的功能类

  • 核心方法

    返回值方法名说明
    SqlSessionFactoryBuild(InputStream is)通过指定资源字节输入流获取SqlSession工厂对象

SqlSessionFactory

  • org.apache.ibatis.session.SqlSessionFactory:获取SqlSession构建者对象的工厂接口

  • 核心方法

    返回值方法名说明
    SqlSessionopenSession()获取SqlSession构建者对象,并开启手动提交事务(false)
    SqlSessionopenSqlSession(boolean autoCommit)获取SqlSession构建者对象,如果参数为true,则自动提交事务

SqlSession(重要)

  • org.apache.ibatis.session.SqlSession:构建者对象接口。用于执行sql、管理事务、接口代理

  • 核心方法

    返回值方法名说明
    ListselectList(String statement,Object paramter)执行查询sql语句,返回一个List集合
    TselectOne(String statement,Object paramter)执行查询sql语句,返回一个结果对象
    intinsert(String statement,Object paramter)执行添加sql语句,返回影响行数
    intupdate(String statement,Object paramter)执行修改sql语句,返回影响行数
    intdelete(String statement,Object paramter)执行删除sql语句,返回影响行数
    voidcommit()提交事务
    voidrollback()回滚事务
    TgetMapper(Class cls)获取指定接口的代理实现类对象
    voidclose()释放资源

MyBatis映射配置文件介绍

  • 映射配置文件就是数据和对象之间的映射关系以及要执行的sql语句

  • 标签介绍

    <?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属性:名称空间(可以理解为标识)
    -->
    <mapper namespace="com.mybatis.mapper.StudentMapper">
    <!--select:查询功能的标签
    	id:唯一标识
    	resultType:要封装到哪个对象中
    	parameterType:指定参数为什么类型
    -->
        <select id="selectAll" resultType="student" parameterType="student">
            select * from student
        </select>
    </mapper>
    

起别名

  • 因为每次在配置文件中写具体路径较为麻烦,所以我们需要取别名

    • typeAliases:起别名的标签

    • typeAlias:具体给哪个路径取别名

    • type:路径

    • alias:所取名称

       <!--起别名-->
          <typeAliases >
          <typeAlias type="com.mybatis.domain.Student" alias="student"></typeAlias>
          </typeAliases>
      
  • 效果

        <select id="selectAll" resultType="student" parameterType="student">
            select * from student
        </select>
    

LOG4J的使用

  • 在日常开发中,在排查问题时我们难免需要输出MyBatis真正执行的sql语句、参数、结果等信息,我们可以利用LOG4J的功能来实现执行信息的输出

  • 把log4j.properties文件复制在src中

  • 在核心配置文件中配置LOG4J

     <!--配置LOG4J-->
        <settings>
            <setting name="logImpl" value="log4j"/>
        </settings>
    

MyBatis核心配置文件介绍

  • 核心配置文件包含了MyBatis最核心的设置和属性信息。如数据库的连接、事务、连接池信息等

  • 标签介绍

    <?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="jdbc.properties"></properties>
    
        <!--配置LOG4J-->
        <settings>
            <setting name="logImpl" value="log4j"/>
        </settings>
        <!--起别名-->
        <typeAliases >
        <typeAlias type="com.mybatis.domain.Student" alias="student"></typeAlias>
        </typeAliases>
        <!--默认使用mysql标识-->
        <environments default="mysql">
            <!--标识-->
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"></property>
    
                    <!--连接信息-->
                    <property name="url" value="${url}" ></property>
    
                    <!--数据库账号-->
                    <property name="username" value="${username}"></property>
    
                    <!--数据库密码-->
                    <property name="password" value="${password}"></property>
                </dataSource>
    
            </environment>
        </environments>
    	 <!--mappers:引入映射配置文件-->
        <mappers>
    	<!--mapper:引入指定的映射配置文件-->
            <mapper resource="StudentMapper.xml"></mapper>
        </mappers>
    </configuration>
    

properties数据库连接配置文件引入

  • 因为在日常开发中,我们数据库的连接信息一般都是放在一个独立的文件中。

    driver:com.mysql.jdbc.Driver
    url:jdbc:mysql://localhost:3306/userdb
    username:root
    password:root
    
  • 在核心配置文件中引入数据库连接配置文件

    • properties:引入数据库的配置文件信息
    • resource:数据库连接配置文件路径
    • ${键名}:获取properties配置文件的数据库连接参数
      <!--引入数据库连接配置文件-->
        <properties resource="jdbc.properties"></properties>
        
        
        <!--默认使用mysql标识-->
        <environments default="mysql">
            <!--标识-->
            <environment id="mysql">
                <transactionManager type="JDBC"></transactionManager>
                <dataSource type="POOLED">
                    <property name="driver" value="${driver}"></property>
    
                    <!--连接信息-->
                    <property name="url" value="${url}" ></property>
    
                    <!--数据库账号-->
                    <property name="username" value="${username}"></property>
    
                    <!--数据库密码-->
                    <property name="password" value="${password}"></property>
                </dataSource>
    
            </environment>
        </environments>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值