`

MyBatis3注解的动态SQL

阅读更多
1. MyBatis3注解的动态SQL

@InsertProvider
@UpdateProvider
@DeleteProvider
@SelectProvider

新建MyBatisPro04项目


package com.andrew.mappers;
import java.util.Map;
import org.apache.ibatis.jdbc.SQL;
import com.andrew.model.Student;
public class StudentDynaSqlProvider {
    public String insertStudent(final Student student) {
        return new SQL() {
            {
                INSERT_INTO("t_student");
                if (student.getName() != null) {
                    VALUES("name", "#{name}");
                }
                if (student.getAge() != null) {
                    VALUES("age", "#{age}");
                }
            }
        }.toString();
    }
    public String updateStudent(final Student student) {
        return new SQL() {
            {
                UPDATE("t_student");
                if (student.getName() != null) {
                    SET("name=#{name}");
                }
                if (student.getAge() != null) {
                    SET("age=#{age}");
                }
                WHERE("id=#{id}");
            }
        }.toString();
    }
    public String deleteStudent(){
        return new SQL() {
            {
                DELETE_FROM("t_student");
                WHERE("id=#{id}");
            }
        }.toString();
    }
    public String getStudentById() {
        return new SQL() {
            {
                SELECT("*");
                FROM("t_student");
                WHERE("id=#{id}");
            }
        }.toString();
    }
    public String findStudents(final Map<String,Object> map) {
        return new SQL() {
            {
                SELECT("*");
                FROM("t_student");
                StringBuffer sb = new StringBuffer();
                if (map.get("name") != null) {
                    sb.append(" and name like '"+map.get("name")+"'");
                }
                if (map.get("age") != null) {
                    sb.append(" and age="+map.get("age"));
                }
                if (!sb.toString().equals("")) {
                    WHERE(sb.toString().replaceFirst("and", ""));            
                }
            }
        }.toString();
    }
}


package com.andrew.mappers;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.DeleteProvider;
import org.apache.ibatis.annotations.InsertProvider;
import org.apache.ibatis.annotations.SelectProvider;
import org.apache.ibatis.annotations.UpdateProvider;
import com.andrew.model.Student;
public interface StudentMapper {
    @InsertProvider(type=StudentDynaSqlProvider.class,method="insertStudent")
    public int insertStudent(Student student);
    @UpdateProvider(type=StudentDynaSqlProvider.class,method="updateStudent")
    public int updateStudent(Student student);
    @DeleteProvider(type=StudentDynaSqlProvider.class,method="deleteStudent")
    public int deleteStudent(int id);
    @SelectProvider(type=StudentDynaSqlProvider.class,method="getStudentById")
    public Student getStudentById(Integer id);
    @SelectProvider(type=StudentDynaSqlProvider.class,method="findStudents")
    public List<Student> findStudents(Map<String,Object> map);
}


package com.andrew.service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.andrew.mappers.StudentMapper;
import com.andrew.model.Student;
import com.andrew.util.SqlSessionFactoryUtil;
public class StudentTest {
    private SqlSession sqlSession = null;
    private StudentMapper studentMapper = null;
    @Before
    public void setUp() throws Exception {
        sqlSession = SqlSessionFactoryUtil.openSession();
        studentMapper = sqlSession.getMapper(StudentMapper.class);
    }
    @After
    public void tearDown() throws Exception {
        sqlSession.close();
    }
    @Test
    public void testInsert() {
        Student student = new Student("琪琪",11);
        studentMapper.insertStudent(student);
        sqlSession.commit();
    }
    @Test
    public void testUpdate() {
        Student student = new Student(17, "琪琪2", 12);
        studentMapper.updateStudent(student);
        sqlSession.commit();
    }
    @Test
    public void testDelete() {
        studentMapper.deleteStudent(17);
        sqlSession.commit();
    }
    @Test
    public void testGetById() {
        Student student = studentMapper.getStudentById(14);
        System.out.println(student);
    }
    @Test
    public void testFindStudents() {
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("name", "%赵%");
        map.put("age", 22);
        List<Student> studentList = studentMapper.findStudents(map);
        for (Student student : studentList) {
            System.out.println(student);
        }
    }
}
分享到:
评论

相关推荐

    MyBatis注解配置映射器:动态SQL的实现

    总结来说,MyBatis注解配置提供了一种简洁的SQL映射方式,而动态SQL功能则极大地增强了查询的灵活性。在开发过程中,熟练掌握这两点,可以提升开发效率,同时使代码更加易于理解和维护。通过实践项目"MyBatisPro12...

    Mybatis基于注解实现多表查询功能

    Mybatis基于注解实现多表查询功能 Mybatis基于注解实现多表查询功能是指使用Mybatis框架中的注解来实现多表查询的功能。这种方法可以简化配置,提高开发效率。下面我们将详细介绍如何使用Mybatis基于注解实现多表...

    mybatis之动态SQL

    动态 SQL 在 MyBatis 中主要通过 XML 映射文件或者注解来实现。在 XML 映射文件中,我们可以使用 `&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;foreach&gt;` 等标签来构建动态 SQL。这些标签可以让我们...

    mybatis 动态sql及参数传递

    在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...

    Mybatis+注解轻松实现脱敏

    【Mybatis+注解轻松实现脱敏】是一个针对Java开发工程师的实用技术,旨在帮助他们在处理敏感数据时,如身份证号、手机号等信息,进行数据脱敏和加密。这一技术结合了MyBatis插件和注解的方式,使得数据脱敏过程变得...

    demo.zip_Mybatis注解时的sql语句拼接方法_SSM 注解_SSM分页查询_mybatis注解分页_基于ssm

    `demo.zip`中的内容可能是解决这个问题的一种方案,它提供了一种在MyBatis注解中进行SQL语句拼接的方法。 首先,让我们深入理解MyBatis注解的基础知识。MyBatis的注解主要分为以下几种: 1. `@Select`:用于标记一...

    MyBatis动态拼接SQL

    MyBatis是一款强大的Java持久层框架,它允许开发者将SQL语句直接写在XML映射文件或注解中,提供了灵活的数据库交互方式。在某些场景下,我们可能需要根据业务逻辑动态地拼接SQL语句,以实现更复杂的查询需求。这就是...

    mybatis如何实现注解sql的简单例子

    本文将深入探讨如何在MyBatis中使用注解来编写SQL语句,通过一个简单的例子来阐述其核心概念和步骤。 首先,我们需要理解MyBatis中的注解是如何工作的。MyBatis允许我们在接口的方法上使用注解来直接定义SQL语句,...

    springboot+mybatis通用注解

    这些方法与数据库表的字段相对应,当实体类的Service调用这些方法时,MyBatis会根据注解动态生成并执行SQL语句。 文件名"baseproject"可能代表了项目的基线或基础结构,其中可能包含了整合SpringBoot和MyBatis所需...

    MyBatis基于注解简单案例

    通过这个简单的MyBatis注解案例,我们可以了解到如何利用MyBatis进行基本的数据库操作,包括选择性地使用注解替代XML配置,以及如何在Spring框架下集成MyBatis。在实际项目中,还可以结合MyBatis的其他特性,如结果...

    Spring Boot整合mybatis使用注解实现动态Sql、参数传递等常用操作(实现方法)

    Mybatis的注解支持动态SQL,可以使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`等标签。例如,动态判断是否更新密码: ```java @Update({ "update sys_user", "!= null'&gt;", "set password=#{password}", ...

    Spring mvc 和 mybatis 整合,mybatis使用注解模式

    总结来说,Spring MVC与MyBatis的整合使得我们能够充分利用两者的优势:Spring MVC提供了强大的MVC架构和依赖注入,而MyBatis的注解模式则简化了SQL映射。通过这种方式,开发者可以更专注于业务逻辑,提高开发效率和...

    MyBatis 采用注解方式实现CRUD

    - 注解方式并不适用于所有场景,比如复杂的动态SQL,这时仍然需要借助XML文件。 通过以上介绍,我们可以看出MyBatis的注解方式大大提高了开发效率,使CRUD操作变得更加直观和简洁。在实际开发中,开发者可以根据...

    MyBatis拦截器分页与动态修改SQL及其参数值

    3. **动态SQL修改**:MyBatis的动态SQL功能允许我们根据参数动态地构建SQL语句。例如,我们可以根据传入的参数来决定是否在WHERE子句中添加LIKE条件。这在处理模糊查询时非常有用。在PagingByExampl.java中,可能就...

    spring+springMvc+MyBatis+注解

    MyBatis通过XML配置或注解方式,将SQL与Java代码绑定,提供动态SQL支持,使得数据库操作更加灵活高效。此外,MyBatis与Spring的集成使得事务管理更加方便。 **注解(Annotation)** 注解是Java语言的一种元数据,...

    mybatis中注解映射SQL示例代码

    MyBatis中注解映射SQL示例代码 MyBatis是一款流行的持久层框架,它提供了多种方式来映射SQL语句,其中之一便是使用注解的方式。下面我们将通过示例代码来介绍MyBatis中注解映射SQL的相关知识点。 结果集分页 在...

    MyBatis关于注解的配置

    `ExamSystemByNote`可能是一个示例项目,其中展示了如何在考试系统中使用MyBatis注解进行数据操作。通过阅读该项目的代码,你可以了解到注解在实际项目中的具体使用。 总的来说,MyBatis的注解配置为开发者提供了...

    mybatis使用注解方式简单实现的Demo

    MyBatis 是一款著名的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在本示例中,我们将探讨如何使用 ...同时,MyBatis 还提供了其他高级特性,如结果映射、动态 SQL 等,可以帮助我们更高效地进行数据库操作。

    mybatis-demo12-动态SQL语句2-基于注解配置.zip

    本项目“mybatis-demo12-动态SQL语句2-基于注解配置”是针对MyBatis动态SQL功能的一个示例,主要探讨如何通过注解方式来实现动态SQL。 1. **动态SQL**: 动态SQL是MyBatis的核心特性之一,它允许我们在运行时根据...

    mybatis直接执行sql语句后续之一

    1. **动态SQL**:MyBatis的一个强大特性是其支持动态SQL,允许在XML映射文件或注解中构建SQL语句。比如,我们可以使用`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`&lt;otherwise&gt;`、`&lt;where&gt;`等标签来根据条件动态地插入、删除或...

Global site tag (gtag.js) - Google Analytics