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构建方式,此方式为最常用的方式。
【MyBatis学习(一)之MyBatis初识】
这里我们创建了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
这里我们使用sqlSession查询出了一个列表,注意,sqlSession为非线程安全的对象,其使用范围最好为一个请求或者一个方法范围内。
3. MappedStatement
MyBatis将sql语句、参数、结果处理等一系列相关的元素封装成一个一个的已映射的sql(MappedStatement), 在上面我们通过sqlSession来查询了一个列表,要使这段代码正常运行,还需要配置或者定义相关的MappedStatement。 MappedStatement可以通过xml配置或者Java方式显示添加。
- xml的配置MappedStatement.
新建一个ConfigurationTestMapper.xml.xml
select * from tab_user
每一个MappedStatement的唯一标示为namespace+id,如果注册重复的MappedStatement则会抛出异常。
然后在mybatis-configuration.xml配置文件中添加如下语句:
将配置的映射添加进来。
- java添加MappedStatement
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
推荐阅读
- 一个人的旅行,三亚
- 一个小故事,我的思考。
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 开学第一天(下)
- 一个人的碎碎念
- 2018年11月19日|2018年11月19日 星期一 亲子日记第144篇
- 遇到一哭二闹三打滚的孩子,怎么办┃山伯教育
- 第326天
- Y房东的后半生14
- 奔向你的城市