mybatis入门一

mybatis中文官网:https://mybatis.org/mybatis-3/zh/index.html

一、Mybatis是什么?

       mybaits是一种持久层框架,实现数据的持久化操作。是ORM(Object Relational Mapping),对象关系映射框架的一种,支持定制化sql,存储过程,关系映射;封装了jdbc的

所有的数据操作过程;简化了参数传递,对象映射的过程。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映

射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

二、使用Mybatis(仅仅是单独使用,没有使用maven)

     (1) 下载mybatis的jar包引入到工程中(下载地址:https://mvnrepository.com/search?q=mybatis)

     (2) 正常在src目录下建立dao层,entity层 (以部门和员工关系为例)

          dao层:

              package com.aaa.dao;
              import com.aaa.entity.Dept;
              import com.aaa.entity.Emp;
              import java.util.List;

              public interface Deptdao {


              List<Dept> quaryall();

              int update1(Dept dept);

              List<Dept> deptandemp();

             }
        entity层:

               package com.aaa.entity;

               import java.util.List;

               public class Dept {
                      private Integer deptno;//部门编号
                      private String dname;//部门名字

                     public Dept() {
                     }

                    public Dept(Integer deptno, String dname) {
                    this.deptno = deptno;
                    this.dname = dname;
                    }

                   public Integer getDeptno() {
                   return deptno;
                    }

                   public void setDeptno(Integer deptno) {
                   this.deptno = deptno;
                   }

                   public String getDname() {
                   return dname;
                   }

                   public void setDname(String dname) {
                   this.dname = dname;
                   }

         @Override
public String toString() {
return "Dept{" +
"deptno=" + deptno +
", dname='" + dname + '\'' +
'}';
}

}

     (3) 在src目录下创建mybatis-config.xml(全局配置文件)

          全局配置文件里边主要就是项目要使用连接的数据库和映射dao接口的映射文件

          <?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>
          <environments default="mysql">
          <!--environments中可以有多environment,idenvironment的,environments后的default值对应
       id,就使用那environment-->
      <environment id="mysql">
      <transactionManager type="JDBC"/>
      <!--datasource型可以配置成其型之一,如UNPOOLED,POOLED,JNDI
         1、如果将类置成UNPOOLEDMybatis会为每一个数操作建一新的
            接,并关闭它方式适用于只有小并发简单应用程序上。
         2、如果将属置成POOLEDMybaits会创建一个数库连接池,接池中的
            一个连将会被用作操作。一旦操作完成,Mybatis会将接返回
            给连接池。在开发测试环境中,常使用此方式。
         3、如果将类JNDIMybatis用服器向配置好的JNDI据源dataSource
            库连接。在生产环境中,先考虑这种方式
       -->
     <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <!--allowMultiQueries=true:开启批量更新-->
        <property name="url" value="jdbc:mysql://localhost:3306/hbb?allowMultiQueries=true"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
     </dataSource>
    </environment>
   </environments>

    <mappers>

       <!--dao接口的映射文件相对路径-->
       <mapper resource="com/aaa/dao/DeptMapper.xml"/>
    </mappers>
  </configuration>

     (4) 编写dao接口的xml格式的映射文件(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:命名空间,对应相应的dao接口的项目内文件名-->
          <mapper namespace="com.aaa.dao.Deptdao">

                  <!--select、update、delete、insert标签后的id名是dao接口中的写的方法名。resulttype:结果类型-->
         <select id="quaryall" resultType="com.aaa.entity.Dept">
            select * from dept
         </select>
         <update id="update1">
            update dept set dname=#{dname} where deptno=#{deptno}
         <!--#{}:代表方法中的参数-->

         </update>
     </mapper>

     (5) 构建SqlSession。

          每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。用SqlSessionFactory构建出来sqlsession对象,SqlSession 完全包含了面向数据库执行 SQL 命令所

需的所有方法。你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。

       Mybatis中包含一个叫Resources的工具类,可以使从classpath或其他路径加载资源文件更加的方便。

         构建sqlsession对象过程:

             String   resource="Mybatis-config.xml"; //全局配置文件的文件名

             InputStream inputStream= Resources.getResourcesAsStream(resource); //通过Resources工具类来读取配置文件

             SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);

       

        构在每次需要执行sql的时候都要去构建一次sqlsession,建议将这个过程包装成工具类:

             public class Factory {
                   private static SqlSessionFactory sqlSessionFactory=null;
                   static {
                         String resource="mybatis-config.xml";
                         try {
                                InputStream inputStream= Resources.getResourceAsStream(resource);
                                sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
                              }catch (Exception e){
                               e.printStackTrace();
                              }
                            }
                 public static SqlSession getsqlsession(){
                          return sqlSessionFactory.openSession();
                       }
                 }

 

       (6) 进行测试操作

       public class test(){

          public static void main(){

             //通过工厂类来得到sqlsession对象

             SqlSession sqlSession=Factory.getsqlsession();

            //通过getMapper()方法来加载deptdao的class文件,

            Deptdao mapper= sqlSession.getMapper(Deptdao.class);

            //sqlsession只是一个会话过程,update,insert,delete需要去事务提交,才能在数据中修改,出现错误进行回滚

            try{

                   Dept dept=new Dept();

                   dept.setDeptno(1);

 

                   dept.setDname("孔乙已");

 

                   mapper.update(dept);  

                   sqlsession.commit();

 

               }catch(Exception e){

                  e.printStackTrace();

                  sqlsession.rollback();

              }

           List<Dept> list= mapper.quaryall();

           for(Dept dept:list){

                 System.out.println("部门信息:"+dept);

              }

         }

}

 

posted @ 2019-10-22 11:55  橙汁one  阅读(254)  评论(0编辑  收藏  举报