Mybatis參數(shù)處理的幾種方法小結(jié)
環(huán)境配置
項(xiàng)目結(jié)構(gòu)

導(dǎo)入依賴
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectLombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>jdbc.properties文件
方便給mybatis配置文件設(shè)置值
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/hqyj03?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimeZone=Asia/Shanghai password=yjg username=root
mybatis配置文件
常見的配置項(xiàng)
在 MyBatis 的配置文件(通常是 mybatis-config.xml)中,可以配置多個標(biāo)簽來定義 MyBatis 的行為和功能。以下是常見的一些 <configuration> 標(biāo)簽及其含義:
<properties>:用于定義配置文件中使用的屬性。<settings>:用于設(shè)置 MyBatis 的全局配置項(xiàng),如開啟緩存、啟用自動生成主鍵等。<typeAliases>:用于設(shè)置類型別名,簡化在映射文件中的類型引用。<typeHandlers>:用于配置類型處理器,用于在 Java 對象和數(shù)據(jù)庫列之間進(jìn)行類型轉(zhuǎn)換。<objectFactory>:用于指定創(chuàng)建結(jié)果對象的工廠方法。<plugins>:用于配置插件,可以在 MyBatis 的執(zhí)行過程中添加額外的功能或擴(kuò)展。<environments>:用于配置不同的數(shù)據(jù)庫環(huán)境,包括數(shù)據(jù)源、事務(wù)管理器等。<databaseIdProvider>:用于根據(jù)數(shù)據(jù)庫廠商的不同選擇不同的語句。<mappers>:用于注冊映射器接口或者映射文件,讓 MyBatis 能夠找到它們并加載。
添加配置項(xiàng)一
<setting name="mapUnderscoreToCamelCase" value="true"/>
是 MyBatis 的配置項(xiàng),用于設(shè)置是否將數(shù)據(jù)庫中的下劃線命名轉(zhuǎn)換為駝峰命名。
默認(rèn)情況下,MyBatis 會將數(shù)據(jù)庫中的下劃線命名方式(例如user_name)映射到 Java 對象的駝峰命名方式(例如userName)。
如果將value值 設(shè)置為 false(默認(rèn)值),則不會進(jìn)行自動的下劃線到駝峰的轉(zhuǎn)換,需要在映射文件或代碼中手動指定對應(yīng)的字段名稱,數(shù)據(jù)庫表字段和 Java 類中的屬性名稱需要保持一致。
添加配置項(xiàng)二
<setting name="logImpl" value="STDOUT_LOGGING"/>
是 MyBatis 的配置項(xiàng),用于設(shè)置 MyBatis 的日志輸出實(shí)現(xiàn)。
在 MyBatis 中,可以通過配置不同的日志輸出實(shí)現(xiàn)來記錄 MyBatis 的運(yùn)行日志,包括 SQL 語句、參數(shù)值、執(zhí)行時間等信息。
將日志輸出到標(biāo)準(zhǔn)輸出(控制臺)上,方便開發(fā)者在控制臺中查看日志信息。這是 MyBatis 內(nèi)置的一個基于 Java 標(biāo)準(zhǔn)庫的日志輸出實(shí)現(xiàn)。
除了 “STDOUT_LOGGING”,MyBatis 還提供了其他的日志輸出實(shí)現(xiàn)選項(xiàng),例如:
- SLF4J_LOGGING: 將日志輸出到 SLF4J(Simple Logging Facade for Java)框架,可以配合各種日志框架(如 Logback、Log4j、Log4j2)使用。
- LOG4J2_LOGGING: 將日志輸出到 Log4j2 日志框架。
- COMMONS_LOGGING: 將日志輸出到 Apache Commons Logging 日志框架。
- LOG4J_LOGGING: 將日志輸出到 Log4j 1.x 日志框架。
- JDK_LOGGING: 將日志輸出到 Java 標(biāo)準(zhǔn)庫的 java.util.logging 包。
添加配置項(xiàng)三
<!--設(shè)置映射類型別名-->
<typeAliases>
<!--設(shè)置pojo包下的類型別名-->
<package name="com.yjg.mybatis.pojo"/>
</typeAliases>使用 <typeAliases> 元素來設(shè)置映射類型別名。
類型別名的作用是為 Java 類型(通常是實(shí)體類)指定一個簡短的別名,以便在 XML 映射文件中使用這些別名來引用相應(yīng)的類型。
<package name="com.yjg.mybatis.pojo"/> 表示將 com.yjg.mybatis.pojo 包下的所有類都注冊為類型別名。
假設(shè)在 com.yjg.mybatis.pojo 包中有一個叫做 User 的類,它的完整類名是 com.yjg.mybatis.pojo.User。通過上述配置,我們可以在 XML 映射文件中使用 <User> 來引用該類,而無需使用完整的類名 com.yjg.mybatis.pojo.User。
配置文件完整內(nèi)容
<?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配置內(nèi)容時,有順序限制-->
<configuration>
<!--讀取jdbc.properties配置文件-->
<properties resource="jdbc.properties"></properties>
<settings>
<!--配置sql日志打印-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
<!--下劃線駝峰映射stu_name映射stuName-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--設(shè)置映射類型別名-->
<typeAliases>
<!--設(shè)置pojo包下的類型別名-->
<package name="com.yjg.mybatis.pojo"/>
</typeAliases>
<!--mybatis環(huán)境,default屬性指定一個環(huán)境-->
<environments default="development">
<!--id屬性自定義的環(huán)境唯一標(biāo)識符-->
<environment id="development">
<!--指定使用jdbc事務(wù)管理-->
<transactionManager type="JDBC"/>
<!--使用mybatis內(nèi)部帶連接池功能的數(shù)據(jù)源-->
<dataSource type="POOLED">
<!--獲取配置驅(qū)動-->
<property name="driver" value="${driver}"/>
<!--獲取配置url-->
<property name="url" value="${url}"/>
<!--獲取配置賬號-->
<property name="username" value="${username}"/>
<!--獲取配置密碼-->
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--映射器,映射器的 XML 映射文件包含了 SQL 代碼和映射定義信息-->
<mappers>
<mapper resource="com/yjg/mybatis/mapper/StudentMapper.xml"/>
</mappers>
</configuration>編寫代碼
數(shù)據(jù)庫代碼
CREATE TABLE `student` ( `stu_id` int(11) NOT NULL AUTO_INCREMENT, `stu_name` varchar(255) DEFAULT NULL, `stu_age` varchar(255) DEFAULT NULL, `stu_salary` decimal(10,2) DEFAULT NULL, `stu_birth` date DEFAULT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`stu_id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
數(shù)據(jù)顯示

實(shí)體類
import lombok.Data;
import java.util.Date;
@Data
//@Alias 注解是 MyBatis 提供的一個注解,用于為類或接口指定一個別名。
//@Alias("s")
public class Student {
private Integer stuId;
private String stuName;
private Integer stuAge;
private Double stuSalary;
private Date stuBirth;
private Date createTime;
}接口文件
public interface StudentMapper {
//插入用戶
int insertStudent();
//查詢?nèi)款愋?
List<Student> queryStudent();
//通過id查詢學(xué)生,傳遞單個參數(shù)
Student queryStudentById(Integer id);
/*
通過名字和age進(jìn)行查詢
1.方法中的參數(shù)會將存儲到map集合中,key值設(shè)置為arg0 , arg1.....或者設(shè)置為param1, param2. ...
2.sql語句中是通過#{map的key值}來獲取到參數(shù)值,例如#{arg0}
3.可以通過@Param注解更改參數(shù)在map中的key
@Param("name")可以修改名稱
*/
Student queryStudentByNameAndAge(@Param("name") String name,@Param("age") int age);
}映射文件
<?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="com.yjg.mybatis.mapper.StudentMapper">
<insert id="insertStudent">
insert into student values(null, 'zhangsan',18,' 200','2020-01-01 ' , now())
</insert>
<select id="queryStudent" parameterType="integer" resultType="Student">
select * from student;
</select>
<!--拿到方法的形參,單個參數(shù),#{id}-->
<select id="queryStudentById" resultType="Student">
select * from student where stu_id=#{id}
</select>
<!--拿到參數(shù)的值,多個參數(shù)的時候-->
<select id="queryStudentByNameAndAge" resultType="student">
select * from student where stu_name=#{name} and stu_age=#{age};
</select>
</mapper>注:
在 MyBatis 中,類型別名是對大小寫不敏感的。無論是使用大寫、小寫或混合大小寫,都可以正確地引用對應(yīng)的實(shí)體類。如果使用使用 <typeAliases> 元素來設(shè)置映射類型別名。將包名 com.yjg.mybatis.pojo 下的 Student 類設(shè)置為類型別名,那么在映射文件中使用 student 或 Student 都是可以的,并且都會正確地映射到對應(yīng)的實(shí)體類。
映射文件參數(shù)
使用
#{paramName}占位符:在 SQL 語句中使用#{paramName}占位符來表示參數(shù)。當(dāng)調(diào)用映射器接口方法時,MyBatis 將自動解析 SQL 語句,并根據(jù)方法參數(shù)的名稱和注解來匹配占位符和參數(shù),此時MyBatis 使用預(yù)編譯的方式執(zhí)行 SQL 語句,將實(shí)際的參數(shù)值填充到占位符處,并執(zhí)行查詢或更新操作。使用
${paramName}占位符:在 SQL 語句中使用${paramName}占位符來表示參數(shù)。這種方式不會進(jìn)行預(yù)編譯,而是直接將參數(shù)的值替換到 SQL 語句中。存在 SQL 注入的風(fēng)險,應(yīng)謹(jǐn)慎使用。使用
@Param注解:在方法參數(shù)上使用@Param("paramName")注解來指定參數(shù)的名稱。在映射文件中可以通過參數(shù)名稱來引用相應(yīng)的參數(shù)在
<select>、<update>、<insert>、<delete>等操作標(biāo)簽中,可以通過parameterType屬性來明確指定傳入?yún)?shù)的類型。該屬性用于告訴 MyBatis 針對具體操作需要接收哪種類型的參數(shù)。
測試方法
public class Test1 {
SqlSession sqlSession;
@Before
public void test1() throws Exception{
InputStream inputStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory build = builder.build(inputStream);
sqlSession = build.openSession(true);
}
// 添加數(shù)據(jù)
@Test
public void test2(){
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
int i = mapper.insertStudent();
System.out.println(i);
}
// 查詢所有學(xué)生
@Test
public void test3(){
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = mapper.queryStudent();
students.forEach(System.out::println);
}
// 根據(jù)id查詢
@Test
public void test4(){
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = mapper.queryStudentById(2);
System.out.println(student);
}
// 根據(jù)多個參數(shù)查詢
@Test
public void test5(){
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = mapper.queryStudentByNameAndAge("kun", 18);
System.out.println(student);
}
}到此這篇關(guān)于Mybatis參數(shù)處理的幾種方法小結(jié)的文章就介紹到這了,更多相關(guān)Mybatis參數(shù)處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud gateway+zookeeper實(shí)現(xiàn)網(wǎng)關(guān)路由的詳細(xì)搭建
這篇文章主要介紹了SpringCloud gateway+zookeeper實(shí)現(xiàn)網(wǎng)關(guān)路由,本文通過圖文實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08
Java實(shí)現(xiàn)導(dǎo)出Word文檔的示例代碼
poi-tl是一個基于Apache POI的Word模板引擎,也是一個免費(fèi)開源的Java類庫,你可以非常方便的加入到你的項(xiàng)目中。本文就利用它實(shí)現(xiàn)導(dǎo)出Word文檔功能,需要的可以參考一下2023-02-02
Mybatis-Plus讀寫Mysql的Json字段的操作代碼
這篇文章主要介紹了Mybatis-Plus讀寫Mysql的Json字段的操作代碼,文中通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
java+jdbc+mysql+socket搭建局域網(wǎng)聊天室
這篇文章主要為大家詳細(xì)介紹了java+jdbc+mysql+socket搭建局域網(wǎng)聊天室,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
深入理解happens-before和as-if-serial語義
本文大部分整理自《Java并發(fā)編程的藝術(shù)》,溫故而知新,加深對基礎(chǔ)的理解程度。下面可以和小編來一起學(xué)習(xí)下2019-05-05
Java中實(shí)現(xiàn)代碼優(yōu)化的技巧分享
這篇文章主要跟大家談?wù)剝?yōu)化這個話題,那么我們一起聊聊Java中如何實(shí)現(xiàn)代碼優(yōu)化這個問題,小編這里有幾個實(shí)用的小技巧分享給大家,需要的可以參考一下2022-08-08

