美文网首页
Mybaits 框架学习笔记

Mybaits 框架学习笔记

作者: tingshuo123 | 来源:发表于2018-07-09 22:42 被阅读0次

Mybaits 框架学习笔记

1. 导入 Mybaits 架包

2. 创建 Mybaits 核心配置文件

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

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybaits" />
                <property name="username" value="root" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 可以添加多个Mapper -->
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

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

3. 根据表创建 Bean 类

表结构如下:


表: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 内容如下:

<?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">

<!-- namespace:给当前xml文件命名,区分sql块,以区分 -->
<mapper namespace="user">
    
    <!-- 定义sql语句 增、删、改、查 -->
    <select id="findByid" parameterType="int" resultType="bean.UserBean">
        SELECT * FROM t_user WHERE id = #{id};
    </select>
    
    <select id="findAll" resultType="bean.UserBean">
        SELECT * FROM t_user;
    </select>
    
    <insert id="insertUser" parameterType="bean.UserBean">
        INSERT INTO t_user(username, `password`) VALUE (#{username}, #{password});
    </insert>
    
    <delete id="deleteUserById" parameterType="int">
        DELETE FROM t_user WHERE id = #{id};
    </delete>
    
    <update id="updateUserPassword" parameterType="bean.UserBean">
        UPDATE t_user SET `password` = #{password} WHERE id = #{id};
    </update>
</mapper>

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<UserBean> 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<UserBean> findAll() {
        List<UserBean> 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 框架学习笔记

      本文链接:https://www.haomeiwen.com/subject/dbxxpftx.html