Mybatis 概念
- 它是一个基于java的持久层框架,它消除了几乎所有的JDBC代码和参数手工设置以及结果集的检索
- 它使用简单的xml或者注解用于配置和原始映射,将接口和java的普通对象映射成数据库中的记录。
- 这个框架小巧、方便、高效、简单、直接、半自动化。
Mybitis工作原理
- 读取Mybatis配置文件,一般命名为:mybatis-config.xml,需要配置运行环境等信息,例如数据库的连接信息。
<!-- 配置环境 -->
<environments default = "development">
<environment id="development">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC"/>
<dataSource type = "POOLED">
<!-- MySQL数据驱动 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 连接数据库的URL -->
<property name = "url" value = "jdbc:mysql://localhost:3306/springtest?
characterEncoding = utf8"/>
<property name="username" value="root"/>
<property name="password" value="syx3.14="/>
</dataSource>
</environment>
</environments>
- 加载SQL映射文件,就是告诉mybatis去哪里找SQL映射文件。同样需要在mybaits-config.xml中配置。
<!-- 映射文件的位置 -->
<mappers>
<mapper resource = "com/mybatis/mapper/UserMapper.xml"/>
</mappers>
SQL映射文件中的查询方法id就是类似于方法名字,调用的时候要用上。下面的例子固定了传入的参数只能是Integer型,也固定了返回结果是自定义的java普通类MyUser,重点内容就是sql语句的编写:
<!-- 根据uid查询一个用户的信息 -->
<select id = "selectUserById" parameterType = "Integer"
resultType = "com.po.MyUser">
select * from user where uid = #{uid}
</select>
- 构造会话工厂SqlSessionfactory.
//读取配置文件mybatis-config.xml
InputStream config = Resources.getResourceAsStream("mybatis-config.xml");
//根据配置文件构造SqlSessionFactory
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(config);
- 创建会话对象:由会话工厂中创建对象,该对象包含了执行SQL语句的所有方法。
SqlSession ss = ssf.openSession();
//SqlSession执行映射文件定义中的Sql语句,并返回映射结果
//com.mybatis.mapper.UserMapper.selectUserById为UserMapper.xml中的命名空间+select 的id
//查询用户
MyUser mu = ss.selectOne("com.mybatis.mapper.UserMapper.selectUserById",1);
System.out.println(mu);
- Executor执行器:它根据SqlSession传递的参数动态生成需要执行的SQL语句,同时负责查询缓存的维护,它是底层设计,不太清楚。
- MappedStatement对象:Executor接口执行方法中有一个MappedStatement类型的参数,这个参数是对映射信息的封装用于储存要映射的SQL的id和参数。
- 输入参数映射:输入的参数类型可以是List或者Map等集合形式,也可以是基本的类型的参数或者pojo(java普通类),该过程类似于JDBC中preparedStatement对象设置参数的过程。
//查询所有用户
List<MyUser> listMu = ss.selectList("com.mybatis.mapper.UserMapper.selectAllUser");
for(MyUser myUser : listMu) {
System.out.println(myUser);
}
- 输出结果映射:同样可以是List或者Map类型或者基本类、pojo类型。输出的结果同样类似于JDBC对结果集的解析过程。
注意事项:
- Mybatis默认使用log4j输出日志信息,如果想要查看控制台中的SQL语句,需要在classpath路径下配置其日志文件:
例如在src下创建log4j.properties文件:
# Global logging configuration
log4j.rootLogger=ERROR, stdout
#MyBatis logging configuration...
log4j.logger.com.dao = DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
- Eclipes开发需要导入的基本jar包:核心包,依赖包,数据库连接包
- SQL映射文件每个方法的id,以及掺传入的参数,返回的类型要明确。
- 别忘记提交事务:
//提交事务
ss.commit();
ss.close();
总的来说,这个框架减轻了面对数据库操作的压力,大大提高了数据的存储查询效率,不仅小巧,也十分容易维护。
但是它也有很多不足:直接使用Mybatis中的SqlSession访问数据库并不简便,因为Mybatis框架的重点是SQL映射文件。
所以要利用Mybatis与Spring的整合消除繁琐操作