Mybatis的学习

折腾一个Mybatis的应用: 写一个db.properties用来存储driver,url还有所连接数据库的账号,密码 driver =oracle.jdbc.driver.OracleDriver url=jdbc:oracle:thin:@localhost:1521:XE username=SCOTT passowrd=TIGER mybatis-config.xml: <?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>     <!-- 加载外部的properties文件 -->     <properties resource="db.properties" />     <!--配置别名,别名不区分大小写-->     <typeAliases>         <package name="com.yjxxt.pojo"/>     </typeAliases>     <!--环境配置-->     <environments default="ev">         <environment id="ev">             <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>     <!--sql映射配置加载-->     <mappers>         <!--resource后面的是这个文件的地址,然后连接的就是另一个查询表的xml-->         <mapper resource="com/yjxxt/mappers/EmpMapper.xml"/>     </mappers> </configuration> 创建一个EmpMapper: <?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="com.yjxxt.mappers.EmpMapper">     <!--查询所有员工的数据,reultType是结果集-->     <select id="queryAllEmp" resultTpye="emp">         select *from emp </select> </mapper> 创建一个EmpMapper接口: public interface EmpMapper{ //定义抽象类,查询所有员工的数据 public List<Emp> queryAllEmp(); } 封装方法Dept: public class Dept{     private int deptno;     private String name;     private String loc;     public Dept(){}     public Dept(int deptno, String dname, String loc) {         this.deptno = deptno;         this.dname = dname;         this.loc = loc;     }     public int getDeptno() {         return deptno;     }     public void setDeptno(int deptno) {         this.deptno = deptno;     }     public String getDname() {         return dname;     }     public void setDname(String dname) {         this.dname = dname;     }     public String getLoc() {         return loc;     }     public void setLoc(String loc) {         this.loc = loc;     }     @Override     public boolean equals(Object o) {         if (this == o) return true;         if (o == null || getClass() != o.getClass()) return false;         Dept dept = (Dept) o;         return deptno == dept.deptno &&                 Objects.equals(dname, dept.dname) &&                 Objects.equals(loc, dept.loc);     }     @Override     public int hashCode() {         return Objects.hash(deptno, dname, loc);     }     @Override     public String toString() {         return "Dept{" +                 "deptno=" + deptno +                 ", dname='" + dname + '\'' +                 ", loc='" + loc + '\'' +                 '}';     } } 封装个Emp: public class Emp implement Serializable{     private int empno;//员工号     private  String ename;//名字     private double sal;//工资      private Date hiredate;//入职时间     private int deptno;//部门号 public Emp() {       // TODO Auto-generated constructor stub    }    public Emp(int empno, String ename, double sal, Date hiredate, int deptno) {       super();       this.empno = empno;       this.ename = ename;       this.sal = sal;       this.hiredate = hiredate;       this.deptno = deptno;    }    public int getEmpno() {       return empno;    }    public void setEmpno(int empno) {       this.empno = empno;    }    public String getEname() {       return ename;    }    public void setEname(String ename) {       this.ename = ename;    }    public double getSal() {       return sal;    }    public void setSal(double sal) {       this.sal = sal;    }    public Date getHiredate() {       return hiredate;    }    public void setHiredate(Date hiredate) {       this.hiredate = hiredate;    }    public int getDeptno() {       return deptno;    }    public void setDeptno(int deptno) {       this.deptno = deptno;    }    @Override    public int hashCode() {       final int prime = 31;       int result = 1;       result = prime * result + deptno;       result = prime * result + empno;       result = prime * result + ((ename == null) ? 0 : ename.hashCode());       result = prime * result + ((hiredate == null) ? 0 : hiredate.hashCode());       long temp;       temp = Double.doubleToLongBits(sal);       result = prime * result + (int) (temp ^ (temp >>> 32));       return result;    }    @Override    public boolean equals(Object obj) {       if (this == obj)          return true;       if (obj == null)          return false;       if (getClass() != obj.getClass())          return false;       Emp other = (Emp) obj;       if (deptno != other.deptno)          return false;       if (empno != other.empno)          return false;       if (ename == null) {          if (other.ename != null)             return false;       } else if (!ename.equals(other.ename))          return false;       if (hiredate == null) {          if (other.hiredate != null)             return false;       } else if (!hiredate.equals(other.hiredate))          return false;       if (Double.doubleToLongBits(sal) != Double.doubleToLongBits(other.sal))          return false;       return true;    }    @Override    public String toString() {       return "Emp [empno=" + empno + ", ename=" + ename + ", sal=" + sal + ", hiredate=" + hiredate + ", deptno="             + deptno + "]";    }         } 测试接口绑定方案的基本使用 public class Class001_interface_bind{     public static void main(String[] args){         //1.获取回话     SqlSession session =SessionUtils.getSession();     //2.获取接口的实现类对象     //接口多态     EmpMapper mapper =session.getMapper(EmpMapper.class);     List<Emp> list =mapper.queryAllEmp();     list.forEash(System.out::println);     //4.关闭回话     session.close(); } } ssm中的M是mybatis,下载去github 用XML配置mybatis,文件类型后要加xml http和xml为标记语言 xml第一行是版本申明  environments:环境的配置 id选择环境,transaetionManager:实物管理器  type:="jdbc"选择与jdbc相同的事务管理器 DataSource数据源配置  type="PooLED"通过数据库连接池管理连接 mappers:sql映射配置的加载:定义sql语句的配置文件 用namespace命名空间来区分,且不能重复 建议设为当前包名+类名,且不加后缀 sesst定义查询语句,标签对定义查询语句 id:sql语句的唯一标识  resultType:结果类型  parameterType:入参类型 测试类: main{    // 1.加载mybatis的核心配置文件 Resources。getResourceAsstreem("mybatis-cofig.xml");     //2.构建SqlSessionFactory SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);     //3.根据工厂构建回话 Sqlsession session =factory.openSession();     //4.执行sql,得到结果 List<Dept> list =session.seleetion("com.yjxxt.mappers.DeptMapper.queryAll");     //5.处理结果 List.forEach(System.out::println);     //6.关闭回话 session.close(); } #{} ->获取传递到sql语句中的数据 三个常用的查询方法     selectOne()用于查询单条数据的情况,返回值是一个对象,如果没有查到任何数据,则返回一个null     selectList(),执行指定的sql,得到一个List集合     selectMap:用于查询多条数据的情况,多条数据要形成一个map集合,如果查不到,返回一个空map集合(注意不是null) <package name="包名"> --> 包下所有类名都默认 ¥{}获取值-->从配置中拿数据  当结果类型为map,把一条数据的每一个字段作为map中的一个键值对,一个map展示一条数据 List<map> 如果有多条数据,每一个调数据作为一个map放入List中 接口:public interface userMaper{         //查询多个数据         public List<User> queryAll(); } sql映射文件要与接口同名     接口绑定方案:1.接口要与映射文件在同一个包中                                 2.接口要与sql映射文件同名                                 3.sql映射文件的命名空间namespace要求定义为接口的包名。接口名(权限定名)                                 4.sql标签的id属性值定义为对其接口中的抽象方法名                                 5.sql的返回值和参数要求与抽象方法的返回值与参数大保持一致

上一篇:MySQL优化案例


下一篇:mybatis_ResultMap