一. MyBatis的概述 ##*
什麼是JDBC?
JDBC 代表 Java Database Connectivity ,它是提供了一組 Java API 來訪問關係數據庫的 Java 程序。這些 Java APIs 可以使 Java 應用程序執行 SQL 語句,能夠與任何符合 SQL 規範的數據庫進行交互。
JDBC 提供了一個靈活的框架來編寫操作數據庫的獨立的應用程序,該程序能夠運行在不同的平臺上且不需修改,能夠與不同的 DBMS 進行交互。
ORM概念?
ORM表示Object-Relational Mapping,它是一種思想,其本質是把數據庫中的數據用對象表示出來.
Hibernate:基於對象的ORM實現。
MyBatis:基於SQL的半ORM實現。
MyBatis是什麼?
MyBatis是支持定製化SQL,存儲過程以及高級映射的優秀的持久層框架.MyBatis幾乎避免所有的JDBC代碼和手動設置的參數以及獲取結果集.MyBatis可以對配置和原生Map使用簡單的 XML 或註解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數據庫中的記錄。
MyBatis是一個實現了java數據持久化的開源框架,簡單的來說,他就是一個JDBC的封裝組件。
MyBatis的工能框架:
API接口:
提供給外部使用的接口API,開發人員通過哲學本地API來操作數據庫,接口層接收到調用請求就會調用數據處理層來完成具體的數據處理.
數據處理層:
負責具體的SQL查找,SQL解析,SQL和執行結果映射處理等,它主要的目的是根據調用的請求完成一次數據庫操作.
基礎支撐層:
負責最基礎的功能支撐,包括連接管理,事物管理,配置加載和緩存處理,這些都是共用的東西,將他們抽取出來作爲基礎組件,爲上層數據處理提供最基礎的支撐
二. mapper開發
Mapper的代理開發:
mybatis根據一些規則自動創建mapper接口的實現類的代理對象。
規則:
* 在XXXmapper.xml中namespace等於mapper接口地址。
例如:
<mapper namespace="com.tz.mybatis.mapper.UserMapper">
- XXXmapper.java接口中的方法和XXXmapper.xml中的statement的Id一致。
public interface UserMapper {
public User getUserById(int id);
public List<User> getUserList();
public void addUser(User user);
public void delUser(int id);
public void uptUser(User user);
}
在XXXmapper.xml中:
<!-- 單個查詢 -->
<select id="getUserById" parameterType="int" resultType="com.tz.mybatis.entity.User">
select id, name,password,age,creae_time from user where id=#{id}
</select>
<!-- 多個查詢 -->
<select id="getUserList" parameterType="int" resultType="user">
select id, name,password,age,creae_time from user
</select>
<!--添加 -->
<insert id="addUser" parameterType="user">
inser into user(name, password,age,create_time) value(#{name}, #{password},
#{age}, #{createTime})
</insert>
<!-- 刪除 -->
<delete id="delUser" parameterType="user">
delete from user where id = #{id}
</delete>
<!-- 更新 -->
<update id="uptUser" parameterType="user">
update user set name = #{name}, password = #{password}, age = #{age},
create_time = #{createTime} where id = #{id}
</update>
- XXXmapper.java接口中的方法輸入參數和XXXmapper.xml中statement的parameterType指定的類型一致。
根據上面的代碼可以看得出
- XXXmapper.java接口中的方法的返回值類型和XXXmapper.xml中statement的resultType指定的類型一致。
MayBatis配置:
properties:
用於配置數據庫的連接數據,這些屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,亦可通過 properties 元素的子元素來傳遞。
<propertites resource="jdbc.properties"></propertites>
settings
全局的配置參數。mybatis中的運行時行爲設置 ,比如緩存的開啓,駝峯命名的映射,延遲加載的設置等等。
<!-- 是否開啓自動駝峯命名規則crate_time, createTime, 默認false -->
<settings>
<setting name="mapUnderscoreToCameCase" value="true"></setting>
</settings>
別名(typeAliases)
類型別名是爲 Java 類型設置一個短的名字。它只和 XML 配置有關,存在的意義僅在於用來減少類完全限定名的冗餘。
已經爲許多常見的 Java 類型內建了相應的類型別名。它們都是大小寫不敏感的,需要注意的是由基本類型名稱重複導致的特殊處理。
<!-- 設置別名 -->
<typeAliases>
<!-- 單個設置別名 -->
<typeAlias type="com.tz.mybatis.entity.User" alias="user"/>
<!-- 批量設置別名 -->
<package name="com.tz.mybatis.entity"/>
</typeAliases>
配置環境(environments)
環境配置,可以配置多種數據庫連接。
不過要記住:儘管可以配置多個環境,每個 SqlSessionFactory 實例只能選擇其一。
private SqlSessionFactory sqlSessionFactory;
public void init ( ) throws IOException{
String configFile = " mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(configFile );
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream );
}
<!-- 默認引用哪個數據庫環境 -->
<environments default="productEnv">
<environment id="development">
<!-- 事務管理方式 -->
<transactionManager type="JDBC" />
<!-- 數據庫連接四要素 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
<environment id="productEnv">
<!-- 事務管理方式 -->
<transactionManager type="JDBC" />
<!-- 數據庫連接四要素 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="poolMaximumActiveConnections" value="10" />
<property name="poolMaximumIdleConnections" value="3" />
</dataSource>
</environment>
</environments>
每個數據庫對應一個 SqlSessionFactory 實例。
事物管理器(transactionManager):
sqlsession.commit();
數據源(dataSource)
dataSource 元素使用標準的 JDBC 數據源接口來配置 JDBC 連接對象的資源。
有三種數據源類型(type=”[UNPOOLED|POOLED|JNDI]”):
UNPOOLED– 這個數據源的實現只是每次被請求時打開和關閉連接。雖然一點慢,它對在及時可用連接方面沒有性能要求的簡單應用程序是一個很好的選擇。
沒有連接池。
POOLED– 這種數據源的實現利用“池”的概念將 JDBC 連接對象組織起來,避免了創建新的連接實例時所必需的初始化和認證時間。 這是一種使得併發 Web 應用快速響應請求的流行處理方式。
有連接池。
引射器(mappers):
有三種方式
<!-- SQL的映射文件 -->
<mappers>
<!-- 第一種方式,用resource -->
<!-- <mapper resource="com/tz/mybatis/mapper/UserMapper.xml" /> -->
<!-- 第二種方式,用class -->
<!-- <mapper class="com.tz.mybatis.mapper.UserMapper" /> -->
<!-- 第三種方式, 用package -->
<package name="com.tz.mybatis.mapper"/>
</mappers>
Mapper.XML文件
MyBatis 的真正強大在於它的映射語句,也是它的魔力所在。由於它的異常強大,映射器的 XML 文件就顯得相對簡單。
用Select Insert Updata Delete
parameterType: 輸入參數
//在接口中
public User getUserById(int id);
//在XML文件中
<!-- 單個查詢 -->
<select id="getUserById" parameterType="int"
resultType="com.tz.mybatis.entity.User">
select id,name, password, age,create_time from user where
id=#{id}
</select>
resultType/resultMap對象
//在接口中
public List<User> getUserList();
//在XML文件中
<!-- 查詢列表 -->
<select id="getUserList" resultType="user">
select id,name,password,
age,create_time from user
</select>