mybatis入门案例分析--------------SSM学习笔记之MyBatis(二)

本文详细解析了MyBatis框架下数据库操作的流程,包括连接数据库、映射配置、SQL执行及结果集处理,展示了如何通过代理DAO实现数据的增删改查。

查询的分析

连接数据库的信息

<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实现增删改查时使用的各种模式
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(类加载器,代理对象要实现接口的字节码,如何代理)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值