MyBatis與其使用方法示例詳解
ORM
在講解Mybatis之前,我們需了解一個(gè)概念ORM(Object-Relational Mapping)對(duì)象關(guān)系映射,其是數(shù)據(jù)庫(kù)與Java對(duì)象進(jìn)行映射的一個(gè)技術(shù).通過(guò)使用ORM,我們可以不用編寫(xiě)負(fù)責(zé)的Sql語(yǔ)句,而是通過(guò)操作對(duì)象來(lái)實(shí)現(xiàn)增刪改查操作
缺優(yōu)分析
- 優(yōu)點(diǎn)
- 提高開(kāi)發(fā)效率,減少代碼的重復(fù)性和維護(hù)成本
- 增加代碼的可讀性,降低復(fù)雜度
- 對(duì)數(shù)據(jù)庫(kù)查詢的細(xì)節(jié)進(jìn)行抽象,隱藏了sql語(yǔ)句
- 缺點(diǎn)
- 在進(jìn)行多表聯(lián)查時(shí),或存在where條件時(shí),ORM語(yǔ)句會(huì)變得復(fù)雜
MyBatis
- mybatis是一個(gè)支持自定義SQL的持久層框架,通過(guò)XML文件來(lái)實(shí)現(xiàn)SQL配置和數(shù)據(jù)映射,MyBatis允許開(kāi)發(fā)者手動(dòng)編寫(xiě)SQL語(yǔ)句,提高靈活性
Mybatis通過(guò)
mapper
文件,將sql查詢和Java對(duì)象綁定到一起,簡(jiǎn)化了JDBC代碼的編寫(xiě),手動(dòng)設(shè)置參數(shù),獲取結(jié)果集的工作
MyBatis的工作流程
- 其分為以下幾步
MyBatis的基本使用
環(huán)境準(zhǔn)備
- 引入依賴包:
<!--springboot的mybatis > <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>3.0.3</version> </dependency> <!-- MySQL 連接器 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency>
- 創(chuàng)建mybatis配置文件(
mybatis-config.xml
)
<?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> <!-- mybatis環(huán)境 --> <environments default="mysql"> <environment id="mysql"> <!-- 配置事務(wù)的類型 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置數(shù)據(jù)源(連接池) --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/數(shù)據(jù)庫(kù)名稱?userSSL=false&serverTimezone=Asia/Shanghai"/> <property name="username" value="帳號(hào)"/> <property name="password" value="密碼"/> </dataSource> </environment> </environments> <!-- mybatis映射配置位置 --> <!-- 按模塊映射不同的配置文件,讓配置文件看起來(lái)更簡(jiǎn)潔 --> <mappers> <mapper resource="映射配置文件全路徑"></mapper> </mappers> </configuration>
- springboot中的
application.yml
mybatis: # mapper配置文件 mapper-locations: classpath:mapper/*.xml # resultType別名,沒(méi)有這個(gè)配置resultType包名要寫(xiě)全,配置后只要寫(xiě)類名 type-aliases-package: com.mashang.xiaomistore.domain configuration: #下劃線自動(dòng)轉(zhuǎn)駝峰 map-underscore-to-camel-case: true
- 創(chuàng)建Mapper映射文件
<?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.company.mapper.StudentMapper"> <select id="queryAll" resultType="com.company.entity.Student"> SELECT * FROM student </select> </mapper>
- 創(chuàng)建Mapper接口:
public interface StudentMapper { List<Student> queryAll(); }
MyBatis日志配置
- 引入SpringBoot中的log4j
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>3.4.3</version> </dependency>
- 在SpringBoot中在
application.yml
中mybatis
配置項(xiàng)中進(jìn)行配置
mybatis: configuration: log-impl: org.apache.ibatis.logging.log4j.Log4jImpl
- 配置
log4j.properties
文件
### 設(shè)置### log4j.rootLogger = debug,stdout,D,E ### 輸出信息到控制抬 ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n ### 輸出DEBUG 級(jí)別以上的日志到=D://logs/error.log ### log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = D://logs/log.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ### 輸出ERROR 級(jí)別以上的日志到=D://logs/error.log ### log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.File =D://logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
一個(gè)基本的mybatis的XML模板如下
<?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.example.mapper.UserMapper"> <!-- CRUD 配置 --> </mapper>
CURD實(shí)現(xiàn)
select查詢
使用<select>
標(biāo)簽實(shí)現(xiàn)基本查詢
<select id ="getUserById" resultType="com.company.domain.entity.User"> SELECT * FORM user </select>
id
:對(duì)應(yīng)Mapper接口中的方法名,必須一致resultType
:指定返回結(jié)果映射到哪個(gè)Java類傳參
#{}
與${}
的區(qū)別#{}
的特點(diǎn)- 事先進(jìn)行預(yù)編譯:使用
#{}
的參數(shù)會(huì)被Mybatis當(dāng)作JDBC中的?
占位符 - 防止sql注入:由于會(huì)事先進(jìn)行預(yù)編譯,Mybatis能夠防止Sql注入
- 類型轉(zhuǎn)換:會(huì)根據(jù)參數(shù)類型進(jìn)行適當(dāng)?shù)念愋娃D(zhuǎn)換
- 事先進(jìn)行預(yù)編譯:使用
${}
的特點(diǎn)- 字符串拼接:
&{}
直接將字符串進(jìn)行替換,相當(dāng)于在Sql中直接拼接傳入的參數(shù) - 存在sql注入的風(fēng)險(xiǎn):沒(méi)有預(yù)編譯,會(huì)引發(fā)sql注入問(wèn)題
- 字符串拼接:
多條件查詢
<select id="getUserByNameAndAge" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age} </select>
模糊查詢
<select> SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%') </select>
- 使用LIKE關(guān)鍵字和CONCAT()函數(shù)進(jìn)行查詢
insert插入
使用<insert>
標(biāo)簽實(shí)現(xiàn)基本插入操作
<insert id="insertUser" parameterType="User"> INSERT INTO user(name, age) VALUES (#{name}, #{age}) </insert>
parameterType
:表示入?yún)㈩愋?/li>
實(shí)現(xiàn)回填自增主鍵
<insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user (name, age) VALUES (#{name}, #{age}) </insert>
- 使用
userGeneratedKeys
和keyProperty
實(shí)現(xiàn) userGeneratedKeys
:表示是否啟動(dòng)自增keyProperty
:表示將生成的主鍵賦值給哪個(gè)java對(duì)象的哪個(gè)屬性如user.id
update更新
使用<update>
標(biāo)簽實(shí)現(xiàn)基本更新
<update id="updateUser" parameterType="User"> UPDATE user SET name=#{name}, age =#{age} WHERE id = #{id} </update>
delete刪除
使用<delete>
標(biāo)簽基本查詢
<delete id="deleteUserById" parameterType="Integer"> DELETE FROM user WHERE id = #{id} </delete>
傳參方式
多參數(shù)傳參(使用@Param)
<select id="getUserByNameAndAge" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age} </select>
User getUserByNameAndAge( @Param("name") String name, @Param("age") Integer age);
- 當(dāng)方法有多個(gè)參數(shù)時(shí),使用
@Param
注解明確參數(shù)名 - Mapper接口
對(duì)象參數(shù)
<insert id="insertUser" parameterType="User"> INSERT INTO user (name, age) VALUES (#{name}, #{age}) </insert>
void insertUser(User user);
- 當(dāng)參數(shù)為一個(gè)Java對(duì)象時(shí),MyBatis自動(dòng)將對(duì)象屬性映射到Sql語(yǔ)句中的占位符
#{name}
對(duì)應(yīng)user.name,#{age}
對(duì)應(yīng)user.age- Mapper接口
Map參數(shù)
<select id="getUserByMap" resultType="User"> SELECT * FROM user WHERE name = #{name} AND age = #{age} </select>
User getUserByMap(Map<String, Object> params);
- 通過(guò)Map傳遞多個(gè)參數(shù)或動(dòng)態(tài)參數(shù)
- Mapper接口
集合/數(shù)組參數(shù)
<select id="getUsersByIds" resultType="User"> SELECT * FROM user WHERE id IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </select>
List<User> getUsersByIds(@Param("ids") List<Integer> ids);
- 適用于批量查詢,比如WHERE id IN (…)
<foreach>
是動(dòng)態(tài)sql中的知識(shí)點(diǎn)等下會(huì)系統(tǒng)講解- Mapper接口
動(dòng)態(tài)sql
與標(biāo)簽
<where>
:生成WHERE子句,并自動(dòng)判斷去掉開(kāi)頭多余的AND/OR
關(guān)鍵字,使sql更簡(jiǎn)潔<if>
:用于判斷傳參條件,根據(jù)條件決定是否拼接某段SQL語(yǔ)句,適用于傳參條件不固定,只有在滿足條件時(shí)接入某個(gè)子串
<select id="getUserByCondition" resultType="User"> SELECT * FROM user <where> <if test="name != null and name != ''"> AND name LIKE CONCAT('%', #{name}, '%') </if> <if test="age != null"> AND age = #{age} </if> </where> </select>
- 當(dāng)
name
為非空,會(huì)添加AND name LIKE CONCAT('%', #{name}, '%')
當(dāng)age
為非空時(shí)會(huì)添加AND age = #{age}
- 結(jié)合標(biāo)簽使用,能自動(dòng)處理首個(gè)AND,使得SQL語(yǔ)句正確
- 其作用在于動(dòng)態(tài)拼接SQL片段前添加或去除特點(diǎn)字符,比如前綴,后綴,以及多余的分隔符如
,
- 常用于INSERT和UPDATE語(yǔ)句,避免出現(xiàn)多余逗號(hào)
INSERT語(yǔ)句
<insert id="insertUserSelective" parameterType="User"> INSERT INTO user <trim prefix="(" suffix=")" suffixOverrides=","> <if test="name != null">name,</if> <if test="age != null">age,</if> <if test="email != null">email,</if> </trim> VALUES <trim prefix="(" suffix=")" suffixOverrides=","> <if test="name != null">#{name},</if> <if test="age != null">#{age},</if> <if test="email != null">#{email},</if> </trim> </insert>
- 標(biāo)簽包裹字段列表和對(duì)應(yīng)值部分
suffixOverrides=”,”
表示自動(dòng)去除多余的逗號(hào),確保sql語(yǔ)法正確
UPDATE語(yǔ)句
<set>
標(biāo)簽是<trim>
的特性化
<update id="updateUserDynamic" parameterType="User"> UPDATE user <set> <if test="name != null">name = #{name},</if> <if test="age != null">age = #{age},</if> <if test="email != null">email = #{email},</if> </set> WHERE id = #{id} </update>
<set>
標(biāo)簽內(nèi)部原理類似<trim>
,會(huì)自動(dòng)去除多余逗號(hào)<foreach>
用于遍歷集合,數(shù)組和Map,常用于批量操作或動(dòng)態(tài)生成IN子句- 其主要屬性
- collection:集合或數(shù)組名稱(可用
@Param()
指定對(duì)應(yīng)名稱,默認(rèn)為list
或array
) - item:循環(huán)時(shí)每個(gè)元素的別名
- open:循環(huán)生成sql片段的前綴
- separator:循環(huán)時(shí)的分隔符
- close:循環(huán)生成sql片段的后綴
- collection:集合或數(shù)組名稱(可用
<select id="getUsersByIds" resultType="User"> SELECT * FROM user <where> <if test="ids != null"> AND id IN <foreach collection="ids" item="id" open="(" separator="," close=")"> #{id} </foreach> </if> </where> </select>
- 當(dāng)ids不為null時(shí),進(jìn)入
<if test="ids != null">
生成的sql片段為SELECT * FROM AND WHERE id IN(#{id},#{id},…)
- 其中標(biāo)簽遍歷集合ids,用逗號(hào)進(jìn)行分隔,并在開(kāi)頭添加
(
括號(hào),結(jié)尾添加)
括號(hào) - 最終標(biāo)簽會(huì)去除第一個(gè)AND,使sql合法
SELECT * FROM id WHERE IN(#{id},#{id},…)
MyBatis的映射
基本映射
用于單一的字段對(duì)應(yīng)
假設(shè)有一個(gè)user表,其中有字段id,name,age
其在Java中有個(gè)簡(jiǎn)單的對(duì)應(yīng)類User,其屬性分別也是id,name,age
那么在Mapper.xml進(jìn)行select查詢時(shí)
SELECT id, name, age FROM user WHERE id = #{id}
MyBatis會(huì)將查詢的結(jié)果中每一列值自動(dòng)賦值給User對(duì)象中相同的屬性
- 數(shù)據(jù)庫(kù)列表的id→User對(duì)象的id
- 數(shù)據(jù)庫(kù)列表的name→User對(duì)象的name
- 數(shù)據(jù)庫(kù)列表的age→User對(duì)象的age
這樣可能就會(huì)出現(xiàn)一種情況,數(shù)據(jù)庫(kù)列表的列名與對(duì)象的屬性名不一致,通常使用開(kāi)啟駝峰轉(zhuǎn)換來(lái)解決→在application.yml
的mybatis配置中添加如下配置:
mybatis: map-underscore-to-camel-case: true
一對(duì)一映射
當(dāng)查詢中需要查詢一個(gè)對(duì)象時(shí)
- 現(xiàn)假設(shè),數(shù)據(jù)庫(kù)有兩張表一個(gè)user(用戶)表,另一個(gè)user_detail(用戶詳細(xì)信息)表,在Java中我們可以創(chuàng)建兩個(gè)類User和UserDetail類
- 然后再創(chuàng)建一個(gè)UserVo類,其中包含User的屬性和一個(gè)UserDatail對(duì)象
public class User { private Integer id; private String name; private Integer age; } public class UserDetail { private Integer detailId; private String address; private String phone; } public class UserVo { private Integer id; private String name; private Integer age; private UserDetail userDetail; // 一對(duì)一關(guān)系:一個(gè)用戶對(duì)應(yīng)一份詳細(xì)信息 }
XML配置如下:
<resultMap id="userVoMap" type="com.example.UserVo"> <id property="id" column="id"/> <result property="name" column="name"/> <result property="age" column="age"/> <!-- 一對(duì)一映射 --> <association property="userDetail" javaType="com.example.UserDetail"> <id property="detailId" column="detail_id"/> <result property="address" column="address"/> <result property="phone" column="phone"/> </association> </resultMap> <select id="getUserVoById" resultMap="userVoMap" parameterType="int"> SELECT u.id, u.name, u.age, ud.detail_id, ud.address, ud.phone FROM user u LEFT JOIN user_detail ud ON u.id = ud.user_id WHERE u.id = #{id} </select>
<resultMap>
標(biāo)簽- 用于定義一組映射規(guī)則,將查詢的結(jié)果轉(zhuǎn)換為一個(gè)指定類型的Java對(duì)象
- 屬性
- id:為該映射指定一個(gè)唯一標(biāo)識(shí),供其在XML中引用使用,如
<resultMap id="userResultMap" type="com.example.User">
- type:指定映射結(jié)果對(duì)應(yīng)的Java類型(對(duì)象的全路徑)
- id:為該映射指定一個(gè)唯一標(biāo)識(shí),供其在XML中引用使用,如
<result>
標(biāo)簽- 用于將數(shù)據(jù)庫(kù)列映射到Java對(duì)象的屬性,在
<resultMap>
中使用 - 屬性
- property:Java對(duì)象中的屬性名稱,如
<result property="userName" column="user_name"/>
其表示將查詢到的user_name列的值賦值給userName屬性 - cloumn:數(shù)據(jù)庫(kù)查詢結(jié)果中的列名,如
column="user_name”
表示sql查詢列名為user_name的值
- property:Java對(duì)象中的屬性名稱,如
- 用于將數(shù)據(jù)庫(kù)列映射到Java對(duì)象的屬性,在
<id>
標(biāo)簽<id>
類似于<result>
主要用于映射主鍵字段- 屬性
- property:與
<result>
相同,映射到Java對(duì)象的主鍵屬性 - column:對(duì)應(yīng)數(shù)據(jù)庫(kù)中的主鍵列名
- property:與
<association>
標(biāo)簽- 表示一個(gè)一對(duì)一關(guān)連
- 當(dāng)查詢到結(jié)果時(shí),MyBatis會(huì)將用戶的基本字段
{id,name,age}
直接映射到UserVo中,同時(shí)將詳細(xì)信息{detail_id,address,phone}
封裝為一個(gè)UserDetail對(duì)象,并賦值到UserVo的userDetail
對(duì)象中
一對(duì)多映射
提供用于有列表對(duì)象的查詢
現(xiàn)假設(shè)一個(gè)老師(Teacher)類和一個(gè)學(xué)生(student)類,一個(gè)老師可以對(duì)應(yīng)多個(gè)學(xué)生,在Java中我們可以設(shè)計(jì)Teacher類, 使用List屬性來(lái)存放老師的所有學(xué)生
public class Teacher { private Integer id; private String teacherName; private Integer age; private List<Student> students; // 一對(duì)多關(guān)系:一個(gè)老師對(duì)應(yīng)多個(gè)學(xué)生 } public class Student { private Integer id; private String name; private Integer age; }
XML配置如下:
<resultMap id="teacherMap" type="com.example.Teacher"> <id property="id" column="teacher_id"/> <result property="teacherName" column="teacher_name"/> <result property="age" column="teacher_age"/> <!-- 一對(duì)多映射 --> <collection property="students" ofType="com.example.Student"> <id property="id" column="student_id"/> <result property="name" column="student_name"/> <result property="age" column="student_age"/> </collection> </resultMap> <select id="getTeacherWithStudents" resultMap="teacherMap" parameterType="int"> SELECT t.id as teacher_id, t.teacher_name, t.age as teacher_age, s.id as student_id, s.name as student_name, s.age as student_age FROM teacher t LEFT JOIN student s ON t.id = s.teacher_id WHERE t.id = #{id} </select>
<collection>
標(biāo)簽:用于表示一對(duì)多關(guān)系,把查詢結(jié)果中的學(xué)生記錄封裝成一個(gè)列表,并賦值到Teacher對(duì)象中的student
屬性
到此這篇關(guān)于MyBatis與其使用方法講解的文章就介紹到這了,更多相關(guān)MyBatis使用方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MyBatis中?@Mapper?和?@MapperScan?的區(qū)別與使用解析
- Mybatis官方生成器的使用方式
- SpringBoot中使用MyBatis-Plus詳細(xì)步驟
- SpringBoot中使用MyBatis詳細(xì)指南
- Mybatis中注解@MapKey的使用方式
- SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼
- Springboot使用MybatisPlus實(shí)現(xiàn)mysql樂(lè)觀鎖
- MyBatis代碼自動(dòng)生成器Mybatis-Generator的使用詳解
- Mybatis-Plus中的MetaObjectHandler組件的使用
相關(guān)文章
java模板引擎Thymeleaf和前端vue的區(qū)別及說(shuō)明
這篇文章主要介紹了java模板引擎Thymeleaf和前端vue的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11java實(shí)現(xiàn)簡(jiǎn)單的客戶信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的客戶信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06基于Jpa中ManyToMany和OneToMany的雙向控制
這篇文章主要介紹了Jpa中ManyToMany和OneToMany的雙向控制,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12百度翻譯API使用詳細(xì)教程(前端vue+后端springboot)
這篇文章主要給大家介紹了關(guān)于百度翻譯API使用的相關(guān)資料,百度翻譯API是百度面向開(kāi)發(fā)者推出的免費(fèi)翻譯服務(wù)開(kāi)放接口,任何第三方應(yīng)用或網(wǎng)站都可以通過(guò)使用百度翻譯API為用戶提供實(shí)時(shí)優(yōu)質(zhì)的多語(yǔ)言翻譯服務(wù),需要的朋友可以參考下2024-02-02詳解Java刪除Map中元素java.util.ConcurrentModificationException”異常解決
這篇文章主要介紹了詳解Java刪除Map中元素java.util.ConcurrentModificationException”異常解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01IDEA啟動(dòng)tomcat狀態(tài)404的解決
在使用Idea進(jìn)行Java?Web開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到Tomcat出現(xiàn)404錯(cuò)誤的問(wèn)題,本文就來(lái)介紹了IDEA啟動(dòng)tomcat狀態(tài)404的解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn)
這篇文章主要介紹了Java 添加、修改、讀取、復(fù)制、刪除Excel批注的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02Java如何接收并解析HL7協(xié)議數(shù)據(jù)
文章主要介紹了HL7協(xié)議及其在醫(yī)療行業(yè)中的應(yīng)用,詳細(xì)描述了如何配置環(huán)境、接收和解析數(shù)據(jù),以及與前端進(jìn)行交互的實(shí)現(xiàn)方法,文章還分享了使用7Edit工具進(jìn)行調(diào)試的經(jīng)驗(yàn),并記錄了一個(gè)常見(jiàn)的解析問(wèn)題及其解決方法2024-12-12java操作(DOM、SAX、JDOM、DOM4J)xml方式的四種比較與詳解
java中四種操作(DOM、SAX、JDOM、DOM4J)xml方式的比較與詳解2008-10-10Java對(duì)List進(jìn)行排序的方法總結(jié)
在Java中,對(duì)List進(jìn)行排序是一項(xiàng)常見(jiàn)的任務(wù),Java提供了多種方法來(lái)對(duì)List中的元素進(jìn)行排序,本文將詳細(xì)介紹如何使用Java來(lái)實(shí)現(xiàn)List的排序操作,涵蓋了常用的排序方法和技巧,需要的朋友可以參考下2024-07-07