MyBatis是一个数据持久层(ORM)框架。把实体 类和SQL语句之间建立了映射关系,是一种半自 动化的ORM实现。MyBATIS需要开发人员自己来写sql语句,这可以增加了程序的灵活性,在一定程度上可以作为ORM的一种补充。
什么情况下不适合全自动化框架:
1)系统的部分或全部数据来自现有数据库,处于安全考虑,只对开发团队提供几条Select SQL(或存储过程)以获取所需数据,具体的表结构不予公开;
2)开发规范中要求,所有牵涉到业务逻辑部分的数据库操作,必须在数据库层由存储过程实现(就金融行业而言,工商银行、中国银行、交通银行,都在开发规范中严格指定);
3)系统数据处理量巨大,性能要求极为苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。
MyBatis基本要素:
1. configuration.xml 全局配置文件
2. xml映射文件(mapper)—实体类
3. SqlSession接口
使用准备工作:
1. 需要的jar包:mybatis-3.2.2.jar,mysql-connector-java-5.1.26-bin.jar;
2. 在eclipse中添加相关的dtd文件(XML Catalog): mybatis-3-config.dtd,mybatis-3-mapper.dtd,方便创建xml配置文件,注意dtd文件不要放在中文目录下;
Key:-//mybatis.org//DTD Config 3.0//EN
-//mybatis.org//DTDMapper 3.0//EN
3. 创建核心配置文件mybatis.xml,放在src目录下;
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "mybatis-3-config.dtd" > <configuration> <!-- 类型别名设置 --> <typeAliases> <typeAlias alias="Stu" type="com.it.entity.Stu"/> </typeAliases> <environments default="xx"> <environment id="xx"> <!-- 事务管理 --> <transactionManager type="jdbc"/> <!-- 数据库连接池 --> <dataSource type="pooled"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mydb"/> <property name="username" value="root"/> <property name="password" value="ok"/> </dataSource> </environment> </environments> <mappers> <!-- 对应实体类的映射文件路径 --> <mapper resource="com/it/entity/Stu.xml"/> </mappers> </configuration>
4. 创建实体类(POJO)--Stu.java
5. 创建与之对应的映射文件Stu.xml,与实体类在同一个目录下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "mybatis-3-mapper.dtd" > <mapper namespace="stu"> <select id="findAll" resultType="Stu"> select * from stu </select> </mapper>
6. 创建测试类
public class Test { public static void findAll() { try { Reader reader = Resources.getResourceAsReader("mybatis.xml"); // 工厂 SqlSessionFactory factory = new SqlSessionFactoryBuilder() .build(reader); // session SqlSession session = factory.openSession(); List<Stu> ls = session.selectList("stu.findAll"); for (Stu s : ls) { System.out.println(s.getSid() + " " + s.getSname() + " " + s.getSsex() + " " + s.getSbirth()); } // close session.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { findAll(); } }