mybatis简介及使用


1.    MyBatis简介

MyBatis 本是apache的一个开源项目 iBatis , 2010年这个项目由apache software foundation 迁移到了googlecode,并且改名为MyBatis.

MyBatis 是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除   了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML   或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java   对象)映射成数据库中的记录。  每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。   用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。

2.初识MyBatis

我们学过ibatis以后,再来学习MyBatis就会觉得很简单了。现在我们来初步了解下MyBatis的基本配置和使用。

(1).首先是导入jar包。师兄这里用的是,mybatis-3.1.1.jar。你们可以下载最新的jar包,在看前必读里有链接,也可以上网找……当然数据库驱动jar包是必不可少的.

(2). 写mybatis.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>

    <typeAliases>

       <typeAlias alias="dept" type="com.siqi.po.Dept"/> //定义别名

    </typeAliases>

<environments default="development">  

 

//<environments>属性是数据源环境配置,可以配置多个数据源配置。每个//<environment>属性代表一种配置方式。

 

        <environment id="development">   //环境配置,可以配置多个

            <transactionManager type="JDBC" />//配置事务管理

            <dataSource type="POOLED">           //配置数据源

                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>

                <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>

                <property name="username" value="scott"/>

                <property name="password" value="tiger"/>

            </dataSource>

        </environment>

    </environments>

    <mappers>

        <mapper resource="com/siqi/po/dept.xml" />

    </mappers>

</configuration>

 

注意:上面代码中,我为了方便理解加上注释,真实编码时,不能加注释!

(3).接下来,我们要书写Dept类和dept.xml配置文件

 

注意:在dept.xml配置中:

下面是dept.xml的部分参考代码:

       <?xml version="1.0"encoding="UTF-8"?>

 

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

<mapper namespace="com.siqi.po">

    <resultMap type="com.siqi.po.Dept" id="siqi">

       <id property="deptno"column="deptno"  />

       <result property="dname"column="dname" />

       <result property="loc"column="loc" javaType="string"jdbcType="VARCHAR" />

    </resultMap>

   

     <select id="find" parameterType="dept"resultMap="siqi">

       select * from dept

    </select>

 

    <select id="findById" parameterType="dept"resultMap="siqi">

       select * from dept where deptno=#{deptno}

    </select>

  

    <insert id="insertDept" parameterType="dept">

       insert into dept values (#{deptno},#{dname},#{loc})

    </insert>

   

    <update id="merge"parameterType="dept">

       update dept set

       dname=#{dname},loc=#{loc} where deptno=#{deptno}

    </update>

   

    <delete id="delete"parameterType="dept" >

       delete from dept where deptno=#{deptno}

    </delete>

   

</mapper>

 

3.测试

上面我们已经完成了配置工作,现在我们书写Test类,进行测试。代码如下:

       publicclass Test {

    publicstaticvoid main(String[] args) {

      

       String rs="mybatis.xml";

       Reader reader=null;

       try {

           reader=Resources.getResourceAsReader(rs);

       } catch (IOException e) {

           // TODO Auto-generatedcatch block

           e.printStackTrace();

       }

      

       SqlSessionFactory sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);

          

       SqlSession session = sqlSessionFactory.openSession();

       Dept d=new Dept();

       List list=session.selectList("find", d);

       for(int i=0;i<list.size();i++){

           Dept dept=(Dept)list.get(i);

           System.out.println(dept.getDname());

       }

       session.commit();

       session.close();

    }

}

 

上面代码我们进行了查询工作。经测试可以查询出数据。

1)。增加数据,部分代码如下

              Dept d=new Dept();

       d.setDeptno(80);

       d.setDname("hello");

       d.setLoc("world");

       session.insert("insertDept", d);   //insert方法增加数据,参数中的//insertDept对应配置文件中的insert标签的id

(2).修改数据,部分代码如下:

       Dept d=new Dept();

       d.setDeptno(80);

       d.setDname("haungpu");

       d.setLoc("siqi");

       session.insert("merge", d);

3.删除数据,部分代码如下:

Dept d=new Dept();

       d.setDeptno(80);

       session.insert("delete", d);

经过测试,上述代码无误!!

4.拓展

(1)一对多我们以deptemp表为例

首先,先在po包中写上Emp类。

然后,在Dept类,加上泛型为Emp的集合

 

然后,在dept.xml配置文件中,加上一下代码:

查询方法中,也要注意,加上:

同样,经过上述配置,也就成功了。我们可以测试一下,测试部分代码如下:

              Dept d=new Dept();

       d.setDeptno(30);

       List list=session.selectList("findById", d);

       Dept dept=(Dept)list.get(0);

       List li=dept.getList();

       System.out.println("部门名称为:"+dept.getDeptno());

       for(int i=0;i<li.size();i++){

           Emp e=(Emp)li.get(i);

           System.out.println("员工为:"+e.getEname());

       }

测试结果如下:

   

 

2)。一对一,我们以人和档案为例,一个人对应一份档案。

       1.首先写好Person,DangAn类,然后在person.xml映射文件中,配置如下代码:

参考代码如下:

       <?xml version="1.0" encoding="UTF-8"?>

 

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

<mapper namespace="com.siqi.po">

    <resultMap type="com.siqi.po.Person" id="hello">

       <id property="perid"column="perid"  />

       <result property="pername"column="pername"  />     

      

       <association property="dangAn"column="perid" javaType="com.siqi.po.DangAn">

              <id property="perid"column="perid" />

              <result property="perage"column="perage" />

              <result property="peraddr"column="peraddr" />

       </association>

      

    </resultMap>

 

    <select id="selectById" parameterType="com.siqi.po.Person" resultMap="hello">

       select * from tb_person d join tb_dangan p on d.perid =p.perid where d.perid =#{perid}

    </select>

   

</mapper>

 

3)测试

Person p=new Person();

       p.setPerid(77);

       List list=session.selectList("selectById",77);

       System.out.println(list.size());

       p=(Person)list.get(0);

       System.out.println(p.getDangAn().getPerage());

 

经测试,上述代码无误!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值