Mybaits 框架学习笔记

Mybaits 框架学习笔记

1. 导入 Mybaits 架包

2. 创建 Mybaits 核心配置文件

在 src 目录下创建 config.xml,它包含了使用 Mybaits 框架必要的配置信息,内容如下:






    
        
            
            
                
                
                
                
            
        
    
    
        
        
    

此步结束,MyBaits 框架的环境已经配置好了,下面是使用 MyBaits 操作表的步骤。

3. 根据表创建 Bean 类

表结构如下:


Mybaits 框架学习笔记_第1张图片
表:t_user

UserBean 类

package bean;

public class UserBean {
    
    private int id;
    private String username;
    private String password;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
    @Override
    public String toString() {
        return "UserBean [id=" + id + ", username=" + username + ", password=" + password + "]";
    }
}

4. 映射 sql 语句

创建 mapper,并在 mapper 下创建 UserMapper.xml,来映射 t_user 表的 sql 语句。
UserMapper.xml 内容如下:






    
    
    
    
    
    
    
        INSERT INTO t_user(username, `password`) VALUE (#{username}, #{password});
    
    
    
        DELETE FROM t_user WHERE id = #{id};
    
    
    
        UPDATE t_user SET `password` = #{password} WHERE id = #{id};
    

namespzce 属性可以随意命名,他的作用是区分 sql语句块。
id 属性用来标识具体的 sql 语句,Mybaits 框架就是通过 namespace.id 定位到具体的 sql 语句的。
parameterType 属性是执行 sql 语句需要的参数类型。

通过以上步骤已经可以使用可以使用 MyBaits 用 maper 里面配置好了的 sql 语句操作表了。

  1. 使用 XML 配置文件来生成一个 SqlSessionFactory 实例 fa
        // 加载配置文件
        String resource = "config.xml";
        InputStream is = null;
        SqlSessionFactory fa = null;
        try {
            is = Resources.getResourceAsStream(resource);
            fa = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 获取 SqlSession 实例
// Mybaits 默认是关闭自动提交事务的
SqlSession session = getSqlSessionFactory().openSession();
// 或者
// 获取自动提交事务的 SqlSession
SqlSession session = getSqlSessionFactory().openSession(true);
  1. 使用 SqlSession 对应的方法执行 mapper 中已经配置的方法,以执行 id 为 deleteUserById 的删除sql语句为例:
int id = 3;
session.delete("user.deleteUserById ", id);
// 关闭 session 释放资源
session.close()

ps:到此步已经完了,下面只是完善程序结构

每次执行 sql 语句,1、2步都要重复,只有第三步是变化的,可以将 1、2步封装成方法。

MybaitsUtil 类

package util;

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

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

public class MybaitsUtil {
    
    // SqlSessionFactory类是单例,只存在一个对象
    public static SqlSessionFactory getSqlSessionFactory() {
        // 加载配置文件
        String resource = "config.xml";
        InputStream is = null;
        SqlSessionFactory fa = null;
        try {
            is = Resources.getResourceAsStream(resource);
            fa = new SqlSessionFactoryBuilder().build(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return fa;
    }
    
    public static SqlSession getSqlSession() {
        // 默认手动提交事务
        SqlSession session = fa.openSession();
        return session;
    }
    
    public static SqlSession getSqlSession(boolean boo) {
        // 开启自动提交事务
        SqlSession session = fa.openSession(true);
        return session;
    }
}

5.创建操作表的接口

IUserDao 接口

package dao;

import java.util.List;

import bean.UserBean;

public interface IUserDao {
    // 添加用户
    public void insert(UserBean bean);
    // 根据id查询用户
    public void findByid(int id);
    // 查询所有用户
    public List findAll();
    // 通过id删除用户
    public void deleteUserById(int id);
    // 更新用户密码
    public void updateUserPassword(UserBean bean);
}

6.实现接口

UserDaoimpl 实现类

package dao.impl;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

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 bean.UserBean;
import dao.IUserDao;
import util.MybaitsUtil;

public class UserDaoImpl implements IUserDao {

    @Override
    public void insert(UserBean bean) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.insert("user.insertUser", bean);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            session.close();
        }
    }

    @Override
    public void findByid(int id) {
        SqlSession session = MybaitsUtil.getSqlSession();
        try {
             UserBean user = session.selectOne("user.findByid", id);
//           System.out.println(user);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Override
    public List findAll() {
        List list = null;
        SqlSession session = MybaitsUtil.getSqlSession();
        try {
            list = session.selectList("user.findAll");
//          System.out.println(list.size());
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        
        return list;
    }

    @Override
    public void deleteUserById(int id) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.delete("user.deleteUserById", id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }

    @Override
    public void updateUserPassword(UserBean bean) {
        SqlSession session = MybaitsUtil.getSqlSession(true);
        try {
            session.update("updateUserPassword", bean);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
    }
}

7. 测试(单元测试)

TestMain 单元测试类

package test;

import org.junit.Test;

import bean.UserBean;
import dao.IUserDao;
import dao.impl.UserDaoImpl;

public class TestMain {
    
    // 插入
    @Test
    public void test1() {
        IUserDao dao = new UserDaoImpl();
        UserBean user = new UserBean();
        user.setUsername("xiaowang");
        user.setPassword("xw123");
        dao.insert(user);
    }
    
    // 查找单个用户
    @Test
    public void test2() {
        IUserDao dao = new UserDaoImpl();
        dao.findByid(2);
    }
    
    // 查找所有
    @Test
    public void test3() {
        IUserDao dao = new UserDaoImpl();
        dao.findAll();
    }
    
    // 通过id删除用户
    @Test
    public void test4() {
        IUserDao dao = new UserDaoImpl();
        dao.deleteUserById(3);
    }
    
    // 修改密码
    @Test
    public void test5() {
        IUserDao dao = new UserDaoImpl();
        UserBean user = new UserBean();
        user.setId(4);
        user.setPassword("xw123");
        dao.updateUserPassword(user);
    }
}

使用 Eclipse 用鼠标放在测试函数上方,右击鼠标选择运行,就会执行单个测试函数,实现这种功能需要导入 junit.jar 架包。

你可能感兴趣的:(Mybaits 框架学习笔记)