mybatis和hibernate一样,是java持久层的框架,只是它的封装程度从某些意义上说,没有hibernate高,侧重的方向也和hibernate不一样。
hibernate是ORM对象关系映射的实现,它是通过操作持久化对象来操作数据库数据的,程序员只需要定义好POJO(Plain Ordinary Java Object,简单的Java对象,实际就是普通的JavaBeans)到数据库的关系映射就可以了,而不需要熟练操作sql语句;相对而言,mybatis是一种“Sql Mapping”的ORM实现,它着重与POJO与sql之间的关系,将sql需要的参数,以及返回的结果,与实体类的字段对应,个人理解,它有点像是hibernate中的定制sql和命名查询。
这是从大体上来说的,至于hibernate和mybatis的详细对比,在这里就不叙述了,如果有兴趣,可以到“alicejiyayun”的博客看,这是链接点击打开链接。
下面是配置文件configuration.xml:
<?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>
<properties resource="eas.properties" /><!-- 属性 -->
<settings>
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<!-- <settings>设置
全局映射器启用或禁用缓存
<setting name="cacheEnabled" value="true" />
全局启用或禁用延迟加载,禁用时,所有关联对象都会即时加载
<setting name="lazyLoadingEnabled" value="true" />
当启用时,有延迟加载属性的对象在被调用时会完全加载任意属性,否则,每种属性都会按需要加载
<setting name="aggressiveLazyLoading" value="true"/>
允许或不允许多个结果集从一个单独的语句中返回(需要合适的驱动)
<setting name="multipleResultSetsEnabled" value="true" />
使用列表标签代替列名,不同的的驱动表现不同,需测试
<setting name="useColumnLabel" value="true" />
允许JDBC支持生成的键,需要合适的驱动,如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效
<setting name="useGeneratedKeys" value="false" />
是否增强?
<setting name="enhancementEnabled" value="false" />
配置和设定执行器,SIMPLE执行器执行其它语句 REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器可以重复执行语句和批量更新。
<setting name="defaultExecutorType" value="SIMPLE" />
设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时
<setting name="defaultStatementTimeout" value="25000" />
</settings> -->
<typeAliases><!-- ***类型命名,方便书写,在映射xml中,可以用别名代替全限定名,但是注意不要与内建的一些别名冲突,比如八大基本类型的别名,以及java自身提供的一些类名 -->
<typeAlias alias="Users" type="com.entity.Users" />
</typeAliases>
<!-- ***MyBatis 可以配置多个环境。这可以帮助你SQL 映射对应多种数据库等。 -->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 可以引用properties配置文件中的数据,也可以直接写,如下面 -->
<!-- <property name="driver" value="oracle.jdbc.driver.OracleDriver"
/> <property name="url" value="jdbc:oracle:thin:@10.10.xx.xx:1521:orcl" />
<property name="username" value="xxxx" /> <property name="password" value="xxxx"
/> -->
</dataSource>
</environment>
</environments>
<!-- ***这里是告诉MyBatis 去哪寻找映射SQL 的语句。可以使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。-->
<mappers>
<mapper resource="com/entity/UserOperation.xml" />
<mapper resource="com/entity/Users.xml" />
<mapper resource="com/entity/District.xml" />
<mapper resource="com/entity/Street.xml" />
<mapper resource="com/entity/Student.xml" />
<mapper resource="com/entity/Paper.xml" />
<mapper resource="com/dao/ProDao.xml" />
<mapper resource="com/dao/EmpDao.xml" />
</mappers>
</configuration>
eas.properties:
driver:oracle.jdbc.driver.OracleDriver
url:jdbc:oracle:thin:@10.10.xx.xx:1521:orcl
username=xxxx
password=xxxx
mybatis默认并没有对日志进行管理,不会像hibernate那样将执行的sql全部打印出来,这样在写程序和调试的时候有些不方便,如果sql语句上出了错误,很难寻找,特别是刚接触mybatis的时候,会出现各种各样的错误,如果想要看到mybatis执行sql语句,可以自己写一个log4j配置文件:
log4j.properties:
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
将文件放在src下就可以了,如果需要调整log4j的级别,DEBUG、INFO、WARN、ERROR,可以自己搜log4j的相关配置,