天天看點

Mybatis 結果集映射 配置檔案擷取查詢結果

擷取查詢結果

mybatis概念

  • 持久化 就是資料在瞬時和持久兩個狀态之間的轉換
  • ORM(Object Relational Mapping) 對象-關系映射

    從資料庫讀取資料存到pojo的類中

    或者把類中的屬性值映射到資料庫的表字段

mybatis-config.xml系統核心配置檔案

configuration 配置
    properties   可以配置在Java屬性配置檔案中
    settings    修改 MyBatis 在運作時的行為方式
    typeAliases   為 Java 類型命名一個别名(簡稱)
    typeHandlers   類型處理器
    objectFactory   對象工廠
    plugins   插件
    environments   環境
    	environment   環境變量
    		transactionManager  事務管理器
    		dataSource   資料源
    mappers    映射器

           

MyBatis的核心對象

  1. SqlSessionFactoryBuilder 使用build()方法建立sqlSessionFoctory工廠對象
  2. SqlSessionFactory 建立sqlSession對象的工廠
  3. SqlSession 用于執行sql語句
  4. Resources 讀取配置檔案

mybatis-config.xml配置檔案

<?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配置檔案 -->
	<properties resource="database.properties">
		<property name="driver" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&amp;characterEncoding=utf-8" />
		<property name="username" value="root" />
		<property name="password" value="ok" />
	</properties>

	<!-- 工具設定 -->
	<settings>
				<!-- log4j日志配置 -->
		<setting name="logImpl" value="LOG4J" />
		
				<!-- 類屬性自動映射  FULL為完全自動映射  PARTIAL為隻映射沒有定義的  NONE為取消映射  -->
		<setting name="autoMappingBehavior" value="FULL" />

				<!-- 緩存配置 -->
		<setting name="cacheEnabled" value="true" />
	</settings>

	<!-- pojo類别名配置 -->
	<typeAliases>
		<!-- 單獨設定一個類的别名 -->
		<typeAlias type="pojo.User" alias="user" />
		<!-- 設定這個包下的所有類自動識别别名 給個最頂頭的父包就行 如:pojo.User 自動識别為:user -->
		<package name="pojo" />
	</typeAliases>

	<!-- 運作環境配置 -->
	<environments default="dev">
		<environment id="dev">
			<!-- 事務處理類型 -->
			<transactionManager type="JDBC"></transactionManager>
			<!-- 配置資料源 type:資料源類型 -->
			<dataSource type="POOLED">
				<!-- 設定驅動 -->
				<property name="driver" value="${driver}" />
				<!-- 設定連接配接字元串 -->
				<property name="url" value="${url}" />
				<!-- 使用者名 -->
				<property name="username" value="${username}" />
				<!-- 密碼 -->
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>

	<!-- 映射檔案注冊 -->
	<mappers>
		<mapper resource="dao/user/UserMapper.xml" />
	</mappers>
</configuration>
           

UserMapper.xml配置檔案

<!-- 實體類裡含有其他實體類對象屬性 -->
<mapper namespace="dao.user.UserMapper">
	<!-- 相同的SQL語句提取 -->
	<sql id="selectuser">
		SELECT * FROM smbms_user
	</sql>
	<!-- 在其他地方用include引入 -->
	<select id="getUserListById" resultType="user">
		<include refid="selectuser"/> WHERE id = #{id}
	</select>
	
	<!--  緩存:全局配置 eviction是緩存類型 flushInterval是重新整理時間 size是大小(kb) readOnly是隻讀模式 -->
	<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" />

	<select id="getUserList2" resultMap="getUserList2Map">
		SQL語句
	</select>
	<!-- 單個對象 -->
	<!-- type是傳回資料映射的實體類類型   id對應上面的resultMap -->
	<resultMap type="User" id="getUserList2Map">
		<!-- column對應SQL語句的字段    property對應映射實體類的屬性 -->
		<result column="userCode" property="userCode" />
		<result column="userName" property="userName" />
		<!-- property是對象屬性的名稱 javaType為對象屬性的類型 -->
		<association property="role" javaType="pojo.Role">
			<result column="roleName" property="roleName" />
		</association>
	</resultMap>

	<!-- 實體類類裡面含有其他實體類類型的集合屬性 -->
	<resultMap type="User" id="getUserById2Map">
		<result column="userCode" property="userCode" />
		<result column="userName" property="userName" />
		<!-- property是集合屬性的名稱 ofType是此集合括号裡的類型名稱 -->
		<collection property="addressList" ofType="pojo.Address">
			<result column="contact" property="contact" />
			<result column="addressDesc" property="addressDesc" />
			<result column="tel" property="tel" />
		</collection>
	</resultMap>
</mapper>
           

單個對象結構結果集映射

<!-- type是傳回資料映射的實體類類型   id對應上面的resultMap -->
<resultMap type="User" id="getUserList2Map">
	<!-- column對應SQL語句的字段    property對應映射實體類的屬性 -->
	<result column="userCode" property="userCode" />
	<result column="userName" property="userName" />
	<!-- property是對象屬性的名稱 javaType為對象屬性的類型 -->
	<association property="role" javaType="pojo.Role">
		<result column="roleName" property="roleName" />
	</association>
</resultMap>
           

集合結果集映射

<!-- 實體類類裡面含有其他實體類類型的集合屬性 -->
<resultMap type="User" id="getUserById2Map">
	<result column="userCode" property="userCode" />
	<result column="userName" property="userName" />
	<!-- property是集合屬性的名稱 ofType是此集合括号裡的類型名稱 -->
	<collection property="addressList" ofType="pojo.Address">
		<result column="contact" property="contact" />
		<result column="addressDesc" property="addressDesc" />
		<result column="tel" property="tel" />
	</collection>
</resultMap>
           

SQL語句提取

<!-- 相同的SQL語句提取 -->
<sql id="selectuser">
	SELECT * FROM smbms_user
</sql>
<!-- 在其他地方用 include 引入 -->
<select id="getUserListById" resultType="user">
	<include refid="selectuser"/> WHERE id = #{id}
</select>
           

pojo 類的作用

  1. 用于把資料庫的資料讀取出來用java對象來儲存
  2. 把存在的java對象持久化儲存到資料庫中

配置檔案裡的SQL語句

  1. 模糊查詢:LIKE CONCAT(’%’,#{值},’%’)
  2. 分頁查詢:LIMIT #{頁碼},#{每頁顯示數} 在調用方法傳參時用 ( (頁碼-1)*每頁顯示數 , 每頁顯示數 ) 一一對應