一.什么是MyBatis
- MyBatis是支持普通SQL查询,动态sql和高级结果映射的优秀持久层框架。
- MyBatis几乎封装了所有必须但是又重复,繁琐的JDBC代码
- MyBatis使用简单的XML方式进行主要的配置和SQL映射配置,从而将接口的方法映射到sql,将Java的POJO(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
二.MyBatis入门实例
1.基本开发步骤:
-
- 第一步:创建web工程,并导入两个主要的jar包(mybatis-3.0.5.jar和ORACLE数据库驱动程序ojdbc6.jar),还有其它一些jar包。
- 第二步:构建SqlSessionFactory:
- 在src下创建MyBatis主配置文件mybatis.xml
- 编写实用工具类,根据mybatis.xml创建SqlSessionFactory,通过SqlSessionFactory打开SqlSession
- mybatis.xml:
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 <environments default="development"> 6 <environment id="development"> 7 <transactionManager type="JDBC" /> 8 <dataSource type="POOLED"> 9 <property name="driver" 10 value="oracle.jdbc.OracleDriver" /> 11 <property name="url" 12 value="jdbc:oracle:thin:@localhost:1521:orcl" /> 13 <property name="username" value="scott" /> 14 <property name="password" value="tiger" /> 15 </dataSource> 16 </environment> 17 </environments> 18 </configuration>
-
编写SqlSessionFactoryUtil类,创建SqlSessionFactory,通过SqlSessionFactory打开SqlSession:
1 public class SqlSessionFactoryUtil { 2 private static SqlSessionFactory factory; 3 private SqlSessionFactoryUtil(){} 4 static{ 5 Reader reader = null; 6 try{ 7 reader = 8 Resources.getResourceAsReader("mybatis.xml"); 9 factory = 10 new SqlSessionFactoryBuilder().build(reader); 11 } catch (Exception e) { 12 e.printStackTrace(); 13 }finally{ if(reader!=null)reader.close(); } 14 } 15 16 public static SqlSession getSqlSession(){ 17 return factory. openSession(); } 18 }
- ----------------------------------------------
- 第三步:创建domain包针对每个数据库表创建对应的实体类
-
1 public class Dept{ 2 private int deptNo; 3 private String deptName; 4 private String loc; 5 ……省略getter和setter方法 6 } 7 8 9 public class Emp { 10 private int empNo; 11 private String empName; 12 private String job; 13 private float salary; 14 private java.util.Date hiredate; 15 private Dept dept; 16 ……省略getter和setter方法 17 }
-
- 第四步:创建dao包,在其中编写EmpDao接口
-
1 package dao; 2 public interface EmpDao{ 3 public List<Emp> searchAll(); 4 }
-
- 第五步:针对EmpDao接口,在dao包下创建映射文件:
- EmpDaoMapper.xml(名称可以自定义),并在其中为search方法配置映射sql语句
-
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 4 5 <mapper namespace="dao.EmpDao"> 6 <select id="searchAll" resultType="domain.Emp"> 注意:resultType属性指定查询结果每行记录封装成什么对象 7 select empno as empNo,ename as empName, 8 sal as salary,hiredate from emp 9 </select> 10 </mapper>
- 第六步:在src下的mybatis.xml中配置EmpDaoMapper.xml文件的位置信息
- 将以下代码添加到environments元素之后:
-
1 <mappers> 2 <mapper resource="dao/EmpDaoMapper.xml"></mapper> 3 </mappers>
- 最后写个测试程序:
-
1 SqlSession se = null; 2 try { 3 4 se = SqlSessionFactoryUtil.getSqlSession(); 5 EmpDao dao = se.getMapper(EmpDao.class); 6 List<Emp> list = dao.searchAll(); 7 for (Emp e : list) { 8 System.out.println(e.getEmpName() + " " + e.getSalary() + " “ + e.getHiredate()); 9 } 10 11 } catch (Exception e) { 12 e.printStackTrace(); 13 }finally{ 14 if(se!=null) se.close(); 15 }
-