Mybaits 框架学习笔记
1. 导入 Mybaits 架包
2. 创建 Mybaits 核心配置文件
在 src 目录下创建 config.xml,它包含了使用 Mybaits 框架必要的配置信息,内容如下:
此步结束,MyBaits 框架的环境已经配置好了,下面是使用 MyBaits 操作表的步骤。
3. 根据表创建 Bean 类
表结构如下:
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 语句操作表了。
- 使用 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();
}
- 获取 SqlSession 实例
// Mybaits 默认是关闭自动提交事务的
SqlSession session = getSqlSessionFactory().openSession();
// 或者
// 获取自动提交事务的 SqlSession
SqlSession session = getSqlSessionFactory().openSession(true);
- 使用 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 架包。