MyBatis --快速入门
2015-08-04 00:43
399 查看
什么是MyBatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和 Java 的 POJOs( Plan OldJava Objects,普通的 Java对象)映射成数据库中的记录。
每一个mybatis应用都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory可以通过SqlSessionFactoryBuilder对象来获得,SqlSessionFactoryBuilder对象可以从XML配置文件,或从Configuration类的实例中构建SqlSessionFactory对象。
从XML中创建SqlSessionFactory
XML 配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。
实例:
SqlSessionFactory对象由SqlSessionFactoryBuilder创建。
它的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。
实例:
SqlSession
SqlSession对象的主要功能是完成一次数据库的访问和结果的映射。每个线程都应该有它自己的SqlSession 实例。 SqlSession 的实例不能被共享,也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession 实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession 实例的引用放在任何类型的管理范围中,比如Serlvet
架构中的 HttpSession。
关闭 Session很重要,你应该确保使用 finally 块来关闭它。下面的示例就是一个确保 SqlSession 关闭的基本模式:
Mapper实例
通过 SqlSession和 Mapper 对象到底执行了什么操作?(已映射的SQL语句是关键)
我们先来看看:
语句是可以通过 XML 或注解定义的,我们先看看xml
再来看看如何使用java注解来替换写映射语句的xml
使用注解要更加清晰,但是对于复杂的sql来说就会很乱,对于复杂的sql建议使用xml
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的XML或注解用于配置和原始映射,将接口和 Java 的 POJOs( Plan OldJava Objects,普通的 Java对象)映射成数据库中的记录。
每一个mybatis应用都以一个SqlSessionFactory对象的实例为核心。SqlSessionFactory可以通过SqlSessionFactoryBuilder对象来获得,SqlSessionFactoryBuilder对象可以从XML配置文件,或从Configuration类的实例中构建SqlSessionFactory对象。
从XML中创建SqlSessionFactory
XML 配置文件包含对MyBatis系统的核心设置,包含获取数据库连接实例的数据源和决定事务范围和控制的事务管理器。
实例:
<?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"> <configuration> <!-- 配置环境变量 --> <environments default="development"> <!-- environment元素体中包含对事务管理和连接池的环境配置 --> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 配置mappers --> <!-- mappers元素是包含所有mapper(映射器)的列表,这些mapper的XML文件包含SQL代码和映射定义信息 --> <mappers> <mapper resource="org/mybatis/example/BlogMapper.xml" /> </mappers> </configuration>
SqlSessionFactory对象由SqlSessionFactoryBuilder创建。
它的主要功能是创建SqlSession对象,和SqlSessionFactoryBuilder对象一样,没有必要每次访问Mybatis就创建一次SqlSessionFactory,通常的做法是创建一个全局的对象就可以了。
实例:
private static SqlSessionFactoryBuilder sqlSessionFactoryBuilder; private static SqlSessionFactory sqlSessionFactory; private static void init() throws IOException { String resource = "mybatis-config.xml"; Reader reader = Resources.getResourceAsReader(resource); sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); sqlSessionFactory = sqlSessionFactoryBuilder.build(reader); }
SqlSession
SqlSession对象的主要功能是完成一次数据库的访问和结果的映射。每个线程都应该有它自己的SqlSession 实例。 SqlSession 的实例不能被共享,也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession 实例的引用放在一个类的静态字段甚至是实例字段中。也绝不能将SqlSession 实例的引用放在任何类型的管理范围中,比如Serlvet
架构中的 HttpSession。
关闭 Session很重要,你应该确保使用 finally 块来关闭它。下面的示例就是一个确保 SqlSession 关闭的基本模式:
SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); }
Mapper实例
通过 SqlSession和 Mapper 对象到底执行了什么操作?(已映射的SQL语句是关键)
我们先来看看:
语句是可以通过 XML 或注解定义的,我们先看看xml
<?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="org.mybatis.example.BlogMapper"> <select id="selectBlog" parameterType="int" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>
package org.mybatis.example; //接口 public interface BlogMapper { Blog selectBlog(int id); } 操作执行 SqlSession session = sqlSessionFactory.openSession(); try { //getMapper 获取mapper对象 BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); }
再来看看如何使用java注解来替换写映射语句的xml
使用注解要更加清晰,但是对于复杂的sql来说就会很乱,对于复杂的sql建议使用xml
package org.mybatis.example; public interface BlogMapper { @Select("SELECT * FROM blog WHERE id = #{id}") Blog selectBlog(int id); }
相关文章推荐
- [知其然不知其所以然-2]设备D3hot状态切换到D0状态的一个bug排查过程
- Win32 服务控制
- java.net.URLConnection详解
- 第一百二十三天 how can I 坚持
- Direct-X学习笔记--地形
- 学习C++11之引用
- 不可变对象和Biulder模式(面试问题)
- Oracle 注解 主键 错误 Unknown integral data type for ids : java.lang.String
- 堆排序
- 实用小工具分享
- 常见的几种RuntimeException
- LeetCode 46 - Permutations
- 梯度下降算法
- 矩阵快速幂专题(矩阵快速幂入门、矩阵构造法、数论规律题)
- 用VMware安装小红伞linux 9时遇到的一些问题
- maven中pom.xml引入jar包小结
- Codeforces Round #311 (Div. 2) B. Pasha and Tea【二分】
- 【Java基础】InputStream 、 InputStreamReader和BufferedReader
- 集合类题目
- 设计模式--迭代器模式