首页 > 代码库 > MyBatis 入门(一)

MyBatis 入门(一)

MyBatis

  mybatis和hibernate都属于orm(对象与关系映射) 框架

  mybatis的优点:

    1.sql-mapping :操作更自由,可控性高,执行效率更高

    2.轻量,学习更容易

    3.维护和修改容易

  mybatis使用场合:

    在不需要太多复杂的功能,且需要性能更高,并且希望更灵活可以使用mybatis

    什么时候不宜使用mybatis:

      对象持久化对程序完全透明时,使用hibernate

      当数据有移植需求且需要支持多种数据库是

      当应用程序要求完全动态sql时

      没有使用关系数据库时

  使用mybatis需要使用到架包:

    

     下载架包

       

 

     


 

     下面开始我么第一个mybatis练习:、

      1.建一个项目:

      2.配置mybatis-config.xml  (帮助文档 里面可以查找到 )

      3.建一个实体类

      4.创建一个mapper文件   (可以在帮助文档里面查看) 

      5.创建dao 封装类

      6.测试

先上代码:

      mybatis-config.xml:   

 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE configuration 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4   "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 <configuration> 6  <settings> 7       <setting name="cacheEnabled" value="true"/> 8        9   </settings>10     <!--  -->11   <environments default="development">12     <environment id="development">13     <!-- 事务处理方式 -->14       <transactionManager type="JDBC"/>15       <!-- 数据源 :提供数据库连接池 -->16       <dataSource type="POOLED">17           <!-- 驱动 -->18         <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>19         <!--  -->20         <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>21         <property name="username" value="super_user"/>22         <property name="password" value="abc123"/>23       </dataSource>24     </environment>25   </environments>26   27   28   <!-- 映射文件,可以配置多个 -->29   <mappers>30     <mapper resource="dao/grade.xml"/>31     32   </mappers>33  34   35 </configuration>
mybatis-config.xml

      grade.xml: 

  1 <?xml version="1.0" encoding="UTF-8" ?>  2 <!DOCTYPE mapper  3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  5 <mapper namespace="dao.MyBatis01Dao">  6 <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>  7 <!-- parameterType="int" 指定传入参数类型   id最好与接口里面的方法名一致-->  8   <select id="testgetGrade" resultType="entity.Grade">  9     select * from grade where gradeid=1 10   </select> 11    <resultMap type="entity.Grade" id="gradeMap"> 12        13   </resultMap> 14   <select id="testBatis1" parameterType="int" resultMap="gradeMap"> 15     select * from grade where gradeid>=#{gradeid} 16   </select> 17  <select id="seleTrend" parameterType="entity.Grade" resultType="entity.Grade"> 18       select * from grade where 1=1 19       <if test ="gradeid != null"> 20           <![CDATA[ 21               and gradeid<= #{gradeid} 22           ]]> 23            24       </if> 25       <if test ="gradename != null"> 26           <!-- 模糊查询 --> 27           <![CDATA[ 28           and gradename like ‘%${gradename}%‘ 29           ]]> 30       </if> 31        32        33   </select> 34    35   <insert id="insertGrade" parameterType="entity.Grade" flushCache="true"  > 36       insert into grade values(#{gradeid},#{gradename}) 37    38   </insert> 39   <insert id="insertGradeBySeq" parameterType="entity.Grade" flushCache="true"> 40       <selectKey keyProperty="gradeid" resultType="int" order="BEFORE"> 41           select seq_gradeindex.nextVal from dual 42       </selectKey> 43       insert into grade values(#{gradeid},#{gradename}) 44    45   </insert> 46    <delete id="delGrade" parameterType="entity.Grade" flushCache="true"  > 47       delete grade where gradeid=#{gradeid} 48    49   </delete> 50   <update id="upGrade" parameterType="entity.Grade" flushCache="true"  > 51       update grade set gradename=#{gradename} where gradeid=#{gradeid} 52    53   </update> 54    55    56    57   <!-- 动态查询 --> 58   <select id="testTrendSele1" parameterType="entity.Student" resultType="entity.Student"> 59       select * from student where 1=1 60       <if test="stuno != null"> 61           <![CDATA[ 62           and stuno<=#{stuno} 63           ]]> 64            65       </if> 66       <if test="name != null"> 67           <![CDATA[ 68           and name like ‘%${name}%‘ 69           ]]> 70       </if> 71       <if test="gradeid != null"> 72           <![CDATA[ 73           and gradeid>=#{gradeid} 74           ]]> 75       </if> 76    77   </select> 78   <!-- MyBatis where 查询  --> 79   <select id="testTrendSeleByWhere" parameterType="entity.Student" resultType="entity.Student"> 80       select * from student  81       <where> 82       <if test="stuno != null"> 83           <![CDATA[ 84           and stuno<=#{stuno} 85           ]]> 86            87       </if> 88       <if test="name != null"> 89           <![CDATA[ 90           and name like ‘%${name}%‘ 91           ]]> 92       </if> 93       <if test="gradeid != null"> 94           <![CDATA[ 95           and gradeid>=#{gradeid} 96           ]]> 97       </if> 98       </where> 99   100   </select>101   <!-- choose查询 -->102   <select id="testTrendSeleByChoose" parameterType="entity.Student" resultType="entity.Student">103   104   select * from student where 1=1105   <choose>106   <when test="stuno != null">107   <![CDATA[108           and stuno<=#{stuno}109           ]]>110   </when>111   <when test="name != null">112   <![CDATA[113           and name like ‘%${name}%‘114           ]]>115   </when>116   <otherwise>117   <![CDATA[118           and gradeid>=#{gradeid}119           ]]>120   </otherwise>121   </choose>122   123   </select>124   <!-- set 动态更新 -->125   <update id="testTrendSeleBySet" parameterType="entity.Grade">126       update grade127       <set>128           <if test="gradename != null">129               gradename=#{gradename}130           </if>131           132       </set>133       where gradeid=#{gradeid}134   135   </update>136   137 </mapper>
grade.xml

      dao.GradeDaoImpl:

  1 package dao.impl;  2   3 import java.io.Reader;  4 import java.util.List;  5   6 import junit.framework.TestCase;  7 import org.apache.ibatis.io.Resources;  8 import org.apache.ibatis.session.SqlSession;  9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 import org.junit.Test; 12  13 import util.MyBatisUtil; 14  15 import dao.MyBatis01Dao; 16 import entity.Grade; 17 import entity.Student; 18  19 public class GradeImplDao  extends TestCase  implements MyBatis01Dao{ 20  21      22     String resource="mybatis-config.xml"; 23     Reader reader=null; 24     SqlSessionFactory factory=null; 25     SqlSession session=null; 26     /** 27      * 测试 有参方法 28      */ 29      30     public void testV(){ 31         try { 32             //session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession(); 33              //MyBatis01Dao con=session.getMapper(MyBatis01Dao.class); 34              //con.testBatis1(5); 35              36             //testBatis1(2); 37 //            Grade grade=new Grade(); 38 //            grade.setGradeid(7); 39 //            grade.setGradename(""); 40             //delGrade(grade); 41             //insertGrade(grade); 42             //upGrade(grade); 43             //seleTrend(grade); 44             Student student=new Student(25,"ab%d",2); 45             //testTrendSele1(student); 46             testTrendSeleByChoose(student); 47             //testTrendSeleByWhere(student); 48             //testTrendSeleBySet(student); 49         } catch (Exception e) { 50             // TODO: handle exception 51             e.printStackTrace(); 52         } 53         finally{ 54             //session.close(); 55         } 56          57     } 58     /** 59      * 第一个mybatis查询 60      */ 61  62     public void testgetGrade(){ 63         try { 64             //读取配置文件 65             reader=Resources.getResourceAsReader(resource); 66             SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder(); 67             //创建sqlsessionfactory 68             factory=builder.build(reader); 69             session=factory.openSession(); 70             //读取 71             List grade=session.selectList("testgetGrade"); 72             System.out.println(grade); 73         } catch (Exception e) { 74             // TODO: handle exception 75             e.printStackTrace(); 76         }finally{ 77             session.close(); 78              79         } 80          81          82     } 83      84     /** 85      * 传入一个参数查询  seleGradeByPara 86      */ 87     public void testBatis1(int id){ 88         try { 89             //创建并且打开session 90             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession(); 91             //设置参数 92             List grade=session.selectList("testBatis1",id); 93             System.out.println(grade); 94         } catch (Exception e) { 95             e.printStackTrace(); 96         }finally{ 97             //关闭 98             session.close(); 99             100         }101     }102     103     104     105     106     /**107      * 新增108      */109     @Override110     public void insertGrade(Grade grade) {111         try {112             //打开113             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();114             //新增115             session.insert("insertGrade",grade);116             session.commit();117             //显示118             System.out.println(session.selectList("testBatis1",1)); 119         } catch (Exception e) {120             // TODO: handle exception121             e.printStackTrace();122         }finally{123             session.close();124         }125         126     }127     128     /**129      * 删除指定130      * @param grade131      */132     public void delGrade(Grade grade){133         try {134             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();135             session.delete("delGrade",grade);136             session.commit();137             System.out.println(session.selectList("testBatis1",1)); 138             139         } catch (Exception e) {140             // TODO: handle exception141             e.printStackTrace();142         }finally{143             session.close();144         }145         146     }147     /**148      * 更新149      * @param grade150      */151     public void upGrade(Grade grade){152         try {153             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();154             session.update("upGrade",grade);155             session.commit();156             System.out.println(session.selectList("testBatis1",1)); 157         } catch (Exception e) {158             // TODO: handle exception159             e.printStackTrace();160         }finally{161             session.close();162         }163     }164     165     /**166      * 动态查询167      * @param grade168      */169     public void seleTrend(Grade grade){170         try {171             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();172             173             System.out.println(session.selectList("seleTrend", grade));174             175         } catch (Exception e) {176             // TODO: handle exception177             e.printStackTrace();178         }finally{179             session.close();180         }181         182     }183     184     /**185      * 测试更新186      */187     public void testForUpdate(){188         try {189             session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();190             Grade grade=new Grade();191             grade.setGradename("研究院");192             session.insert("insertGradeBySeq",grade);193             session.commit();194         } catch (Exception e) {195             // TODO: handle exception196             e.printStackTrace();197             session.rollback();198         }finally{199             session.close();200             201         }202         203     }204 205     @Override206     public void testTrendSele1(Student student) {207         try {208             //System.out.println("111111111");209             session=(new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource))).openSession();210             List students=session.selectList("testTrendSele1",student);211             for(int i=0;i<students.size();i++){212                 System.out.println(students.get(i));213                 214                 215             }216             217             218         } catch (Exception e) {219             e.printStackTrace();220         }221         finally{222             if(session != null)223             session.close();224         }225     }226 227     @Override228     public void testTrendSeleByWhere(Student student) {229         // TODO Auto-generated method stub230         try {231             session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();232             //代替 where 1=1 where字句233             List students=session.selectList("testTrendSeleByWhere",student);234             for(int i=0;i<students.size();i++){235                 System.out.println(students.get(i));236                 237                 238             }239         } catch (Exception e) {240             e.printStackTrace();241         }242         finally{243             session.close();244         }245     }246 247     @Override248     public void testTrendSeleByChoose(Student student) {249         // TODO Auto-generated method stub250         try {251             session=MyBatisUtil.getSession();252             //choose: 只查询 其中一个条件,从上到下执行253             List students=session.selectList("testTrendSeleByChoose",student);254             for(int i=0;i<students.size();i++){255                 System.out.println(students.get(i));256                 257                 258             }259             MyBatisUtil.closeSession();260             session=MyBatisUtil.getSession();261             List students2=session.selectList("testTrendSeleByChoose",student);262             System.out.println("---------"+(students==students2)+"----------");263             264         } catch (Exception e) {265             e.printStackTrace();266         }267         finally{268             MyBatisUtil.closeSession();269         }270         271         272     }273 274     @Override275     public void testTrendSeleBySet(Student student) {276         // TODO Auto-generated method stub277         try {278             session=new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource)).openSession();279             Grade grade=new Grade();280             grade.setGradeid(2);281             grade.setGradename("一年级");282             session.update("testTrendSeleBySet", grade);283             session.commit();284             System.out.println("success!");285         } catch (Exception e) {286             e.printStackTrace();287             session.rollback();288         }289         finally{290             MyBatisUtil.closeSession();291         }292         293         294     }295     296     297     @Test298     public void testname() {299         System.out.println("11111");300     }301     302     303     304 }
GradeDaoImpl

      entity.Grade

 1 package entity; 2  3 import java.io.Serializable; 4 import java.util.HashSet; 5 import java.util.Set; 6 /** 7  * 年级实体类 8  * @author Administrator 9  *10  */11 public class Grade implements Serializable{12     //年级编号13     private Integer gradeid;14     //年级15     private String gradename;16     17     @Override18     public String toString() {19         // TODO Auto-generated method stub20         return gradeid+"\t"+gradename;21     }22     23     public Grade(){}24     25     26     public Integer getGradeid() {27         return gradeid;28     }29     public void setGradeid(Integer gradeid) {30         this.gradeid = gradeid;31     }32     public String getGradename() {33         return gradename;34     }35     public void setGradename(String gradename) {36         this.gradename = gradename;37     }38     39     40     41 }
Grade

 

      config配置文件中:

        主要配置了数据库连接信息

        以及映射文件的位置信息

      

      mapper配置文件:

        配置了各种sql语句,与config关联起来需要在config里面写上这句代码:

        <mappers>
        <mapper resource="dao/grade.xml"/>
        </mappers>

     mybatis支持哪些操作:

        增 删 改 查

     实现普通查询:

      1.配置mapper 

      <mapper namespace="dao接口包"/>   

        <select id="testgetGrade" resultType="entity.Grade">
          select * from grade where gradeid=1
        </select>

        解释:

          id:我们在dao.impl里面去操作数据库时,指定sql语句就根据id指定,id尽量与接口提供的方法同名(后面讲getMapper()可以看出作用   )

          resultType:返回值类型,支持各种类型

        2.在dao里面写代码:

          mybatis也是基于session的

          1、声明一个sqlSessionFactory对象、SqlSession对象、Reader对象

          2、读取配置文件

            //指定config路径

            String resource="mybatis-config.xml";

            //读取配置文件

            reader=Resources.getResourceAsReader(resource);

            //声明sqlsessionfactorybuilder
            SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
            //创建sqlsessionfactory
            factory=builder.build(reader);

            //开启sqlsession
            session=factory.openSession();
            //读取
            List grade=session.selectList("testgetGrade");
            //打印

            System.out.println(grade);

            暂时介绍select方法;

              selectlist方法返回的是一个list集合

 

           上面的代码里面包含了,查询,删除,修改,新增,动态查询,缓存的方法,结合帮助文档可以看明白

           下次做详细深入的总结

 

            

            

 

MyBatis 入门(一)