溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

weed3-3.1.Xml sql的使用方法

發布時間:2021-06-24 14:35:19 來源:億速云 閱讀:206 作者:chen 欄目:大數據
# Weed3-3.1.Xml SQL的使用方法

## 概述

Weed3是一個輕量級的Java ORM框架,其Xml SQL功能通過將SQL語句與Java代碼分離,顯著提升了項目的可維護性。本文將詳細介紹Weed3-3.1版本中Xml SQL的配置和使用方法。

## 一、基礎配置

### 1.1 添加依賴

首先需要在項目中引入Weed3的核心依賴:

```xml
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>weed3</artifactId>
  <version>3.1</version>
</dependency>

1.2 配置文件結構

推薦的項目結構如下:

src/main/resources/
  └── sql/
       ├── user/
       │    └── user.xml
       └── order/
            └── order.xml

1.3 數據源配置

application.yml中配置數據源:

weed3:
  datasource:
    default:
      url: jdbc:mysql://localhost:3306/test
      username: root
      password: 123456

二、XML文件編寫規范

2.1 基礎模板

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//weed3.org//DTD Mapper 3.0//EN"
        "http://weed3.org/dtd/weed3-mapper.dtd">
<mapper namespace="user">
    <!-- SQL定義區域 -->
</mapper>

2.2 SQL語句類型

支持四種基本語句類型:

<select id="getById">...</select>
<insert id="create">...</insert>
<update id="update">...</update>
<delete id="delete">...</delete>

三、動態SQL語法

3.1 條件判斷

<select id="findUsers">
  SELECT * FROM user 
  WHERE 1=1
  <if test="name != null">
    AND name = #{name}
  </if>
  <if test="age gt 18">
    AND age > #{age}
  </if>
</select>

3.2 循環處理

<insert id="batchInsert">
  INSERT INTO user(name,age) VALUES
  <foreach item="item" collection="list" separator=",">
    (#{item.name}, #{item.age})
  </foreach>
</insert>

3.3 選擇分支

<select id="queryByType">
  SELECT * FROM user
  <choose>
    <when test="type == 1">
      WHERE status = 1
    </when>
    <when test="type == 2">
      WHERE status = 0
    </when>
    <otherwise>
      WHERE deleted = 0
    </otherwise>
  </choose>
</select>

四、參數處理

4.1 基本參數

<select id="getById">
  SELECT * FROM user WHERE id = #{id}
</select>

4.2 對象參數

<insert id="insertUser">
  INSERT INTO user(name,age) 
  VALUES(#{user.name}, #{user.age})
</insert>

4.3 特殊字符處理

<select id="search">
  SELECT * FROM article
  WHERE title LIKE '%${keyword}%'
</select>

注意:${}有SQL注入風險,盡量使用#{}

五、結果映射

5.1 自動映射

<select id="getAll" resultType="com.example.User">
  SELECT * FROM user
</select>

5.2 自定義映射

<resultMap id="userMap" type="User">
  <result property="username" column="name"/>
  <result property="userAge" column="age"/>
</resultMap>

<select id="getComplexUser" resultMap="userMap">
  SELECT * FROM user WHERE id = #{id}
</select>

六、高級特性

6.1 分頁查詢

<select id="findByPage" pageable="true">
  SELECT * FROM user
  WHERE status = 1
</select>

Java調用代碼:

Page page = new Page(1, 10);
List<User> users = db.table("user")
                   .xmlsql("findByPage")
                   .getList(new User(), page);

6.2 批量操作

<update id="batchUpdate">
  UPDATE user SET status = #{status}
  WHERE id IN 
  <foreach item="id" collection="ids" open="(" separator="," close=")">
    #{id}
  </foreach>
</update>

6.3 多數據源支持

通過@Db注解指定數據源:

@Db("slave")
public List<User> findFromSlave(){
  return db.table("user")
          .xmlsql("findAll")
          .getList(new User());
}

七、最佳實踐

7.1 命名規范建議

  • XML文件:模塊名_功能名.xml
  • SQL ID:動詞_名詞,如get_by_id
  • 參數名:與實體屬性保持一致

7.2 性能優化

  1. 復雜查詢使用存儲過程
  2. 頻繁調用的SQL添加緩存
  3. 大數據量查詢使用分頁

7.3 常見問題解決

問題1:參數為null時報錯

解決方案:

<if test="param != null">
  AND field = #{param}
</if>

問題2:Like查詢特殊處理

解決方案:

AND name LIKE CONCAT('%', #{name}, '%')

八、完整示例

8.1 User.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//weed3.org//DTD Mapper 3.0//EN"
        "http://weed3.org/dtd/weed3-mapper.dtd">
<mapper namespace="user">
    <select id="getById" resultType="com.example.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    
    <insert id="create" keyProperty="id" useGeneratedKeys="true">
        INSERT INTO user(name, age) 
        VALUES(#{name}, #{age})
    </insert>
    
    <update id="update">
        UPDATE user SET 
        name = #{name},
        age = #{age}
        WHERE id = #{id}
    </update>
</mapper>

8.2 Java調用示例

// 獲取用戶
User user = db.table("user")
             .xmlsql("user.getById")
             .get(new User(), 1);

// 創建用戶
User newUser = new User();
newUser.setName("張三");
newUser.setAge(25);
db.table("user").xmlsql("user.create").execute(newUser);

// 更新用戶
user.setAge(26);
db.table("user").xmlsql("user.update").execute(user);

總結

Weed3的Xml SQL功能通過以下優勢提升開發效率: 1. SQL與Java代碼解耦 2. 強大的動態SQL支持 3. 簡潔的API調用方式 4. 靈活的結果集處理

建議結合具體業務場景,合理使用各種動態SQL語法,既保證代碼的可讀性,又能滿足復雜業務需求。 “`

注:本文檔基于Weed3 3.1版本編寫,實際使用時請參考對應版本的官方文檔。不同版本可能存在細微差異。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女