测试代码:
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.InputStream;
import java.util.List;
public class MyBatisTest {
/**
* 入门案例
* @param args
*/
public static void main(String[] args) throws Exception{
//1. 读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
//2. 创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3. 使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4. 使用SqlSession创建Dao接口的代理对象
IUserDao userDao = session.getMapper(IUserDao.class);
//5. 使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users) {
System.out.println(user);
}
//6. 释放资源
session.close();
in.close();
}
}
读配置文件:
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
读配置文件方法:
- 读类加载器
- 使用SevletContext对象的getRealPath()
创建工厂
mybatis使用了构建者模式:builder是构建者,传入的只是输入就行。把对象的创建细节隐藏。
工厂模式
//3. 使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
使用工厂模式的好处:屏蔽new关键字,解决类之间的依赖关系,降低耦合
代理模式
IUserDao userDao = session.getMapper(IUserDao.class);
代理模式好处:不修改已有的代码基础上,实现对方法的增强