小峰mybatis(5)mybatis使用注解配置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 + "]";
    }

}

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 }

时间: 2024-10-22 09:17:11

小峰mybatis(5)mybatis使用注解配置sql映射器--动态sql的相关文章

Java Persistence with MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

在上一章,我们看到了我们是怎样在映射器Mapper XML配置文件中配置映射语句的.MyBatis也支持使用注解来配置映射语句.当我们使用基于注解的映射器接口时,我们不再需要在XML配置文件中配置了.如果你愿意,你也可以同时使用基于XML和基于注解的映射语句. 本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l 动态SQL @SelectProvi

Java Persistence with MyBatis 3(中文版) 第三章 使用XML配置SQL映射器

关系型数据库和SQL是经受时间考验和验证的数据存储机制.和其他的ORM 框架如Hibernate不同,MyBatis鼓励开发者可以直接使用数据库,而不是将其对开发者隐藏,因为这样可以充分发挥数据库服务器所提供的SQL语句的巨大威力.与此同时,MyBaits消除了书写大量冗余代码的痛苦,它使使用SQL更容易. 在代码里直接嵌套SQL语句是很差的编码实践,并且维护起来困难.MyBaits使用了映射器配置文件或注解来配置SQL语句.在本章中,我们会看到具体怎样使用映射器配置文件来配置映射SQL语句.

SQL映射器Mapper接口(MyBatis)

SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现.直接把以前的dao接口定义成符合规则的Mapper. 注意事项: 1.接口必须以Mapper结尾,名字是DomainMapper 2.mapper.xml文件要和Mapper接口建立关系,通过namespace:要能连接到Mapper接口   3.mapper.xml中写查询语句的标签的传入参数类型(parameterType).返回结果类型(resultType)必须和mapper接口中对应方法的传入参数

非注解的处理器映射器和适配器

在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器. 在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器. 在spring3.1之前使用org.springframework.web.servlet.mv

小峰mybatis(4)mybatis使用注解配置sql映射器

主流开发还是使用xml来配置:使用注解配置比较快,但是不支持所有功能:有些功能还是得用配置文件: 一.基本映射语句: @Inert @Update @Delete @Select 二.结果集映射语句 项目结够: Student.java model实体类: package com.cy.model; public class Student{ private Integer id; private String name; private Integer age; public Student(

Mybatis学习(4)输入映射、输出映射、动态sql

一.输入映射: 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型 1) 传递pojo的包装对象 需求是:完成用户信息的综合查询,传入的查询条件复杂:(包括用户信息.其他信息等); 定义包装类型: 用户扩展类: package com.cy.po; /** *用户的扩展类 * @author chengyu * */ public class UserCustom extends User{ } 视图层面的用户包装类型: 1 package

(转)Mybatis高级映射、动态SQL及获得自增主键

原文:http://www.cnblogs.com/edwinchen/p/4105278.html?utm_source=tuicool&utm_medium=referral 一.动态SQL 相信大家在用mybatis操作数据库时时都会碰到一个问题,假如现在我们有一个关于作者的list authorList,需要根据authorList里已有的作者信息在数据库中查询相应作者的博客信息.那么最容易想到的做法就是遍历authorList,获取相应的信息查询数据库. for(int i=0;I &l

Mybatis高级映射、动态SQL及获得自增主键

一.动态SQL 相信大家在用mybatis操作数据库时时都会碰到一个问题,假如现在我们有一个关于作者的list authorList,需要根据authorList里已有的作者信息在数据库中查询相应作者的博客信息.那么最容易想到的做法就是遍历authorList,获取相应的信息查询数据库. for(int i=0;I < authorList.size();i++) { …… //查询数据库代码 //select * from blog where author=#{author,jdbcType

MyBatis入门(二)—— 输入映射和输出映射、动态sql、关联查询

p.p4 { margin: 0.0px 0.0px 0.0px 10.0px; font: 10.5px "PingFang SC" } p.p6 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New"; color: #4f76cb } p.p7 { margin: 0.0px 0.0px 0.0px 21.0px; font: 10.0px "Courier New" }