柚子快報邀請碼778899分享:Mybatis的使用
柚子快報邀請碼778899分享:Mybatis的使用
文章目錄
前言使用步驟1.創(chuàng)建項目2.導入依賴3.添加配置4.編寫實體類5.編寫mapper接口用注釋編寫sql語句用xml編寫sql語句
5.編寫測試類
前言
介紹一下mybatis的使用
使用步驟
1.創(chuàng)建項目
第一步:new一個新的工程 創(chuàng)建好的項目結構是這樣的
2.導入依賴
剛導入的pom.xml應該是這樣的 然后導入依賴包,需要什么依賴就去(https://mvnrepository.com/ )maven官網(wǎng)找想要的依賴。 測試mybatis用到的依賴如下
3.添加配置
首先做一下mysql數(shù)據(jù)庫的相關配置 在resources下創(chuàng)建一個xml文件 里面的配置如下:
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
這里面幾個注意的點:
< setting name=“mapUnderscoreToCamelCase” value=“true”/>這個配置是開啟駝峰命名的,開啟這個配置后,如果數(shù)據(jù)庫表中的字段名和實體類中的屬性名符合駝峰映射的話,就不需要手動映射了。 MyBatis允許你在配置文件或代碼中啟用駝峰命名規(guī)則轉換,這樣它會自動將Java駝峰式命名的屬性名轉換成下劃線風格的數(shù)據(jù)庫字段名。例如,firstName會轉換成first_name。< property name=“url” value=“jdbc:mysql://localhost:3306/mybatis”/>這行配置用于指定連接數(shù)據(jù)庫的URL。這里的各個部分含義如下: jdbc:mysql://:這是JDBC驅動程序的協(xié)議頭,表明使用MySQL的JDBC驅動程序。 localhost:表示數(shù)據(jù)庫服務器的地址,這里的localhost意味著數(shù)據(jù)庫運行在同一臺機器上。 3306:這是MySQL默認的端口號,用于監(jiān)聽客戶端的連接請求。 mybatis:這是數(shù)據(jù)庫的名字,你將連接到這個特定的數(shù)據(jù)庫實例。 這里的配置指定了數(shù)據(jù)庫的URL、驅動程序、用戶名和密碼,這些都是建立數(shù)據(jù)庫連接所必需的信息。在實際應用中,你可能需要根據(jù)自己的數(shù)據(jù)庫環(huán)境調整這些值,比如更換localhost為實際的服務器IP,修改端口號,以及使用正確的數(shù)據(jù)庫名稱、用戶名和密碼。這一行是用來掃描指定包下的Mapper接口,以便MyBatis可以自動識別并加載這些接口對應的XML映射文件。
4.編寫實體類
如上面圖片所示: 在java包下創(chuàng)建一個公司域名的包,在這個包下創(chuàng)建一個domain的包,這個包就是裝實體類的包(一般公司都是domain包,這個包名不固定)
package com.itheima.domain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDate;
import java.time.LocalDateTime;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
private Integer id;
private String username;
private String password;
private String name;
private String gender;
private String image;
private String job;
//注意:這四個屬性跟數(shù)據(jù)表中的字段不一致
private LocalDate ed;
private Integer deptId;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
這里的字段要和數(shù)據(jù)庫表的字段一一對應,起名字不必和表字段一致,但要知道實體類中的屬性是什么意思。 還要注意使用的是lombok這個包(有些公司不讓用),只用lombok只需要加三個注釋就可以實現(xiàn)有參和無參構造函數(shù),get,set方法和equals的重寫 前提是pom.xml中有l(wèi)ombok包
5.編寫mapper接口
用注釋編寫sql語句
使用注釋增刪改查的注釋就是圖片上的注釋 注意:如果實體類名字和數(shù)據(jù)庫表中的名字不一樣,也不是按照駝峰命名,那么需要使用@result這個注釋表明。
用xml編寫sql語句
這里mapper層不需要寫注釋了, xml中的代碼如上。 namespace是mapper接口的全類名。注意語句標簽中的id要和接口中的方法名字一樣,reseltMap是解決名稱不一致的,type中寫的是實體類中的全類名。 用xml寫sql的好處是可以使用動態(tài)sql 演示代碼如下:
update emp
username = #{username},
password = #{password},
name = #{name},
gender = #{gender},
image = #{image},
job = #{job},
entrydate = #{ed},
dept_id = #{deptId},
create_time = #{createTime},
update_time = #{updateTime},
where id = #{id}
這是if的動態(tài)sql,主要是進行判斷的,符合條件的才進行sql查詢 set:set元素會檢查每個if語句中的條件。如果某個字段的值不為NULL,那么這個字段就會被包含在SET子句中。注意每個if語句的結尾都包含了逗號,這是因為set元素會自動移除最后一個字段后的逗號,以保證SQL語句的語法正確。
where元素的特點: 如果where元素內(nèi)的任何條件都不滿足,則整個where元素將被忽略,不會生成任何SQL。 如果where元素內(nèi)的第一個條件滿足,那么where元素會自動在生成的SQL中添加WHERE關鍵字。 where元素會移除它內(nèi)部條件語句前的AND或OR關鍵字,以防止SQL語法錯誤。 代碼如下:
SELECT * FROM users
AND username = #{username}
AND email = #{email}
AND is_active = #{isActive}
foreach
SELECT * FROM users
WHERE id IN
#{item}
在這個例子中,collection屬性設置為list,意味著傳入的參數(shù)應該是一個List。item屬性定義了一個變量item,用于表示List中的每個元素。open和close屬性用于生成括號包圍IN子句,而separator屬性則指定了元素之間的逗號分隔符。 注意: 這個寫sql的xml要放在resources,而且路徑名字和上面的mapper接口名字一樣 起包名要注意/的使用
5.編寫測試類
編寫測試類要在test/java下建包。 最好寫一個util工具類 如果調用sql用這個工具類就好。 代碼如下:
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class MybatisUtil {
private static SqlSessionFactory sqlSessionFactory = null;
//保證SqlSessionFactory僅僅創(chuàng)建一次
static {
try {
//讀取配置文件
InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");
//創(chuàng)建SqlSessionFactory
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
} catch (Exception e) {
e.printStackTrace();
}
}
//獲取sqlSession
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
//提交事務 關閉sqlSession
public static void close(SqlSession sqlSession) {
if (sqlSession != null) {
//提交事務
sqlSession.commit();
//釋放資源
sqlSession.close();
}
}
}
接下來寫測試類就可以了 代碼如下:
import com.itheima.domain.Emp;
import com.itheima.mapper.EmpMapper;
import com.itheima.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.time.LocalDate;
public class EmpTest {
@Test
public void testFindById() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = empMapper.findById(1);
System.out.println(emp);
MybatisUtil.close(sqlSession);
}
@Test
public void insertOne() {
SqlSession sqlSession = MybatisUtil.getSqlSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEd(LocalDate.of(2001,5,2));
empMapper.insertOne(emp.getEd());
MybatisUtil.close(sqlSession);
}
}
注意:要加上@Test這個注解,就可以測試了。。。
柚子快報邀請碼778899分享:Mybatis的使用
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。