zoukankan      html  css  js  c++  java
  • mybatis入门篇基——基本配置与参数说明

    Mybatis

      好吧这是我第一次写这种文章~如果有不足和错误之处欢迎评论,指点。今天想谈谈关于mybatis的一些基础入门知识。

      进入正题~~:

      a.关于mybatis:

        我个人觉得mybatis深得中国中庸之道的精髓,虽然在执行速度上来说它没有直接使用jdbc那么效率,也不如Hibernate那么全自动(O/R mapping),只能算是个半自动的(O/R mapping)

      但是半自动的好处就在于它的各个方面的缺点也都不像jdbc或者Hibernate那么突出.兼顾了效率也预防了优化sql的问题。

      b.所需要使用到的jar

        1.mybatis  2.ojdbc  3.hamcrest(mybatis的依赖包,如果使用maven下载mybatis会自动下载此包)

      c.需要用到的2个xml(1.SqlMapConfig.xml  ,  2.EmpMapper.xml)1.(配置文件)  2.(映射文件)

        c.1:SqlMapConfig.xml  

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
    <configuration>
    <environments default="environment">
    <environment id="environment">
    <transactionManager type="JDBC" />
    <dataSource type="POOLED">
    <property name="driver" value="oracle.jdbc.driver.OracleDriver" />
    <property name="url"
    value="jdbc:oracle:thin:@172.17.6.250:1521:orcl" />
    <property name="username" value="openlab" />
    <property name="password" value="***" />
    </dataSource>
    </environment>
    </environments>
    <!-- 指定映射文件的位置: -->
    <mappers>
    <mapper resource="entity/EmpMapper.xml" />
    </mappers>
    </configuration>

        c.2:EmpMapper.xml

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
    "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

    <mapper namespace="test">
    <!-- id:要求唯一,可以称之为sqlId
    parameterType:参数类型,要写类的完整的名字 -->
    <insert id="save" parameterType="entity.Employee">
    insert into syq_emp values (syq_emp_seq.nextval,#{name},#{salary},#{age})
    </insert>
    <!-- 
    resultType:返回类型
    -->
    <select id="findAll" resultType="entity.Employee">
    select * from syq_emp order by id
    </select>
    <select id="findById" 
    parameterType="int"
    resultType="entity.Employee">
    select * from syq_emp where id=#{id}
    </select>
    <update id="modify" parameterType="entity.Employee">
    update syq_emp set name=#{name}, salary=#{salary},age=#{age} 
    where id=#{id}
    </update>
    <delete id="delete" parameterType="int">
    delete from syq_emp where id=#{id}
    </delete>
    <!-- map是Java.util.Map的简写形式 -->
    <select id="findById2" parameterType="int" resultType="map">
    select * from syq_emp where id=#{id}
    </select>
    <!-- 告诉mybatis,实体类的属性名与数据库的字段名的对应关系
    注:只需要将不一致的列举出来 -->
    <resultMap type="entity.Emp" id="empResultMap">
    <result property="empId" column="id"/>
    </resultMap>
    <select id="findById3" parameterType="int"
    resultMap="empResultMap">
    select * from syq_emp where id=#{id}
    </select>
    </mapper>

      d.最后就是测试mybatis啦~~

                (我使用的是junit来测试:具体代码如下:)

    public class TestCase {
    private SqlSession ss;
    @Before
    public void test() {
    String config="SqlMapConfig.xml";
    SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();
    SqlSessionFactory ssf=
    ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));
    ss=ssf.openSession();

    }
    @Test
    public void test1() {
    /*
    * SqlSession提供了执行sql的个各种方法,一般第一个是参数要执行的sql的ID
    * 如果是添加,删除及修改操作,要提交事务
    * 方法执行完毕,要关闭SqlSession
    */
    Employee e=new Employee();
    e.setName("杨过");
    e.setSalary(2000.0);
    e.setAge(25);
    ss.insert("test.save",e);
    ss.commit();
    ss.close();
    }
    //findAll
    @Test
    public void test2() {
    List<Employee> list=ss.selectList("test.findAll");
    System.out.println(list);
    ss.close();
    }
    //findById
    @Test
    public void test3() {
    Employee e=ss.selectOne("test.findById", 2);
    System.out.println(e);
    ss.close();
    }
    //测试修改
    @Test
    public void test4() {
    Employee e=ss.selectOne("test.findById", 2);
    System.out.println(e.getSalary());
    e.setSalary(e.getSalary()+1000);
    ss.update("modify", e);
    ss.commit();
    ss.close();
    }
    //测试删除
    @Test
    public void test5() {
    ss.delete("test.delete", 2);
    ss.commit();
    Employee e=ss.selectOne("test.findById", 2);
    System.out.println(e);
    ss.close();
    }
    //测试返回map型
    @Test
    public void test6() {
    Map map=ss.selectOne("findById2",4);
    System.out.println(map);
    ss.close();
    }
    //测试实体类属性与数据库不一样的解决方法
    @Test
    public void test7() {
    Emp e=ss.selectOne("findById3", 4);
    System.out.println(e);
    }
    }

       e.最后谈谈映射器吧:

    1)mapper映射器是什么?

      符合映射文件要求的接口。

        要求如下:

           a.方法名要与sqlId一致。

           b.方法的返回类型要与resultType一致。

           c.方法的参数类型要与parameterType一致。

           d.映射文件的namespace必须等于接口的完整的名字。

    注: mybatis会生成符合该接口(mapper映射器)要求的对象。

    2)如何使用mapper映射器?

      step1.按照要求写好接口。

      step2.调用SqlSession提供的getMapper方法来获得接口实现

    ps:

        如果今后发现有什么有趣的功能或者小技巧在补充吧,也欢迎大神补充~~

  • 相关阅读:
    日本最大的汽车品牌:丰田【仅供自己参考】
    读书笔记1
    读书笔记1
    计算机网络笔记1
    ZY凉凉经
    HK凉凉经
    访问一个网站,发生了什么?
    正向代理VS反向代理
    mac下打开hosts文件
    国际手机区号
  • 原文地址:https://www.cnblogs.com/shuyuq/p/7434748.html
Copyright © 2011-2022 走看看