mybatis入门

一. mybatis核心组件

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


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);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
					"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="simple.mapper.CountryMapper">
	<select id="getCountryById" resultType="Country" parameterType="long">
		select id,countryname,countrycode from country where id = #{id}
	</select>
</mapper>

  • 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")来获取值,不推荐。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值