擷取查詢結果
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的核心對象
- SqlSessionFactoryBuilder 使用build()方法建立sqlSessionFoctory工廠對象
- SqlSessionFactory 建立sqlSession對象的工廠
- SqlSession 用于執行sql語句
- 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&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 類的作用
- 用于把資料庫的資料讀取出來用java對象來儲存
- 把存在的java對象持久化儲存到資料庫中
配置檔案裡的SQL語句
- 模糊查詢:LIKE CONCAT(’%’,#{值},’%’)
- 分頁查詢:LIMIT #{頁碼},#{每頁顯示數} 在調用方法傳參時用 ( (頁碼-1)*每頁顯示數 , 每頁顯示數 ) 一一對應