package com.itheima.test;
import java.io.InputStream;
import com.itheima.dao.IUserDao;
import com.itheima.domain.User;
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.util.List;
/**
* mybatis入门案例
*/
public class MybatisTest {
public static void main(String[] args) throws Exception{
//1、读取配置文件,将文件中的信息进行加载
InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
**//读配置文件,使用类加载器,她只能读取类路径的配置文件,第二个使用ServletContext对象的getRealPath()**
//2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder =new SqlSessionFactoryBuilder();
SqlSessionFactory factory =builder.build(in);
**//创建工厂mybatis使用的构建者模式:把对象的创建细节隐藏,使使用者直接调用方法即可**
//3、使用工厂生产一个SqlSession对象
SqlSession session=factory.openSession();
/**生产SqlSeesion使用了工厂模式 优势:解耦(降低类之间的依赖关系)
//4、使用SqlSession创建Dao接口的代理对象
IUserDao userDao= session.getMapper(IUserDao.class);
**/getMapper 创建Dao接口实现类使用了代理模式 优势:不修改源码的基础上对已有方法增强**
//5、使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6、释放资源
session.close();
in.close();
}
}
自定义Mybatis分析
mybatis在使用代理dao实现增删改查时做了什么事呢?
两个事:
第一:创建代理对象
第二:在代理对象中调用selectList方法
连接数据库的信息
有了他们就能创建Connection 对象
在主配置文件当中SqlMapConfig.xml
<dataSource type="POOLED">
<!--配置连接数据库的4个基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
//有了映射配置信息
<mapper resource="com/itheima/dao/IUserDao.xml"/>
//有了执行的SQL语句 ,就可以获取preparedStatement,同时此配置中还有封装的实体类全限定类名 **在IuserDao.xml中**
<mapper namespace="com.itheima.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.itheima.domain.User">
select * from user
</select>
</mapper>
此处用的是dom4j的技术解析xml技术