zoukankan      html  css  js  c++  java
  • 【Mybatis】Mybatis基本构成

    • SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)
    • SqlSessionFactory:依靠工厂来生成SqlSession(会话)
    • SqlSession:是一个既可以发送SQL去执行并返回结果,也可以获取Mapper的接口。
    • SQL Mapper:它是MyBatis新设计的组件,它是由一个java接口和XML文件(或注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。

    一、构建SqlSessionFactory

    每个MyBatis的应用都是以SqlSessionFactory的实例为中心的。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。但是需要注意SqlSessionFactory是一个工厂接口而不是实现类,它的任务是创建SqlSession。SqlSession类似于一个JDBC的Connection对象,MyBatis提供了两种模式去创建SqlSessionFctory:一种是XML配置的方式;另一种是代码的方式。能够使用配置文件的时候,我们尽量要用配置文件。

    这里我们的Configuration的类全限定名为org.apache.ibatis.session.Configuration,它在MyBatis中将以一个Configuration类对象的形式存在,而这个对象将存在于整个Mybatis应用的生命期中,以便重复读取和运用。在内存中的数据是计算机系统中读取速度最快的,我们可以解析一次配置的XML文件保存到Configuration类对象中,方便我们从这个对象中获取配置信息,性能高。单例占用空间小,基本不占用存储空间,而且可以反复使用。Configuration类对象保存着我们配置在MyBatis的信息。在MyBatis中提供了两个SqlSessionFactory的实现类,DefaultSqlSessionFactory和SqlSessionManager.不过SqlSessionManager目前还没有使用,MyBatis中目前使用的是DefaultSqlSessionFactory.

    1.1 使用XML方式创建

    如下我们配置一个简单的XML,包含获取数据库连接实例的数据源(DataSource)、决定事务范围和控制方式的事务管理器(TransactionManager)和映射器(SQL Mapper).

    <?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">
    	<!--通过这个配置文件,完成mybatis与数据库的连接  -->
    <configuration>
    <!-- 定义数据库信息,默认使用development数据库构建环境 -->
    	<environments default="development">
    		<environment id="development">
    		<!-- 采用jdbc事务管理 -->
    			<transactionManager type="JDBC" />
    			<!-- 配置数据库链接信息 -->
    			<dataSource type="POOLED">
    				<property name="driver" value="com.mysql.jdbc.Driver" />
    				<property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
    				<property name="username" value="root" />
    				<property name="password" value="learn" />
    			</dataSource>
    		</environment>
    	</environments>
    	<!-- 定义映射器 -->
    	<mappers>
    		<mapper resource="comslpdaomappingRole.xml" />
    	</mappers>
    </configuration>
    

      

    使用配置文件创建SqlSessionFactory:

    private static SqlSessionFactory sqlSessionFactory = null;
    	public static SqlSessionFactory getSqlSessionFactory(){
    		InputStream inputStream = null;
    		if(sqlSessionFactory == null){
    			try {
    			String resource = "mybatis_config.xml";
    			sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));
    			return sqlSessionFactory;
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    			
    		}
    		return sqlSessionFactory;
    	}
    

    1.2使用代码方式创建

     

    package com.slp;
    
    
    import org.apache.ibatis.datasource.pooled.PooledDataSource;
    import org.apache.ibatis.mapping.Environment;
    import org.apache.ibatis.session.Configuration;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.apache.ibatis.transaction.TransactionFactory;
    import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
    
    public class CodeSqlSessionFactory {
    
    	public SqlSessionFactory getSqlSessionFactory(){
    		//构建数据库连接池
    	  PooledDataSource dataSource = new PooledDataSource();
    	  dataSource.setDriver("com.mysql.jdbc.Driver");
    	  dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
    	  dataSource.setUsername("root");
    	  dataSource.setPassword("123456");
    	    //构建数据库事务方式
    	  TransactionFactory transactionFactory  = new JdbcTransactionFactory();
    	  //创建了数据库运行环境
    	  Environment environment = new Environment("development",transactionFactory,dataSource);
    	  //构建Configuration对象
    	  Configuration configuration = new Configuration(environment);
    	  //注册一个Mybatis上下文别名
    	  configuration.getTypeAliasRegistry().registerAliases("role", Role.class);
    	  //加入一个映射器
    	  configuration.addMapper(RoleMapper.class);
    	  //使用SqlSessionFactoryBuilder构建SqlSessionFactory
    	  SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
    	  return sqlSessionFactory;  
    	}
    }
    
    package com.slp;
    
    import org.apache.ibatis.session.SqlSession;
    
    /**
     * SqlSession的用途主要有两种
     * 1)获取映射器,让映射器通过命名空间和方法名称找到对应的SQL,发送给数据库执行后返回结果
     * 2)直接通过命名信息去执行SQL返回结果,这是iBatis版本留下的方式,在SqlSession层我们通过update、insert、select、delete等方法,带上SQL的id来操作在XML中配置好的SQL,从而完成我们的工作,与此时同时也支持事务,通过commit rollback方法提交或者回滚事务。
     * @author sangliping
     *
     */
    public class CodeSqlSession {
      
    	
    	public Role getRole(){
    		Role role = new Role();
    		SqlSession sqlSession = null;
    		//打开SqlSession会话
    		try {
    			CodeSqlSessionFactory sqlSessionFactory = new CodeSqlSessionFactory();
    			sqlSession = sqlSessionFactory.getSqlSessionFactory().openSession();
    			/*some code*/
    			sqlSession.commit();
    		} catch (Exception e) {
    			sqlSession.rollback();
    		}finally{
    			//在finally语句中确保资源被顺利关闭
    			if(sqlSession!=null){
    				sqlSession.close();
    			}
    		}
    		
    		return role;
    	}
    }
    

      

      

     

  • 相关阅读:
    NHibernate 转载
    net中Json对单引号和特殊字符串的处理
    C#过滤非法字符
    Linq Distinct 扩展
    (转)Windows启动过程分析预引导
    special content filetypes require specialized software to use
    存储器
    (转)MAPISendMail调用系统默认的邮件客户端发邮件
    FrameControllerModel
    (转)c++的四种类型转换
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/9087826.html
Copyright © 2011-2022 走看看