Mybatis參數處理的幾種方法小結
環(huán)境配置
項目結構
導入依賴
<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配置文件設置值
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配置文件
常見的配置項
在 MyBatis 的配置文件(通常是 mybatis-config.xml
)中,可以配置多個標簽來定義 MyBatis 的行為和功能。以下是常見的一些 <configuration>
標簽及其含義:
<properties>
:用于定義配置文件中使用的屬性。<settings>
:用于設置 MyBatis 的全局配置項,如開啟緩存、啟用自動生成主鍵等。<typeAliases>
:用于設置類型別名,簡化在映射文件中的類型引用。<typeHandlers>
:用于配置類型處理器,用于在 Java 對象和數據庫列之間進行類型轉換。<objectFactory>
:用于指定創(chuàng)建結果對象的工廠方法。<plugins>
:用于配置插件,可以在 MyBatis 的執(zhí)行過程中添加額外的功能或擴展。<environments>
:用于配置不同的數據庫環(huán)境,包括數據源、事務管理器等。<databaseIdProvider>
:用于根據數據庫廠商的不同選擇不同的語句。<mappers>
:用于注冊映射器接口或者映射文件,讓 MyBatis 能夠找到它們并加載。
添加配置項一
<setting name="mapUnderscoreToCamelCase" value="true"/>
是 MyBatis 的配置項,用于設置是否將數據庫中的下劃線命名轉換為駝峰命名。
默認情況下,MyBatis 會將數據庫中的下劃線命名方式(例如user_name)映射到 Java 對象的駝峰命名方式(例如userName)。
如果將value值 設置為 false(默認值),則不會進行自動的下劃線到駝峰的轉換,需要在映射文件或代碼中手動指定對應的字段名稱,數據庫表字段和 Java 類中的屬性名稱需要保持一致。
添加配置項二
<setting name="logImpl" value="STDOUT_LOGGING"/>
是 MyBatis 的配置項,用于設置 MyBatis 的日志輸出實現。
在 MyBatis 中,可以通過配置不同的日志輸出實現來記錄 MyBatis 的運行日志,包括 SQL 語句、參數值、執(zhí)行時間等信息。
將日志輸出到標準輸出(控制臺)上,方便開發(fā)者在控制臺中查看日志信息。這是 MyBatis 內置的一個基于 Java 標準庫的日志輸出實現。
除了 “STDOUT_LOGGING”,MyBatis 還提供了其他的日志輸出實現選項,例如:
- 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 標準庫的 java.util.logging 包。
添加配置項三
<!--設置映射類型別名--> <typeAliases> <!--設置pojo包下的類型別名--> <package name="com.yjg.mybatis.pojo"/> </typeAliases>
使用 <typeAliases>
元素來設置映射類型別名。
類型別名的作用是為 Java 類型(通常是實體類)指定一個簡短的別名,以便在 XML 映射文件中使用這些別名來引用相應的類型。
<package name="com.yjg.mybatis.pojo"/>
表示將 com.yjg.mybatis.pojo
包下的所有類都注冊為類型別名。
假設在 com.yjg.mybatis.pojo
包中有一個叫做 User
的類,它的完整類名是 com.yjg.mybatis.pojo.User
。通過上述配置,我們可以在 XML 映射文件中使用 <User>
來引用該類,而無需使用完整的類名 com.yjg.mybatis.pojo.User
。
配置文件完整內容
<?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配置內容時,有順序限制--> <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> <!--設置映射類型別名--> <typeAliases> <!--設置pojo包下的類型別名--> <package name="com.yjg.mybatis.pojo"/> </typeAliases> <!--mybatis環(huán)境,default屬性指定一個環(huán)境--> <environments default="development"> <!--id屬性自定義的環(huán)境唯一標識符--> <environment id="development"> <!--指定使用jdbc事務管理--> <transactionManager type="JDBC"/> <!--使用mybatis內部帶連接池功能的數據源--> <dataSource type="POOLED"> <!--獲取配置驅動--> <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>
編寫代碼
數據庫代碼
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;
數據顯示
實體類
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(); //查詢全部類型 List<Student> queryStudent(); //通過id查詢學生,傳遞單個參數 Student queryStudentById(Integer id); /* 通過名字和age進行查詢 1.方法中的參數會將存儲到map集合中,key值設置為arg0 , arg1.....或者設置為param1, param2. ... 2.sql語句中是通過#{map的key值}來獲取到參數值,例如#{arg0} 3.可以通過@Param注解更改參數在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> <!--拿到方法的形參,單個參數,#{id}--> <select id="queryStudentById" resultType="Student"> select * from student where stu_id=#{id} </select> <!--拿到參數的值,多個參數的時候--> <select id="queryStudentByNameAndAge" resultType="student"> select * from student where stu_name=#{name} and stu_age=#{age}; </select> </mapper>
注:
在 MyBatis 中,類型別名是對大小寫不敏感的。無論是使用大寫、小寫或混合大小寫,都可以正確地引用對應的實體類。如果使用使用 <typeAliases>
元素來設置映射類型別名。將包名 com.yjg.mybatis.pojo
下的 Student
類設置為類型別名,那么在映射文件中使用 student
或 Student
都是可以的,并且都會正確地映射到對應的實體類。
映射文件參數
使用
#{paramName}
占位符:在 SQL 語句中使用#{paramName}
占位符來表示參數。當調用映射器接口方法時,MyBatis 將自動解析 SQL 語句,并根據方法參數的名稱和注解來匹配占位符和參數,此時MyBatis 使用預編譯的方式執(zhí)行 SQL 語句,將實際的參數值填充到占位符處,并執(zhí)行查詢或更新操作。使用
${paramName}
占位符:在 SQL 語句中使用${paramName}
占位符來表示參數。這種方式不會進行預編譯,而是直接將參數的值替換到 SQL 語句中。存在 SQL 注入的風險,應謹慎使用。使用
@Param
注解:在方法參數上使用@Param("paramName")
注解來指定參數的名稱。在映射文件中可以通過參數名稱來引用相應的參數在
<select>
、<update>
、<insert>
、<delete>
等操作標簽中,可以通過parameterType
屬性來明確指定傳入參數的類型。該屬性用于告訴 MyBatis 針對具體操作需要接收哪種類型的參數。
測試方法
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); } // 添加數據 @Test public void test2(){ StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); int i = mapper.insertStudent(); System.out.println(i); } // 查詢所有學生 @Test public void test3(){ StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); List<Student> students = mapper.queryStudent(); students.forEach(System.out::println); } // 根據id查詢 @Test public void test4(){ StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.queryStudentById(2); System.out.println(student); } // 根據多個參數查詢 @Test public void test5(){ StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); Student student = mapper.queryStudentByNameAndAge("kun", 18); System.out.println(student); } }
到此這篇關于Mybatis參數處理的幾種方法小結的文章就介紹到這了,更多相關Mybatis參數處理內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringCloud gateway+zookeeper實現網關路由的詳細搭建
這篇文章主要介紹了SpringCloud gateway+zookeeper實現網關路由,本文通過圖文實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-08-08Mybatis-Plus讀寫Mysql的Json字段的操作代碼
這篇文章主要介紹了Mybatis-Plus讀寫Mysql的Json字段的操作代碼,文中通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實現
這篇文章主要介紹了SpringBoot中的五種對靜態(tài)資源的映射規(guī)則的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12java+jdbc+mysql+socket搭建局域網聊天室
這篇文章主要為大家詳細介紹了java+jdbc+mysql+socket搭建局域網聊天室,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01深入理解happens-before和as-if-serial語義
本文大部分整理自《Java并發(fā)編程的藝術》,溫故而知新,加深對基礎的理解程度。下面可以和小編來一起學習下2019-05-05