weed3-3.1.Xml sql的使用方法

发布时间:2021-06-24 14:35:19 作者:chen
来源:亿速云 阅读:197
# 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 命名规范建议

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版本编写,实际使用时请参考对应版本的官方文档。不同版本可能存在细微差异。

推荐阅读:
  1. 基于RMAN实现坏块介质恢复(blockrecover)
  2. 【Mysql】是什么导致MySQL数据库服务器磁盘IO高?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

weed3 sql

上一篇:Java代码规范有哪些

下一篇:C#中Datetimepicker出现问题怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》