开发者

MyBatis特殊SQL的执行实例代码

开发者 https://www.devze.com 2023-01-31 10:45 出处:网络 作者: 热爱编程的小白白
目录1.模糊查询2.批量删除3.动态设置表名  4.添加功能获取自增的主键总结1.模糊查询
目录
  • 1.模糊查询
  • 2.批量删除
  • 3.动态设置表名  
  • 4.添加功能获取自增的主键
  • 总结

1.模糊查询

接口:

public interface SelectMapper {
    List<User> getUserByLike(@Param("moh编程客栈u") String mohu);
}

SQL(错误示范):

  <select id="getUserByLike" resultType="com.atguigu.myBATis.pojo.User">
        SELECT * FROM t_user WHERE   PASSWORD  LIKE  '%#{mohu}%'
    </select>

测试:

    public  void  test7(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.get开发者_Go入门SqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        List<User> userByLike = mapper.getUserByLike("123");
        System.out.println(userByLike);
    }

 运行结果:

MyBatis特殊SQL的执行实例代码

 SQL: SELECT * FROM t_user WHERE   PASSWORD  LIKE  '%?%'

因为:#{}:相当于参数占位符,且会对自动传入的数据加一个双引号,外面已经有一层引号,所以报错。

SQL(正确示范,以下3种都行):

  • select * from t_user where password like '%${mohu}%'
  • select * from t_user where password like concat('%',#{mohu},'%')
  • select * from t_user where password like "%"#{mohu}"%"

运行结果:

MyBatis特殊SQL的执行实例代码

2.批量删除

接口:

  /**
     * 
     * @param ids
     * @return
     */
    int deleteMoreUser(@Param("ids") String ids);

SQL:

    <delete id="deleteMoreUser">
        delete from t_user where id in(${ids})
    </delete>

测试:

    public  void  test8(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
        int i = mapper.deleteMoreUser("1,2");
    }js

表:

MyBatis特殊SQL的执行实例代码

 运行结果:

MyBatis特殊SQL的执行实例代码

MyBatis特殊SQL的执行实例代码

3.动态设置表名  

当有多张表时,例如  VIP表  和  普通表 ,这时需要动态设置表名。

接口:

LUWRAyist<User> getAllUser(@Param(javascript"tableName") String tableName);

SQL: python

select * from ${tableName} 

注意:不能使用 #{}

select * from #{tableName} 

因为#{} 会自动添加单引号,就变成了:

select * from  '表名'

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

场景模拟:

t_clazz(clazz_id,clazz_name)

t_student(student_id,student_name,clazz_id)

1 、添加班级信息

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

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

接口:

int insertUser(User user);

SQL:

  <insert id="insertUser" useGeneratedKeys="true"  keyProperty="id">
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    </insert>

测试:

    public  void  test9(){
        SqlSessionUtils sqlSessionUtils = new SqlSessionUtils();
        SqlSession sqlSession = sqlSessionUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User(null,"小K","183918389",22,"男","13121178@qq.com");
        mapper.insertUser(user);
        System.out.println(user);
    }

效果:

MyBatis特殊SQL的执行实例代码

 如果把    useGeneratedKeys       keyProperty 删除

MyBatis特殊SQL的执行实例代码

运行结果:

MyBatis特殊SQL的执行实例代码

发现id=null

 useGeneratedKeys:设置使用自增的主键

 keyProperty:因为增删改有统一的返回值是受影响的行数,因此只能将获取的自增的主键放在传输的参数user对象的某个属性中

总结

到此这篇关于MyBatis特殊SQL的执行的文章就介绍到这了,更多相关MyBatis特殊SQL执行内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

0

精彩评论

暂无评论...
验证码 换一张
取 消