Mybatis-特殊SQL的执行

1.模糊查询

/**
  * 测试模糊查询
  * @param mohu
  * @return
*/
List<User> testMohu(@Param("mohu") String mohu);

  mapper文件:

<!--List<User> testMohu(@Param("mohu") String mohu);-->
  <select id="testMohu" resultType="User">
  <!--select * from t_user where username like '%${mohu}%'-->
  <!--select * from t_user where username like concat('%',#{mohu},'%')-->
  select * from t_user where username like "%"#{mohu}"%"
</select>

2.处理批量删除

  在进行批量删除的时候必须使用${},因为${}是拼接,在sql执行时参数不带有引号

  而使用#{}时,#{}是占位符赋值操作,在此操作下sql语句参数带有引号,sql报错

  接口方法:

 /**
     * 处理批量删除
     */
    int deleteMore(@Param("ids") String ids);

  mapper文件:

 <!--int deleteMore(@Param("ids") String ids);-->
    <delete id="deleteMore">
        delete from student where id in (${ids})
    </delete>

  测试类方法:
   @Test

public void deleteMore(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        int i = dao.deleteMore("1004.1008");
        sqlSession.commit();
        System.out.println("i=="+i);
        sqlSession.close();
    }

3.动态设置表名

  当一张表中的数据太多时,我们将一张大表分成几张小的表来共同存储数据(表中的属性都是一样的)

  当要选用其中某一张表时,就会用到动态设置表明的操作

    当使用到动态设置表明时要使用${}来拼接sql语句 这样sql语句再能正确执行;而使用#{}时因为带有引号的原因,sql会报错

  接口方法:

 /**
     * 动态设置表名
     * @param Tablename
     * @return
     */
    List<Student> SelectStudentTable(@Param("TableName") String Tablename);

  mapper文件:

<!--List<Student> SelectStudentTable(@Param("TableName") String Tablename);-->
    <select id="SelectStudentTable" resultType="student">
        select * from ${TableName}
    </select>

 测试类方法:

 @Test
    public void SelectStudentTable(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        List<Student> students = dao.SelectStudentTable("student");
        for (Student stu : students){
            System.out.println("stu-->"+stu);
        }
        sqlSession.close();
    }

4.添加功能获取自增的主键

  t_clazz(clazz_id,clazz_name)

  t_student(student_id,student_name,clazz_id)

  1、添加班级信息

  2、获取新添加的班级的id

  3、为班级分配学生,即将某学的班级id修改为新添加的班级的id

  为了获取添加的信息中的自增主键      

  接口方法:

/**
     * 添加功能获取自增主键
     * @param student
     */
    void InsertStudent(Student student);

  mapper文件:

<!--void InsertStudent(Student student);
        useGeneratedKeys:设置当前标签中的sql使用了自增的主键
        keyProperty:将自增的主键的值赋值给传输到映射文件中参数的某个属性
    -->
    <insert id="InsertStudent" useGeneratedKeys="true" keyProperty="id">
        insert into student values (null,#{name},#{email},#{age})
    </insert>

  测试类方法:

 @Test
    public void InsertStudent(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        StudentDao dao = sqlSession.getMapper(StudentDao.class);
        Student s = new Student();
        s.setName("高峰");
        s.setEmail("dadd@gamil.com");
        s.setAge(23);
        dao.InsertStudent(s);
        System.out.println("s-->"+s);
        sqlSession.commit();
        sqlSession.close();
    }

 

posted @ 2022-02-28 18:19  Soleili  阅读(35)  评论(0编辑  收藏  举报