查询的分析
连接数据库的信息
<dataSource type="POOLED">
<!--配置连接数据库的基本信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
有了他们就能实现Connection对象。
映射配置信息
<mappers>
<mapper resource="com/itheima/dao/IUserDao.xml"/>
</mappers>
映射文件保存执行的sql语句
<mapper namespace="com.itheima.dao.IUserDao">
<!--配置查询所有-->
<select id="findAll" resultType="com.itheima.domain.user">
select * from user;
</select>
</mapper>
有了它,就可以获得preparedStatement
且此配置中还封装了实体类全限定类名。
selectList方法:
1.根据配置文件的信息创建Connection对象(注册驱动、获取链接等)
2.获取预处理对象PreparedStatement(sql)
此时需要具体的sql语句,conn.preparedStatement(sql语句)
3.执行sql语句
ResultSet resultSet = preparedStatement.executeQuery();
4.遍历结果集用于封装(此处使用反射封装)
List<E> list = new ArrayList();
while(resultSet.next()){
E element = (E)Class.forName(配置的全限定类名).newInstance()
进行封装,把每一个rs的内容都添加到emement中。
list。add(element);
}
5.返回list
return list;
由此可知,如果想要让selectList方法执行,我们需要提供两个信息:连接信息和映射信息。
其中映射信息包括sql语句和封装结果的实体类的全限定类名。在实际开发中,我们常把这两部分定义成一个对象,以此减少将来可能的对代码的反复修改。
代理的分析
mybatis在使用代理dao实现数据库操作
//读取配置文件
InputStream is =Resources.getResourceAsStream("SqlMapConfig.xml");
//创建一个SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
//使用工厂生产一个SqlSession对象
SqlSession sqlSession = factory.openSession();
//使用SqlSession创建dao接口的代理对象
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//使用代理对象执行方法
List<user> users = userDao.findAll();
for (com.itheima.domain.user user : users){
System.out.println(user);
}
//释放资源
sqlSession.close();
is.close();

mybatis在使用代理dao实现增删改查时做了什么?
1.创建代理对象
2.在代理对象中调用selectList
创建代理对象的封装内容
//使用SqlSession创建dao接口的代理对象
IUserDao userDao = sqlSession.getMapper(IUserDao.class);
//根据dao端口字节码创建dao的代理对象
public <T>T getMapper(Class<T> daoInterfaceClass){
//类加载器:与被代理对象使用同样的类加载器
//代理对象要实现的接口:和被代理对象实现相同的接口
//如何代理:它是增强的方法,需要我们提供
//此处是一个InvocationHandler接口,我们需要写一个该接口的实现类,在其中调用selectList方法。
Proxy.ProxyInstance(类加载器,代理对象要实现接口的字节码,如何代理)
}
本文详细解析了MyBatis框架下数据库操作的流程,包括连接数据库、映射配置、SQL执行及结果集处理,展示了如何通过代理DAO实现数据的增删改查。
1万+

被折叠的 条评论
为什么被折叠?



