MyBatis框架 简介、工作原理和基本应用

三种连接数据库的技术性能比较:

开源持久层框架,只管访问数据库

底层为jdbc

优点:性能最高,已掌握。

缺点:代码繁琐。

Hibernate 冬眠

不用写sql,代码简洁

性能不好  person.hbm.xml  cfg.xml两个配置文件,自动生成的dql效率低下,复杂业务

自动生成sql缺点很大。

MyBatis

优点:代码简洁,容易掌握

缺点:得写sql,性能一般。

 


工作原理:

sqlMapConfig.xml:用于加入数据库连接池,添加映射文件PersonMapper.xml,创建预编译的PerporedStatement方法。

sqlSessionFactory通过读取SqlMapFactory来创建Map,内容为键值对,其中为Statement,有了连接池就可以获得预编译。Map中键值对key为sql语句的id,值为sql语句。

java类中首先获得sqlsessionFactoryBuilder对象,新建数据流对配置文件进行读取,并获得sqlsessionFactory对象

sqlSessionFactory获得sqlsession对象,他会从map中依据sql id获取事先创建好的statement对象,然后执行。返回一个session对象。

session.insert方法中两个参数(test.save,e)

分别为namespace和sql id, e为实体类的实例化。

映射文件PersonMapper.xml用于书写sql语句。

#{pname}用于获得实体类对象中的get方法,加入sequence序列的类型。  parameterType为导入包的类型。





    

    INSERT INTO PERSON VALUES(seq_newsId.nextval,#{pname},#{pwd})

    

 

MyBatis框架 简介、工作原理和基本应用_第1张图片

 


编程步骤:四种数据库基本操作方法CRUD

1 导入jar包:myBatis

2 添加配置文件 sqlMapConfig.xml







    

    

    



       

    

    

    

       

           

                     

           

                

                

                

                

           

       

    

    

    

    

3 编写实体类

getter setter  有参构造无参构造

 

4 编写映射文件  里面写sql语句











    

    INSERT INTO PERSON VALUES(seq_newsId.nextval,#{pname},#{pwd})

    

5 调用SqlSession对象提供的方法来访问数据库。

public  static void test1() {

          String config = "sqlMapConfig.xml";

          // 创建SqlSessionFactoryBuilder对象

          SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();

          // 创建sqlSessionFactory对象 新建数据流对文件进行读取

          SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));

          SqlSession session = ssf.openSession();

          // 调用sqlSessionFactory提供的方法访问数据库

          Person a = new Person();

          a.setPname("Tony");

          a.setPwd("yuquan");

          session.insert("test.save", a);

          session.commit();

          session.close();

     }

public static void main(String[] args) {

          test1();

          System.out.println("插入成功");

     }

 

如果是查询,会先将记录中的数据放到一个Map对象中,字段名为key 字段值为value 

接下来将Map对象中的书库放在对应的实体对象里面。

所有创建SqlSession对象的方法都可以共同加入一个方法,方便调用:

public static SqlSession init() {

          String config = "sqlMapConfig.xml";

          // 创建SqlSessionFactoryBuilder对象

          SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();

          // 创建sqlSessionFactory对象 新建数据流对文件进行读取

          SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));

            SqlSession session = ssf.openSession();

          // 调用sqlSessionFactory提供的方法访问数据库

          return session;

     }


源代码:

PersonMapper.xml









    

    

       INSERT INTO PERSON VALUES(seq_newsId.nextval,#{pname},#{pwd})

    

    

    

    

       UPDATE PERSON SET pname=#{pname},pwd=#{pwd} WHERE pid = #{pid}

    

    

     DELETE  FROM  PERSON WHERE pid = #{asdasd}

    

TestCase.java

package Test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import org.junit.jupiter.api.Test;

import com.it.entity.Person;

public class TestCase {

    private   SqlSession session;

    //创建session对象

    public static SqlSession init() {

        String config = "sqlMapConfig.xml";

        // 创建SqlSessionFactoryBuilder对象

        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();

        // 创建sqlSessionFactory对象 新建数据流对文件进行读取

        SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));

          SqlSession session = ssf.openSession();

        // 调用sqlSessionFactory提供的方法访问数据库

        return session;
    }

//插入

    public static void test1() {

        Person a = new Person();

        a.setPname("Tonyzhang");

        a.setPwd("yuquan980730");

        SqlSession session=init();

        session.insert("test.save", a);

session.commit();

        System.out.println("插入");

        session.close();

    }

//查询所有

    public static void  test2() {

        /*String config = "sqlMapConfig.xml";

        // 创建SqlSessionFactoryBuilder对象

        SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();

        // 创建sqlSessionFactory对象 新建数据流对文件进行读取

        SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));

        SqlSession session = ssf.openSession();

        // 调用sqlSessionFactory提供的方法访问数据库

*/        SqlSession session=init();

        List list=session.selectList("test.queryAll");

         System.out.println("查询");

        System.out.println(list);

        for(Person a :list) {

            System.out.println(a);
        }
        session.close();
    }

//查询单个

    public static void test3() {

        SqlSession session=init();

        Person a=session.selectOne("test.queryOne",5);

        System.out.println(a);

        session.close();

    }

    //更新測試方法

    public static void test4() {


        SqlSession session=init();

        Person a=session.selectOne("test.queryOne", 5);

       System.out.println("查詢到的結果:"+a);

        a.setPname(a.getPname());

        a.setPwd("愛愛豆豆");

        session.update("test.update",a);

session.commit();

        System.out.println("修改完成");

        System.out.println("修改后的内容:"+a);

        session.close();

    }

    //删除

    public static void test5() {

        SqlSession session=init();

        Person a=session.selectOne("test.queryOne", 7);

        System.out.println("即将删除的结果:"+a);

        if(a!=null) {

        session.delete("test.delete",7);

        

        System.out.println("删除成功");

        }else {

            System.out.println("没有可以删除的内容");

        }

session.commit();

        session.close();
  
    }

    public static void main(String[] args) {

        test5();
    }
}

SQL语句在映射文件中写法较为特殊,需要记忆。

你可能感兴趣的:(MyBatis)