美文网首页
Mybatis注解开发

Mybatis注解开发

作者: 忒无聊了叭 | 来源:发表于2019-10-22 16:06 被阅读0次

添加

使用注解方式进行添加特殊情况,获取最新主键的id
  • 查询最新数据的主键last_insert_id
@Insert(value = {"insert into student(name,age,score) values(#{name},#{age},#{score})"})
@selectKey(statement="select last_insert_id()",keyProperity="id",before=false,resultType="int".class)
void insertStudentCatchId(Student student);
  • 查询最新数据的主键用@@identify
@Insert(value = {"insert into student(name,age,score) values(#{name},#{age},#{score})"})
@selectKey(statement="select @@identify",keyProperity="id",before=false,resultType="int".class)
void insertStudentCatchId(Student student);
//statement:sql语句
//keyProperty:将查询的结果封装到属性
//resultType:将查询的结果封装成的类型
//before:不是在selectKey执行之前
使用注解不将sql语句写在注解中,放入指定类的方法,方便动态sql语句。
  • 普通查询

接口中:

@SelectProvider(type = xxx.class,method = "getSelectSql")
Student selectStudentById(int id);
//type为sql语句存放的类名,method为该存放该sql语句的方法
@SelectProvider(type = xxx.class,method = "getSelectSql")
Student selectStudentAll();

存放SQL语句的类xxx.java:

public String getSelectSql(Integer id){
    if(id == null){
        return "select id,name,age,score from where id=#{id}"
    }else{
        return "select id,name,age,score from student where id = #{id}";
    }
}
  • 模糊查询

接口中:

@SelectProvider(type = xxx.class,method = "getSelectSql2")
List<Student> selectStudentByName(String name);
//type为sql语句存放的类名,method为该存放该sql语句的方法

存放SQL语句的类xxx.java:

public String getSelectSql2(){
    return "select id,name,age,score from student where name like '%' #{name} '%'";
}
  • 复合条件查询1

接口中:

@SelectProvider(type = xxx.class,method = "getSelectSql3")
List<Student> selectStudentByCondition(Student student);
//type为sql语句存放的类名,method为该存放该sql语句的方法

存放SQL语句的类xxx.java:

public String getSelectSql3(Student student){
    StringBuffer sql = new StringBuffer();
    sql.append("select id,name,age,score from student where 1=1");
    if(student.getName()=!null && student.getName()!=""){
        sql.append(" and name like '%' #{name} '%'");
    }
    if (student.getAge()>0){
        sql.append(" and age < #{age}");
    }
    return sql.toString();
}
//注意第一个sql语句中要加上where 1=1,下面添加的sql语句才会符合语句。
//两个添加的sql语句要先空格
//最会返回的类型改为字符串类型
  • 复合条件查询2

接口中:

@SelectProvider(type = xxx.class,method = "getSelectSql4")
List<Student> selectStudentByCondition2(Map map);
//type为sql语句存放的类名,method为该存放该sql语句的方法

存放SQL语句的类xxx.java:

public String getSelectSql4(Map map){
    StringBuffer sql = new StringBuffer();
    sql.append("select id,name,age,score from student where 1=1");
    if(map.get("name")=!null && map.get("name") != ""){
        sql.append(" and name like '%' #{name} '%'");
    }
    if ((Integer)map.get("age")>0){
        sql.append(" and age < #{age}");
    }
    return sql.toString();
}
//注意第一个sql语句中要加上where 1=1,下面添加的sql语句才会符合语句。
//两个添加的sql语句要先空格
//最会返回的类型改为字符串类型

测试类中:

public void test3{
    map.put("age",13);
    map.put("name","小");
    List<Student> students = studentDao.selectStudentByCondition3(map);
    for (Student s:students){
        System.out.println(s)
    }
}
  • 复合条件查询3

接口中:

@SelectProvider(type = xxx.class,method = "getSelectSql5")
List<Student> selectStudentByCondition3(@Param("name")String name,@Param("age") int age);
//type为sql语句存放的类名,method为该存放该sql语句的方法

测试类中:

public void test3{
    List<Student> students = studentDao.selectStudentByCondition3("小",19);
    for (Student s:students){
        System.out.println(s)
    }
}

存放SQL语句的类xxx.java:

public String getSelectSql5(Map map){
    //注意如果用参数进行传递,要用map接受。
    StringBuffer sql = new StringBuffer();
    sql.append("select id,name,age,score from student where 1=1");
    if(map.get("name")=!null && map.get("name") != ""){
        sql.append(" and name like '%' #{name} '%'");
    }
    if ((Integer)map.get("age")>0){
        sql.append(" and age < #{age}");
    }
    return sql.toString();
}
//注意第一个sql语句中要加上where 1=1,下面添加的sql语句才会符合语句。
//两个添加的sql语句要先空格
//最会返回的类型改为字符串类型

修改

  • 利用注解进行修改

接口中:

 @UpdateProvider(type = MySqlProvider.class,method = "getUpdateSql2")
 void updateStudent2(Student student);

存放SQL语句的类 MySqlProvider.java:

    public String getUpdateSql2(Student student){
        StringBuffer sql = new StringBuffer();
        sql.append("update student set id=#{id} ");
        if (student.getName() != null && student.getName() != ""){
            sql.append(",name=#{name}");
        }
        if (student.getAge() > 0){
            sql.append(",age=#{age}");
        }
        if (student.getScore() > 0){
            sql.append(",score = #{score}");
        }
        sql.append(" where id = #{id}");
        return sql.toString();
    }
//注意这里由于不知道需要修改几个属性,所以使用了动态sql语句,sql.append第一句加上set id=#{id}作用于上面的1=1一样,id是不会变的。

测试类:

    @Test
    public void Test11()
    {
        Student student = new Student("小二",22,98);
        student.setId(25);
        studentDao.updateStudent2(student);
        session.commit();
        //注意这里要进行提交
    }
  • 使用匿名内部类进行修改

接口中:

 @UpdateProvider(type = MySqlProvider.class,method = "getUpdateSql3")
    void updateStudent3(Student student);

存放SQL语句的类 MySqlProvider.java:

public String getUpdateSql3(final Student student){
        //public class extends People{}
        //new SQL(){}表示创建一个SQL类的子类对象,只不过这个子类叫什么名字不知道,没有指定。
        //这种写法叫匿名内部类。
        String sql = new SQL(){
            {
                this.UPDATE("student");
                this.SET("id = #{id}");
                if (student.getName() != null && student.getName() != ""){
                    this.SET("name = #{name}");
                }
                if (student.getAge() > 0){
                    this.SET("age = #{age}");
                }
                if (student.getScore() > 0){
                    this.SET("score = #{score}");
                }
                this.WHERE("id = #{id}");
            }
        }.toString();
        return sql;
    }

测试类:

    //修改学生信息3
    @Test
    public void Test12()
    {
        Student student = new Student("小二",22,98);
        student.setId(24);
        studentDao.updateStudent3(student);
        session.commit();
    }

相关文章

  • Mybatis高级阶段

    Mybatis基于注解开发 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编...

  • 4.Mybatis-04 Mybatis 延迟加载策略,缓存及

    主要内容 Mybatis 延迟加载策略 Mybatis 缓存 Mybatis 注解开发 Mybatis 延迟加载策...

  • spring boot教程

    描述 集成mybatis 首先要引入mybatis依赖 注解式开发 编写dao层,在接口中使用注解开发。@Mapp...

  • 5/13day53_注解&分页综合练习

    回顾 MyBatis注解&综合练习 今日目标 一 MyBatis注解 ​ 这几年来注解开发越来越流行,Myba...

  • Mybatis基础 -- 注解开发

    一、Mybatis 常用注解 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少...

  • Mybatis的注解开发

    2.1 MyBatis的常用注解 这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以...

  • SSM注解式开发

    Struts2 + Spring + Mybatis 注解式开发

  • MyBatis的注解开发

    MyBatis的注解开发MyBatis的映射配置除了使用xml配置以外,还支持注解配置sql语句问题: 为什么有了...

  • MyBatis--注解式开发

    MyBatis--注解式开发 MyBatis的注解,主要是用于替换映射文件。而映射文件中无非存放着增删改查的sql...

  • mybatis注解开发

    1.Mybaits常用注解说明 1.1 使用Mybatis注解实现基本CRUD 1.2 使用注解方式开发持久层接口...

网友评论

      本文标题:Mybatis注解开发

      本文链接:https://www.haomeiwen.com/subject/ohgqvctx.html