您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。