ishowcode.eth

ishowcode.eth

区块链小白

超詳細講解mybatis入門

mybatis 入門#

學習目標#

  • 【應用】Mybatis 的快速入門
  • 【應用】MyBatis 的增刪改查操作
  • 【掌握】MyBatis 核心配置文件概述

1、Mybatis 簡介#

1.1 原始 jdbc 操作(查詢數據)#

在這裡插入圖片描述

1.2 原始 jdbc 操作(插入數據)#

在這裡插入圖片描述

1.3 原始 jdbc 操作的分析#

原始 jdbc 開發存在的問題如下:

①數據庫連接創建、釋放頻繁造成系統資源浪費從而影響系統性能
②sql 語句在代碼中硬編碼,造成代碼不易維護,實際應用 sql 變化的可能較大,sql 變動需要改變 java 代碼。
③查詢操作時,需要手動將結果集中的數據手動封裝到實體中。插入操作時,需要手動將實體的數據設置到 sql 語句的佔位符位置

應對上述問題給出的解決方案:

①使用數據庫連接池初始化連接資源
②將 sql 語句抽取到 xml 配置文件中
③使用反射、內省等底層技術,自動將實體與表進行屬性與字段的自動映射

1.4 什麼是 Mybatis#

mybatis 是一個優秀的基於 java 的持久層框架,它內部封裝了 jdbc,使開發者只需要關注 sql 語句本身,而不需要花費精力去處理加載驅動、創建連接、創建 statement 等繁雜的過程。

mybatis 通過 xml 或註解的方式將要執行的各種 statement 配置起來,並通過 java 對象和 statement 中 sql 的動態參數進行映射生成最終執行的 sql 語句。

最後 mybatis 框架執行 sql 並將結果映射為 java 對象並返回。採用 ORM 思想解決了實體和數據庫映射的問題,對 jdbc 進行了封裝,屏蔽了 jdbc api 底層訪問細節,使我們不用與 jdbc api 打交道,就可以完成對數據庫的持久化操作。

1.5 Mybatis 架構#

在這裡插入圖片描述

2、Mybatis 的快速入門#

2.1 MyBatis 開發步驟#

MyBatis 官網地址:http://www.mybatis.org/mybatis-3/

在這裡插入圖片描述

MyBatis 開發步驟:

①添加 MyBatis 的坐標

②創建 user 數據表

③編寫 User 實體類

④編寫映射文件 UserMapper.xml

⑤編寫核心文件 SqlMapConfig.xml

⑥編寫測試類

2.2 環境搭建#

1. 導入 MyBatis 的坐標和其他相關坐標

<!‐‐mybatis坐標‐‐>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!‐‐ mysql驅動 ‐‐>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‐connector‐java</artifactId>
<version>5.1.39</version>
</dependency>
<!‐‐單元測試坐標‐‐>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!‐‐日誌坐標‐‐>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>

2. 創建 user 數據表

drop table if EXISTS user;
##用戶
CREATE TABLE `user` (
`uid` INT AUTO_INCREMENT ,
`username` VARCHAR(20) DEFAULT NULL,
`password` VARCHAR(20) DEFAULT NULL,
PRIMARY KEY (`uid`)
);
INSERT INTO `user` VALUES (NULL,'wc001','888888'),
(NULL,'xq001','888888'),
(NULL,'xb001','888888');

3. 編寫 User 實體

public class User {
private int id;
private String username;
private String password;
//省略get個set方法
}

4. 編寫 UserMapper 映射文件

<
?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">
<mapper namespace="userMapper">
<select id="findAll" resultType="com.summer.domain.User">
select * from User
</select>
</mapper>

5. 編寫 MyBatis 核心文件

<!DOCTYPE configuration PUBLIC "‐//mybatis.org//DTD Config 3.0//EN“
"http://mybatis.org/dtd/mybatis‐3‐config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql:///test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!‐‐加載映射文件‐‐>
<mappers>
<mapper resource="UserMapper.xml" />
</mappers>
</configuration>

2.3 編寫測試代碼#

@Test
public void test1() throws IOException {
//加載 mybatis主 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲取session工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//創建session
SqlSession session = sqlSessionFactory.openSession();
//執行操作
List<User> users = session.selectList("userMapper.findAll");
//釋放資源
session.close();
System.out.println(users);
}

為了查看 sql 語句的執行信息 配置在 resources 下添加 日誌文件 log4j.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.com.summer.test=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] ‐ %m%n

2.4 知識小結#

MyBatis 開發步驟:

①添加 MyBatis 的坐標

②創建 user 數據表

③編寫 User 實體類

④編寫映射文件 UserMapper.xml

⑤編寫核心文件 SqlMapConfig.xml

⑥編寫測試類

3、MyBatis 的映射文件概述#

在這裡插入圖片描述

4.MyBatis 的增刪改查操作#

4.1 MyBatis 的插入數據操作#

1. 編寫 UserMapper 映射文件

<insert id="save" parameterType="com.summer.domain.User" >
insert into user values (null,#{username},#{password});
</insert>

2. 編寫插入實體 User 的代碼

//添加
@Test
public void test2() throws IOException {
User user = new User();
user.setUsername("如花");
user.setPassword("888");
//加載 mybatis主 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲取session工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//創建session
SqlSession session = sqlSessionFactory.openSession();
//執行操作
int i = session.insert("userMapper.save",user);
//釋放資源
    session.commit();
session.close();
System.out.println(i);
}

3. 插入操作注意問題

・插入語句使用 insert 標籤
・在映射文件中使用 parameterType 屬性指定要插入的數據類型
・Sql 語句中使用 #{實體屬性名} 方式引用實體中的屬性值
・插入操作使用的 API 是 sqlSession.insert (“命名空間.id”, 實體對象);
・插入操作涉及數據庫數據變化,所以要使用 sqlSession 對象顯示的提交事務,即 sqlSession.commit ()

4.2 MyBatis 的修改數據操作#

1. 編寫 UserMapper 映射文件

<update id="update" parameterType="com.summer.domain.User" >
update user set username = #{username} , password = #{password} where uid =#{uid}
</update>

2. 編寫修改實體 User 的代碼

//修改
@Test
public void test3() throws IOException {
User user = new User();
user.setUid(1);
user.setUsername("如花2222");
user.setPassword("888");
//加載 mybatis主 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲取session工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//創建session
SqlSession session = sqlSessionFactory.openSession();
//執行操作
int i = session.update("userMapper.update",user);
//提交事務
session.commit();
//釋放資源
session.close();
System.out.println(i);
}

3. 修改操作注意問題

・修改語句使用 update 標籤

・修改操作使用的 API 是 sqlSession.update (“命名空間.id”, 實體對象);

4.3 MyBatis 的刪除數據操作#

1. 編寫 UserMapper 映射文件

<delete id="delete" parameterType="java.lang.Integer" >
delete from user where uid = #{uid}
</delete>

2. 編寫刪除數據的代碼

//刪除
@Test
public void test4() throws IOException {
//加載 mybatis主 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//獲取session工廠
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//創建session
SqlSession session = sqlSessionFactory.openSession();
//執行操作
int i = session.delete("userMapper.delete",1);
//提交事務
session.commit();
//釋放資源
session.close();
System.out.println(i);
}

3. 刪除操作注意問題
・刪除語句使用 delete 標籤

・Sql 語句中使用 #{任意字符串} 方式引用傳遞的單個參數

・刪除操作使用的 API 是 sqlSession.delete (“命名空間.id”,Object);

5. MyBatis 核心配置文件概述#

5.1 MyBatis 核心配置文件層級關係#

在這裡插入圖片描述

5.2 MyBatis 常用配置解析#

1.environments 標籤

數據庫環境的配置,支持多環境配置

在這裡插入圖片描述

2.mapper 標籤

該標籤的作用是加載映射的,加載方式有如下幾種:

・使用相對於類路徑的資源引用,例如:

<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

・使用完全限定資源定位符(URL),例如:

<mapper url="file:///var/mappers/AuthorMapper.xml"/>

・使用 mapper 接口的全限定類名 註解 mapper 接口,例如:

<mapper class="org.mybatis.builder.AuthorMapper"/>

・註冊指定包下的所有 mapper 接口,例如:

<package name="org.mybatis.builder"/>

3.Properties 標籤

在這裡插入圖片描述

4.typeAliases 標籤

類型別名是為 java 類型設置的一個短的名字。原來的配置如下

<select id="findAll" resultType="com.summer.pojo.User">
    select * from user
</select>

配置 typeAliases, 為 com.summer.pojo.User 定義別名為 User

<typeAliases>
<typeAlias type="com.summer.pojo.User" alias="user"></typeAlias>
</typeAliases>

後面的 mapper.xml 就可以使用別名

<select id="findAll" resultType="User">
    select * from user
</select>

上面我們是自定義的別名,mybatis 框架已經為我們設置好的一些常用的類型的別名

在這裡插入圖片描述

5.3 知識小結#

核心配置文件常用配置:

properties 標籤:該標籤可以加載外部的 properties 文件

<properties resource="jdbc.properties"></properties>

typeAliases 標籤:設置類型別名

<typeAlias type="com.summer.domain.User" alias="user"></typeAlias>

mappers 標籤:加載映射配置

<mapper resource="com/summer/mapper/UserMapping.xml"></mapper>
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。