小峰mybatismybatis使用注解配置sql映射器--动态sql

Posted 有点懒惰的大青年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小峰mybatismybatis使用注解配置sql映射器--动态sql相关的知识,希望对你有一定的参考价值。

一、使用注解配置映射器 动态sql:                              

用的并不是很多,了解下;

Student.java 实体bean:

package com.cy.model;

public class Student{
    private Integer id;
    private String name;
    private Integer age;
    
    public Student(){
        
    }
    
    public Student(String name, Integer age){
        this.name = name;
        this.age = age;
    }
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    

    
    
}
View Code

com.cy.mapper下:

StudentDynaSqlProvider.java:

StudentMapper.java:

package com.cy.mapper;

import java.util.Map;

import org.apache.ibatis.jdbc.SQL;

import com.cy.model.Student;

public class StudentDynaSqlProvider {
    
    public String inertStudent(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();
    }
}

StudentMapper.java:

public interface StudentMapper {
    
    //插入
    @InsertProvider(type=StudentDynaSqlProvider.class,method="inertStudent")
    public int inertStudent(Student student);
    
    //更新
    @UpdateProvider(type=StudentDynaSqlProvider.class,method="updateStudent")
    public int updateStudent(Student stu);
    
    //删除
    @DeleteProvider(type=StudentDynaSqlProvider.class,method="deleteStudent")
    public int deleteStudent(int id);
    
    //根据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);
    
}

测试代码:

StudentTest.java:

 1 public class StudentTest {
 2     private static Logger logger = Logger.getLogger(StudentTest.class);
 3     
 4     private SqlSession sqlSession=null;
 5     private StudentMapper studentMapper=null;
 6     
 7     @Before
 8     public void setUp() throws Exception {
 9         sqlSession=SqlSessionFactoryUtil.openSession();
10         studentMapper=sqlSession.getMapper(StudentMapper.class);
11     }
12     
13     @After
14     public void tearDown() throws Exception {
15         sqlSession.close();
16     }
17     
18     @Test
19     public void testInsertStudent() {
20         logger.info("测试insertStudent");
21         Student stu = new Student("琪琪", 12);
22         int count = studentMapper.inertStudent(stu);
23         sqlSession.commit();
24     }
25     
26     @Test
27     public void testUpdateStudent() {
28         logger.info("测试updateStudent");
29         Student stu = new Student("琪琪琪琪", 13);
30         stu.setId(16);
31         int count = studentMapper.updateStudent(stu);
32         sqlSession.commit();
33     }
34     
35     @Test
36     public void testDeleteStudent() {
37         logger.info("测试删除学生");
38         int count = studentMapper.deleteStudent(16);
39         sqlSession.commit();
40     }
41     
42     @Test
43     public void testGetStudentById() {
44         logger.info("根据id查找学生");
45         Student student = studentMapper.getStudentById(1);
46         System.out.println(student);
47     }
48     
49     @Test
50     public void testFindStudents() {
51         logger.info("根据条件查找学生");
52         Map<String,Object> map = new HashMap<String,Object>();
53 //        map.put("name", "%a%");
54         map.put("age", 14);
55         List<Student> students = studentMapper.findStudents(map);
56         for(Student student: students){
57             System.out.println(student);
58         }
59     }
60 }
View Code

 

以上是关于小峰mybatismybatis使用注解配置sql映射器--动态sql的主要内容,如果未能解决你的问题,请参考以下文章

小峰mybatismybatis传入多个参数等..

小峰mybatismybatis分页和缓存

MyBatisMyBatis之配置讲解

MybatisMyBatis 注解方式的基本 用法

MybatisMyBatis快速入门

MybatisMybatis入门——Mybatis简介