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);
    }
}

 

上一篇:150_员工管理系统:增删改查


下一篇:数据分析之Ajax(easyui项目的菜单加载与菜单联动操作)