1. 程式人生 > >mybatis入門篇基——基本配置與參數說明

mybatis入門篇基——基本配置與參數說明

*** values resource clas mybatis prop 測試 mapper ppi

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:

    如果今後發現有什麽有趣的功能或者小技巧在補充吧,也歡迎大神補充~~

mybatis入門篇基——基本配置與參數說明