mybatis入门

一. mybatis核心组件

  • SqlSessionFactoryBuilder:(构造器)根据配置信息或代码生成SqlSessionFactory(工厂接口);
  • SqlSessionFactory:依靠工厂生成SqlSession回话;
  • SqlSession:一个可以发送SQL去执行并返回结果,也可以起获取Mapper接口;
  • SQL Mapper:有java接口和xml文件或(注解)构成的,需要sql对应的映射规则,负责发送sql去执行,并返回结果。

mybatis入门_第1张图片

SqlSessionFactory:

每个mybatis都是以SqlSessionFactory的实例为中心,其实例可以通过SqlSessionFactoryBuilder获得,SqlSessionFactory是一个工厂接口而不是现实类,他的任务是创建SqlSession。

	/**
	 * xml 生成SqlSessionFactory
	 */
	@Test
	public void getSqlSessionFactoryTest() {
		String resources = "mybatis-config.xml";
		try {
			InputStream inputStream = Resources.getResourceAsStream(resources);
			SqlSessionFactory sqlSessionFactory = null;
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			assertNotNull(sqlSessionFactory);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 通过java获取SqlSessionFactory
	 * 
	 */
	@Test
	public void configurationGetSqlSessionFactoryTest() {
		PooledDataSource pooledDataSource = new PooledDataSource();
		pooledDataSource.setDriver("com.mysql.jdbc.Driver");
		pooledDataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
		pooledDataSource.setUsername("root");
		pooledDataSource.setPassword("admin");
		
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		Environment environment = new Environment("development", transactionFactory, pooledDataSource);
		
		Configuration configuration = new Configuration(environment);
		configuration.getTypeAliasRegistry().registerAlias("country",Country.class);
//		configuration.addMapper();
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(configuration);
		assertNotNull(sessionFactory);
		
	}
SqlSession:

sqlSession是个接口,中来接受信息和返回结果;有两个实现类,DefaultSqlSession 和SqlSessionManager;

/**
	 * SqlSession创建
	 */
	@Test
	public void testGetSqlSession() {
		try {
			sqlSession = sqlSessionFactory.openSession();
			assertNotNull(sqlSession);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(sqlSession!=null) {
				sqlSession.close();
			}
		}
	}

SqlSession的主要用途有两种:

1.获取映射器,让映射器通过命名空间和方法名找到对应的sql,发送给数据库后返回结果;

2.直接通过命名信息去执行sql,返回结果,这是ibatis遗留的。sqlSession可以通过select,delete,update,insert带上SQL的id来执行XML配置好的sql,同时,他也会完成commit,rollback等事务。

映射器:

映射器是由java接口和xml(或者注解)共同组成的。作用是:

  1. 定义参数类型,
  2. 描述缓存,
  3. 描述SQL语句,
  4. 定义查询结果和POJO的映射关系。

映射器的实现有两种方式:

  1. 通过xml配置实现,
  2. 通过代码实现,在Configuration注册Mapper接口或者注解实现。
Xml配置实现Mapper

第一步:定义一个java接口;

第二步:定义xml配置文件。

public interface ContryMapper {
	public Country getCountryById(Long id);
}



	

  • 1.这个文件我们在mybatis-config.xml中配置的,在加载的时候或扫描这个文件,生成映射器;
  • 2.定义了命名空间(namespace),和我们的全限接口名是一样的;
  • 3.用select定义了一个查询。

使用sqlSession获取mapper:

			
			ContryMapper contryMapper = sqlSession.getMapper(ContryMapper.class);
			Country c = contryMapper.getCountryById((long) 1);
使用注解实现mapper:

只需在接口使用注解,注入sql即可。

	@Select("select * from country where id = #{id}")
	public Country getCountryById(Long id);

//加载在configuration
configuration.addMapper(ContryMapper2.class);
其他:ibatis通过sql id ,通过全路径名来执行sql,例如sqlSession.selectOne("xxxxx","id")来获取值,不推荐。

你可能感兴趣的:(个人心得,mybatis,mybatis-入门)