Mybatis初学经验----------------(2)

至于myBatis的配置上篇文章中有就不说了今天谈谈myBatis编写Dao层时的用法

传统Dao层代码需求

1、在Dao层实现类中,存在大量的模板方法,能否提取模板方法,减少我们的工作量。

2、将statementId硬编码到了Dao层实现类。

 

 

采用mapper代理的方式进行Dao层的开发,需要有几个约定(约定大于配置)

1XXXMapper.xmlnamespace的值需要与Dao接口中的全类名相同。 (确定哪一个XXXMapper.xml文件)

2XXXMapper.java 接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql);

3XXXMapper.java 接口中的方法输入参数需要与XXXMapper.xmlParameterType定义的类型相同;

4XXXMapper.java 接口中的方法返回值类型需要与XXXMapper.xmlresultType定义的类型相同;

 

具体使用方法如下:

收下建立如下的三个文件

 

userMapper.xml 的编写与之前类似

<?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.xt.mybatis.hello.Mapper.AnimalMapper">

 <!—

XXXMapper.xml中namespace的值需要与Dao接口中的全类名相同。 (确定哪一个XXXMapper.xml文件)

 

 statementId=namespace+queryAnimalInfoBySid

 属性ID:标示映射文件中的sql的唯一性,ID被称为statementId

属性 parameterType: 入参参数类型

属性resultType:输出结果类型,表示单条数据记录映射成的javaBean

 

#{value} 表示预处理,代表占位符

${value} 表示sql字符串的拼接,将结束到的数据不加任何修饰拼装到sql中。

 

resultMap: 数据字段名与输出类型属性的一个对应。

type:代表输出的javaBean类

  -->

  <resultMap type="com.xt.mybatis.hello.Animal.entity.Animal" id="Animal">

     <id column="SID" property="sid"/>

     <result column="Name" property="name"/>

     <result column="Kind" property="kind"/>

     <result column="Number" property="number"/>

     <result column="Address" property="address"/>

  </resultMap>

 <select id="queryAnimalInfoBySid" parameterType="int" resultMap="Animal">

 select * from animal where SID=#{sid}

 </select>

 

<insert id="insertAnimal" parameterType="com.xt.mybatis.hello.Animal.entity.Animal">

insert into animal vaules (#{sid},#{name},#{kind},#[number},#{addrss})

</insert>

<delete id="deleteAnimal" parameterType="string">

delete from animal where SID=#{sid}

</delete>

<update id="updateAnimal" >

update animal set Name=#{name},Kind="kind", Number =#{number},Address=#{address} where SID=#{sid}

</update>

</mapper>

 

同时你要引入你所建立的这个Mapper

mybatis-config.xml中加入下面的代码

<mappers>

   <mapper resource="com/xt/mybatis/hello/Mapper/userMapper.xml"/>

  </mappers>

 

接口内的方法要注意了:

public interface AnimalMapper {

  public List<Animal> queryAnimalInfoBySid(int sid);

  /*

XXXMapper.java 接口中的方法名与XXXMapper.xml中的statementId相同(确定使用哪个sql);

XXXMapper.java 接口中的方法输入参数需要与XXXMapper.xml中ParameterType定义的类型相同;

XXXMapper.java 接口中的方法返回值类型需要与XXXMapper.xml中resultType定义的类型相同;

 

*/

  public void insertAnimal(Animal al);

  

  public void deleteAnimal(String sid);

  

  public void updateAnimal(Animal al);

}

下面我们就可以进行测试了

public class mapperTest {

    SqlSession ss=null;

    @Before 

    public void Init(){

     try {

     SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis/mybatis-config.xml"));

ss = ssf.openSession();

} catch (IOException e) {

e.printStackTrace();

}

    }

    @Test

    public void queryAnimalInfoBySid(){

     AnimalMapper map = ss.getMapper(AnimalMapper.class);

     System.out.println("=========Animal========"+map.queryAnimalInfoBySid(1806));

     ss.close();

    }

}

 

 

结果如下

 

 

posted @ 2017-11-12 18:38  风雨长安  阅读(254)  评论(0编辑  收藏  举报
博客