长期化为什么需要Mybatis?
长期化是将步伐数据在长期状态和瞬时状态间转换的机制。
为什么需要长期化服务呢?那是由于内存本身的缺陷引起的
- 即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。长期化的紧张应用是将内存中的对象存储在数据库中,大概存储在磁盘文件中、XML数据文件中等等。
- JDBC就是一种长期化机制。文件IO也是一种长期化机制。
- 在生存中 : 将鲜肉冷藏,吃的时间再解冻的方法也是。将水果做成罐头的方法也是。
- 内存断电后数据会丢失,但有一些对象是无论如何都不能丢失的,比如银行账号等,遗憾的是,人们还无法保证内存永不掉电。
- 内存过于昂贵,与硬盘、光盘等外存相比,内存的价格要高2~3个数目级,而且维持成本也高,至少需要一直供电吧。以是纵然对象不需要永久保存,也会由于内存的容量限制不能一直呆在内存中,需要长期化来缓存到外存。
而MyBatis也有四大核心对象:
(1)SqlSession对象,该对象中包罗了执行SQL语句的所有方法。类似于JDBC内里的Connection 。
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC内里的Statement/PrepareStatement。
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处置惩罚,最终得到自己想要的数据格式或类型。可以自定义返回类型
在JDBC中,Connection不直接执行SQL方法,而是使用Statement大概PrepareStatement来执行方法。在使用JDBC建立了连接之后,可以使用Connection接口的createStatement()方法来获取Statement对象,也可以调用prepareStatement()方法得到PrepareStatement对象,通过executeUpdate()方法来执行SQL语句。而在MyBatis中,SqlSession对象包罗了执行SQL语句的所有方法,但是它是委托Executor执行的。从某种意义上来看,MyBatis内里的SqlSession类似于JDBC中的Connection,他们都是委托给其他类去执行。
POJO
- 从配置文件中读取信息,mybatis-config.xml为MyBatis的全局配置文件,用于配置数据库连接信息。
复制代码
- <?xml version="1.0" encoding="UTF-8" ?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-config.dtd">
- <configuration>
- <environments default="development">
- <environment id="development">
- <transactionManager type="JDBC"/>
- <dataSource type="POOLED">
- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
- <property name="username" value="root"/>
- <property name="password" value="xxxxx"/>
- </dataSource>
- </environment>
- </environments>
- <mappers>
- <mapper resource="Mapper/UserMapper.xml"/>
- </mappers>
- </configuration>
- 加载映射文件。映射文件即SQL映射文件,该文件中配置了操作数据库的SQL语句,需要在MyBatis配置文件mybatis-config.xml中加载。mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库中的一张表。
复制代码
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.ivanlee.pojo.User">
- <select id="findById" parameterType="int" resultType="com.ivanlee.pojo.User">
- select * from users where uid = #{id}
- </select>
- </mapper>
- 构造会话工厂。通过MyBatis的环境配置信息构建会话工厂SqlSessionFactory。SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
- 创建会话对象。由会话工厂创建SqlSession对象,该对象中包罗了执行SQL语句的所有方法。SqlSession session = sqlMapper.openSession();
- Executor执行器。MyBatis底层定义了一个Executor接口来操作数据库,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。
- MappedStatement对象。在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息。
- 输入参数映射。输入参数类型可以是Map、List等聚集类型,也可以是基本数据类型和POJO类型。输入参数映射过程类似于JDBC对preparedStatement对象设置参数的过程。
- 输出结果映射。输出结果类型可以是Map、List等聚集类型,也可以是基本数据类型和POJO类型。输出结果映射过程类似于JDBC对结果集的解析过程。
这里的findById是我们在mapper映射里定义好的方法,不是java库定义的如果想打印更多的信息,我们还可以继续添加搜刮方式,写到mapper内里。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) | Powered by Discuz! X3.4 |