MyBatis

一.什么是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 }
原文地址:https://www.cnblogs.com/sxl920624/p/6733568.html