what is mybatis?
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
安装
直接导包
使用maven的话,需要在pom.xml中添加依赖
SQLSessionFactory
--mybatis应用的核心
String resource = "org/mybatis/example/mybatis-config.xml"; // Resource工具类加载资源文件 InputStream inputStream = Resources.getResourceAsStream(resource); // SqlSessionFactory实例的创建 SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
从xml中构建SQLSessionFactory
1. 配置项
- 数据源(DataSource)
- 事务管理器(TransactionManager)
- 事务作用域
- 事务控制方式
2. 代码示例
-
<?xml version="1.0" encoding="UTF-8" ?> // 头部声明用于验证xml文档的正确性 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <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> // resource指定的文件包含了SQL代码及映射定义 <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
SQLSessionFactory的Java代码构建
上述xml示例的Java代码形式:
DataSource dataSource = BlogDataSourceFactory.getBlogDataSource(); TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); // mapper class包含 SQL 映射语句的注解从而避免依赖 XML 文件 configuration.addMapper(BlogMapper.class); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
- Java注解的形式不能处理某些高级映射(如嵌套联合映射),这是仍然需要xml来配置。
- MyBatis 会自动查找并加载与映射器类同名的xml配置文件。
SqlSession的使用
方法一:
// SqlSession完全包含了执行 SQL 命令所需的所有方法 SqlSession session = sqlSessionFactory.openSession(); try { // SqlSession的使用 Blog blog = (Blog) session.selectOne("org.mybatis.example.BlogMapper.selectBlog", 101); } finally { session.close(); }
方法二:
SqlSession session = sqlSessionFactory.openSession(); try { BlogMapper mapper = session.getMapper(BlogMapper.class); Blog blog = mapper.selectBlog(101); } finally { session.close(); }
映射SQL语句
<?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"> // namespace表示映射语句所在在位置 <mapper namespace="org.mybatis.example.BlogMapper"> // 映射语句可不止一个 <select id="selectBlog" resultType="Blog"> select * from Blog where id = #{id} </select> </mapper>