mybatis基础与核心类


mybatis优势


    我们使用mybatis框架很大原因是因为与hibernate比较其 学习曲线低,执行效率高。mybatis的优势可以归纳如下几条, 其中 第1-3条与hibernate并无明显区别,而第4-7条值得关注下,这也是我们选择使用mybatis或是hibernate的一个很好依据。
          1. 消除大量JDBC冗余代码——hibernate、spring jdbc同样规避了相关问题
          2. 与spring和guice框架的集成支持
          3. 与第三方缓存类库集成支持
          4. 接受SQL
          5. 能够与传统数据库很好的协同工作
          6. 学习曲线低
          7. 性能良好
    第4条对于hibernate和mybatis而言其实都是适用的,但两个框架的设计理念上的不同期适用度不同。hibernate是一款成熟的ORM框架,其鼓励使用实体(entity)和hibernate底层来自动生成sql。这就导致一些数据库特性无法得到充分利用。而如果直接执行sql,由打破了持久层和数据库独立的原则。mybatis不同的是它不会产生任何sql语句,开发人员必须要自己准备sql语句,这样更能充分利用数据库的特性及存储过程。
    第5条主要从映射方式出发进行比较,如果抛开这一层,其实两个框架都能与传统数据库协同工作,但hibernate的映射方式在一定程度上让sql语句灵活性有所丧失。mybatis主要是将查询结果与java对象进行映射,而hibernate则是让java对象直接静态的映射到数据库表上,也就是一条数据库记录对应着一个java bean对象。
    第6条很容易理解,hibernate等ORM框架需要了解的概念比mybatis要多并且复杂,而mybatis只需有java和sql的基础,加上诸如insert、delete、update、select等映射文件的写法即可,即便动态sql等特性语法也相当简单,而且这些特性本身更是开发中很需要的内容。
    第7条中提升性能的方式很多,诸如支持数据库连接池,减少创建链接的开销;再如提供缓存机制减少查询数据库的次数等等。而mybatis在性能方面的独特之处在于它不必利用大量的动态代理模式来产生实体对象,而动态代理本身的需要很大的内存消耗,减少它的使用会使性能得到提升。

mybatis依赖jar

     
     
     
     
1.6
4.11
1.7.5
1.2.17
3.2.2
5.1.21
 
junit
junit
${junit.version}
test
 
org.mybatis
mybatis
${mybatis.version}
org.slf4j
slf4j-api
${slf4j.version}
 
org.slf4j
slf4j-log4j12
${slf4j.version}
runtime
 
log4j
log4j
${log4j.version}
runtime
 
mysql
mysql-connector-java
${mysql.version}
runtime
 

MyBatisUtil创建SqlSessionFactory获取SqlSession

每个数据库环境应该就一个SqlSessionFactory对象实例,所以我们使用单例模式创建一个SqlSessionFactory。但我们真正与数据交互的是SqlSession,而每个线程应该都有它自己的SqlSession实例。也就是说SqlSession对象实例不是线程安全的,不能被共享。
     
     
     
     
 
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.Properties;
 
import org.apache.ibatis.datasource.DataSourceFactory;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
public class MyBatisUtil
{
private static SqlSessionFactory sqlSessionFactory;
private static final Properties PROPERTIES = new Properties();
static
{
try {
InputStream is = DataSourceFactory.class.getResourceAsStream("/application.properties");
PROPERTIES.load(is);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSqlSessionFactory()
{
if(sqlSessionFactory==null)
{
InputStream inputStream = null;
try
{
inputStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e)
{
throw new RuntimeException(e.getCause());
}finally {
if(inputStream != null){
try {
inputStream.close();
} catch (IOException e) {
}
}
}
}
return sqlSessionFactory;
}
public static SqlSession getSqlSession()
{
return getSqlSessionFactory().openSession();
}
public static Connection getConnection()
{
String driver = PROPERTIES.getProperty("jdbc.driverClassName");
String url = PROPERTIES.getProperty("jdbc.url");
String username = PROPERTIES.getProperty("jdbc.username");
String password = PROPERTIES.getProperty("jdbc.password");
Connection connection = null;
try {
Class.forName(driver);
connection = DriverManager.getConnection(url, username, password);
} catch (Exception e) {
throw new RuntimeException(e);
}
return connection;
}
}
mybatis-config.xml
     
     
     
     
xml version="1.0" encoding="UTF-8" ?>
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 
resource="application.properties"/>
name="com.mybatis3.domain"/>
default="development">
id="development">
type="JDBC"/>
type="POOLED">
name="driver" value="${jdbc.driverClassName}"/>
name="url" value="${jdbc.url}"/>
name="username" value="${jdbc.username}"/>
name="password" value="${jdbc.password}"/>
resource="com/mybatis3/mappers/StudentMapper.xml"/>

Mybatis与Spring集成

集成过程与hibernate等类似,主要步骤为
1. 在spring上下文中(ApplicationContext)配置MyBatis
2. 注入SqlSession和SqlMappers
3. 配置使用spring管理事务

引入依赖jar
     
     
     
     
UTF-8
1.6
4.11
1.7.5
1.2.17
3.2.2
1.2.0
5.1.21
3.1.3.RELEASE
1.6.8
2.2
1.4
1.6
2.5
2.3.2
 
${project.artifactId}
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin}
${java.version}
${java.version}
${project.build.sourceEncoding}
 
 
 
junit
junit
${junit.version}
test
org.springframework
spring-context-support
${spring.version}
commons-logging
commons-logging
 
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-test
${spring.version}
test
 
org.aspectj
aspectjrt
${aspectj.version}
org.aspectj
aspectjweaver
${aspectj.version}
 
cglib
cglib-nodep
${cglib.version}
org.mybatis
mybatis
${mybatis.version}
org.mybatis
mybatis-spring
${mybatis-spring.version}
org.slf4j
slf4j-api
${slf4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
runtime
org.slf4j
slf4j-log4j12
${slf4j.version}
runtime
 
log4j
log4j
${log4j.version}
runtime
 
mysql
mysql-connector-java
${mysql.version}
runtime
commons-dbcp
commons-dbcp
${commons.dbcp.version}

配置spring上下文
     
     
     
     
xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:mybatis="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd">
/>
 
base-package="com.mybatis3" />
 
location="classpath:application.properties" />
transaction-manager="transactionManager"/>
id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
name="dataSource" ref="dataSource" />
 
id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
index="0" ref="sqlSessionFactory" />
id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
name="dataSource" ref="dataSource" />
name="typeAliasesPackage" value="com.mybatis3.domain"/>
name="typeHandlersPackage" value="com.mybatis3.typehandlers"/>
name="mapperLocations" value="classpath*:com/mybatis3/**/*.xml" />
id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
name="driverClassName" value="${jdbc.driverClassName}"/>
name="url" value="${jdbc.url}"/>
name="username" value="${jdbc.username}"/>
name="password" value="${jdbc.password}"/>

参考
http://mybatis.org/mybatis-3/index.html
http://p7engqin gyang.iteye.com/ blog/1746761





你可能感兴趣的:(mybatis基础与核心类)