# 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>
推薦的項目結構如下:
src/main/resources/
└── sql/
├── user/
│ └── user.xml
└── order/
└── order.xml
在application.yml中配置數據源:
weed3:
datasource:
default:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
<?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>
支持四種基本語句類型:
<select id="getById">...</select>
<insert id="create">...</insert>
<update id="update">...</update>
<delete id="delete">...</delete>
<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>
<insert id="batchInsert">
INSERT INTO user(name,age) VALUES
<foreach item="item" collection="list" separator=",">
(#{item.name}, #{item.age})
</foreach>
</insert>
<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>
<select id="getById">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser">
INSERT INTO user(name,age)
VALUES(#{user.name}, #{user.age})
</insert>
<select id="search">
SELECT * FROM article
WHERE title LIKE '%${keyword}%'
</select>
注意:
${}有SQL注入風險,盡量使用#{}
<select id="getAll" resultType="com.example.User">
SELECT * FROM user
</select>
<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>
<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);
<update id="batchUpdate">
UPDATE user SET status = #{status}
WHERE id IN
<foreach item="id" collection="ids" open="(" separator="," close=")">
#{id}
</foreach>
</update>
通過@Db注解指定數據源:
@Db("slave")
public List<User> findFromSlave(){
return db.table("user")
.xmlsql("findAll")
.getList(new User());
}
get_by_id問題1:參數為null時報錯
解決方案:
<if test="param != null">
AND field = #{param}
</if>
問題2:Like查詢特殊處理
解決方案:
AND name LIKE CONCAT('%', #{name}, '%')
<?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>
// 獲取用戶
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版本編寫,實際使用時請參考對應版本的官方文檔。不同版本可能存在細微差異。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。