MyBatis学习(一)之MyBatis初识

    MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。    

    1. SqlSessionFactory

	SqlSessionFactory对象是使用MyBatis的应用程序的核心,SqlSession都需要通过SqlSessionFactory实例来获取。构造SqlSessionFactory有两种方式, xml和java 两种方式。
  •     xml构建方式,此方式为最常用的方式。
            首先创建xml配置文件,一个简单的配置(以MySQL为例)

    
        
            
            
                
                
                
                
            
        
    

这里我们创建了SqlSessionFactory可以依赖的环境(包括数据源和事务管理),可以创建多个environment,但需要指定其中的一个为默认的环境。
简要说明下transactionManager和dataSource的type代表的意思,
transactionManager的type可选值为:
JDBC #代表 org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory
MANAGED #代表 org.apache.ibatis.transaction.managed.ManagedTransactionFactory

dataSource的type可选值为:
JNDI #代表org.apache.ibatis.datasource.jndi.JndiDataSourceFactory
POOLED #代表org.apache.ibatis.datasource.pooled.PooledDataSourceFactory
UNPOOLED #代表 org.apache.ibatis.datasource.unpooled.UnpooledDataSourceFactory

配置文件里面还可以配置其他很多地方,在以后的章节我们再做描述。

根据xml配置构建SqlSessionFactory, 我们这里使用SqlSessionFactoryBuilder来构建SqlSessionFactory。
     
   String configurationResource = "mybatis-configuration.xml";
   InputStream inputStream = Resources.getResourceAsStream(configurationResource);
   SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
   inputStream.close();
  • Java 方式创建SqlSessionFactory(其实就是将xml中配置的信息转换到Java代码里)
        DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver","jdbc:mysql://localhost:3306/test","root","123456");
        Environment environment = new Environment("develop",new JdbcTransactionFactory(),dataSource);
        Configuration configuration = new Configuration(environment);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

2. SqlSession 

SqlSession 提供了以数据库为背景的所有SQL操作的方法。SqlSession可以从SqlSessionFactory中获取,SqlSessionFactory提供了多种方式来获取一个SqlSession。
  SqlSession openSession();

  SqlSession openSession(boolean autoCommit); 
  SqlSession openSession(Connection connection);
  SqlSession openSession(TransactionIsolationLevel level);

  SqlSession openSession(ExecutorType execType);
  SqlSession openSession(ExecutorType execType, boolean autoCommit);
  SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level);
  SqlSession openSession(ExecutorType execType, Connection connection);

这里我们直接使用默认的SqlSession获取方法:
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
	List list = sqlSession.selectList("org.antstudio.mybatis.test.ConfigurationTest.selectTest");
}finally{
	 sqlSession.close();
}


这里我们使用sqlSession查询出了一个列表,注意,sqlSession为非线程安全的对象,其使用范围最好为一个请求或者一个方法范围内。

3. MappedStatement

MyBatis将sql语句、参数、结果处理等一系列相关的元素封装成一个一个的已映射的sql(MappedStatement), 在上面我们通过sqlSession来查询了一个列表,要使这段代码正常运行,还需要配置或者定义相关的MappedStatement。 MappedStatement可以通过xml配置或者Java方式显示添加。

  • xml的配置MappedStatement.

新建一个ConfigurationTestMapper.xml.xml



    

每一个MappedStatement的唯一标示为namespace+id,如果注册重复的MappedStatement则会抛出异常。

然后在mybatis-configuration.xml配置文件中添加如下语句:
 
        
 

将配置的映射添加进来。

  • java添加MappedStatement
如同SqlSessionFactory的java构造一样,需要提供xml构造时的所有的信息。
SqlSource sqlSource1 = new StaticSqlSource(configuration,"select * from tab_user");
final ResultMap resultMap = new ResultMap.Builder(configuration,"org.antstudio.mybatis.test.Configuration.selectTest",HashMap.class,new ArrayList()).build();
MappedStatement mappedStatement = new MappedStatement.Builder(configuration,"org.antstudio.mybatis.test.Configuration.selectTest",sqlSource, SqlCommandType.SELECT)
                .resultMaps(new ArrayList(){{add(resultMap);}}).build(); //定义一个mappedStatement,每行用HashMap包装--》等同于xml中的resultType="HashMap"
configurationWithoutXml.addMappedStatement(mappedStatement);//添加到configuration


这样就具备了MyBatis可以简单运行的所有必备元素,这里主要简单介绍了MyBatis的基本的元素和配置。具体源码见: https://gist.github.com/gavincook/4471c06138976bf1284c

你可能感兴趣的:(MyBatis)