Mybatis框架快速入门-3

Posted Soleili

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mybatis框架快速入门-3相关的知识,希望对你有一定的参考价值。

       MyBatis 对象分析

 对象使用

  SqlSession , SqlSessionFactory 等

(1) Resources 类  

  Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通 过加载并解析资源文件,返回不同类型的 IO 流对象。

(2) SqlSessionFactoryBuilder 类

    SqlSessionFactory 的创建,需要使用 SqlSessionFactoryBuilder 对象的 build()方法。由于 SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完 成了其历史使命,即可被销毁。所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。

(3) SqlSessionFactory 接口

  SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是 线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。

  a) openSession(true):创建一个有自动提交功能的 SqlSession

  b)openSession(false):创建一个非自动提交功能的 SqlSession,需手 动提交

  c)openSession():同 openSession(false)

(4) SqlSession 接口

  SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次 数据库会话,一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的 关闭结束。

  SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要 马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。

 

  创建工具类

  (1) 创建 MyBatisUtil 类

  

package com.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils 
    private static SqlSessionFactory factory= null;
    static 
        String config="Mybatis.xml";
        try 
            InputStream in =  Resources.getResourceAsStream(config);
            factory = new SqlSessionFactoryBuilder().build(in);
         catch (IOException e) 
            e.printStackTrace();
        
    

    //创建方法,获取SqlSession对象
    public static SqlSession getSqlSession()
        SqlSession session = null;
        if (factory != null)
             session =factory.openSession();
        
        return session;
    

  (2) 使用 MyBatisUtil 类

 

package com.hrf;

import com.domain.Student;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyTest 
    @Test
    public void testSelectById()
    //1.获取SqlSession
        SqlSession session = MybatisUtils.getSqlSession();
        //2.指定SqlId
        String sqlId = "com.dao.StudentDao.selectById";
        //3.执行SqlSession的方法,表示执行sql语句
        Student student =session.selectOne(sqlId,1001);
        System.out.println("查询结果====="+student);
        //关闭SqlSession对象
        session.close();
    

    @Test
    public void testselectStudents()
        //获取session对象
        SqlSession session = MybatisUtils.getSqlSession();
        //指定sqlId
        String sqlId = "com.dao.StudentDao.selectStudents";
        //执行sql语句
        List<Student> li = session.selectList(sqlId);
        for (Student stu:li)
            System.out.println("student=="+stu);
        
        session.close();

    

    @Test
    public void testInsertStudent()
        SqlSession session = MybatisUtils.getSqlSession();
        String sqlId = "com.dao.StudentDao.insertStudent";
        Student student = new Student();
        student.setAge(19);
        student.setId(1005);
        student.setName("划为");
        student.setEmail("852@qq.com");
        int i = session.insert(sqlId,student);
        session.commit();
        System.out.println("影响数据库行数"+i);
        session.close();
    

 2.3 MyBatis 使用传统 Dao 开发方式

 使用 Dao 的实现类,操作数据库

  2.3.1创建dao接口的实现类

   

package com.impl;

import com.dao.StudentDao;
import com.domain.Student;
import com.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class StudentDaoImpl implements StudentDao 
    @Override
    public Student selectById(Integer id) 
        SqlSession session = MybatisUtils.getSqlSession();
        String sqlId = "com.dao.StudentDao.selectById";
        Student student = session.selectOne(sqlId, id);
        session.close();
        return student;
    

    @Override
    public List<Student> selectStudents() 
        //获取session对象
        SqlSession session = MybatisUtils.getSqlSession();
        //指定sqlId
        String sqlId = "com.dao.StudentDao.selectStudents";
        //执行sql语句
        List<Student> li = session.selectList(sqlId);
        session.close();
        return li;
    

    @Override
    public int insertStudent(Student student) 
        SqlSession session = MybatisUtils.getSqlSession();
        String sqlId = "com.dao.StudentDao.insertStudent";
        int insert = session.insert(sqlId,student);
        session.commit();
        session.close();
        return insert;
    

  2.3.2使用dao实现类

  

package com.hrf;

import com.dao.StudentDao;
import com.domain.Student;
import com.impl.StudentDaoImpl;
import org.junit.Test;

import java.util.List;

public class MyTest2 
    @Test
    public void StudentDaoImplSelectOne()
        StudentDao studentDao = new StudentDaoImpl();
        Student student = studentDao.selectById(1001);
        System.out.println("查询学生信息"+student);
    

    @Test
    public void StudentDaoImplSelectList()
        StudentDao studentDao = new StudentDaoImpl();
        List<Student> students = studentDao.selectStudents();
        for( Student student :students)
            System.out.println("学生信息"+student);
        
    

    @Test
    public void StudentDaoImplInsertStudent()
        Student student = new Student();
        student.setName("里瓦");
        student.setId(1006);
        student.setAge(25);
        student.setEmail("thg@qq.com");
        StudentDao studentDao = new StudentDaoImpl();
        int i = studentDao.insertStudent(student);
        System.out.println("影响数据库行数"+i);
    

 

以上是关于Mybatis框架快速入门-3的主要内容,如果未能解决你的问题,请参考以下文章

重温SSM框架系列11 - Mybatis快速入门(JDBC开发步骤,配置文件)

MyBatis 01 快速入门

mybatis框架快速入门

Mybatis 框架理解与快速入门详解

持久层框架 Mybatis快速入门

MyBatis 框架之快速入门程序