Mybatis學習筆記(二)-Mybatis配置檔案與對映檔案詳解
阿新 • • 發佈:2019-01-11
一、Mybatis配置檔案詳解
以下是mybatis.xml檔案,提倡放在src目錄下,檔名任意
<?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>
<!-- 載入類路徑下的屬性檔案 -->
<properties resource="db.properties" />
<!-- 設定類型別名(在書寫XXXMapper.xml配置檔案時,其中的全路徑名可以使用別名代替) -->
<typeAliases>
<typeAlias type="com.madman0621.entity.User" alias="user"/>
</typeAliases>
<!-- 設定一個預設的連線環境資訊 -->
<environments default="development">
<!-- 連線環境資訊,取一個任意唯一的名字 -->
<environment id="development">
<!-- mybatis使用jdbc事務管理方式 -->
<transactionManager type="JDBC"/>
<!-- mybatis使用連線池方式來獲取連線 -->
<dataSource type="POOLED">
<!-- 配置與資料庫互動的4個必要屬性 -->
<property name="driver" value="${driver_class}"/>
<property name="url" value="${url}"/>
<property name="username" value="${uname}"/>
<property name="password" value="${upass}"/>
</dataSource>
</environment>
</environments>
<!-- 載入對映檔案-->
<mappers>
<mapper resource="com/madman0621/entity/UserMapper.xml"/>
</mappers>
</configuration>
db.properties檔案的內容為:
uname=root
upass=root
driver_class=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
initPoolSize=5
maxPoolSize=10
二、Mybaits對映檔案詳解
以下是StudentMapper.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">
<!-- namespace屬性是名稱空間,必須唯一,java程式碼中根據名稱空間呼叫其方法 -->
<mapper namespace="mynamespace">
<!-- resultMap標籤:對映實體與表
type屬性:表示實體全路徑名(全路徑名可以使用在mybatis.xml檔案中配置的別名代替)
id屬性:為實體與表的對映取一個任意的唯一的名字
-->
<!-- 當實體屬性與表字段名不相同的時候,必須書寫以下對應程式碼
當實體屬性與表字段名相同的時候,以下程式碼可選
-->
<resultMap type="student" id="studentMap">
<!-- id標籤:對映主鍵屬性
result標籤:對映非主鍵屬性
property屬性:實體的屬性名
column屬性:表的欄位名
-->
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="sal" column="sal"/>
</resultMap>
<!--
insert標籤:要書寫insert這麼一個sql語句
id屬性:為insert這麼一個sql語句取一個任意唯一的名字
parameterType:要執行的dao中的方法的引數,如果是類的話,必須使用全路徑類(全路徑名可以使用在mybatis.xml檔案中配置的別名代替)
-->
<insert id="add1">
insert into students(id,name,sal) values(1,'哈哈',7000)
</insert>
<insert id="add2" parameterType="student">
insert into students(id,name,sal) values(#{id},#{name},#{sal})
</insert>
<!-- 根據ID查詢學生
如果引數不是一個實體的話,只是一個普通變數,例如:int,double,String
這裡的#{中間的變數名可以隨便寫},不過提倡就用方法的形參
當實體類屬性與表字段名不相同的時候,返回資料使用resultMap屬性,mybatis會將查詢出來的表記錄和studentMap這個id所對應的對映結果相互匹配
-->
<select id="findById" parameterType="int" resultMap="studentMap">
select id,name,sal from students where id = #{anything}
</select>
<!-- 查詢所有學生
理論上resultType要寫List<Student>
但這裡只需書寫List中的型別即可,即只需書寫Student的全路徑名
當實體類屬性和表字段名一一對應相同的時候,返回資料使用resultType屬性,只需要填寫類的全路徑名
-->
<select id="findAll" resultType="student">
select id,name,sal from students
</select>
<!-- 更新學生 -->
<update id="update" parameterType="student">
update students set name=#{name},sal=#{sal} where id=#{id}
</update>
<!-- 刪除學生 -->
<delete id="delete" parameterType="student">
delete from students where id = #{id}
</delete>
<!--
注意:這個insert/update/delete標籤只是一個模板,在做操作時,其實是以SQL語句為核心的
即在做增/刪/時,insert/update/delete標籤可通用,
但做查詢時只能用select標籤
我們提倡什麼操作就用什麼標籤
-->
</mapper>