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:
如果今後發現有什麽有趣的功能或者小技巧在補充吧,也歡迎大神補充~~
mybatis入門篇基——基本配置與參數說明