栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis —— 8、特殊SQL的执行

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis —— 8、特殊SQL的执行

目录

1、模糊查询

1.1、方法一:使用 #{} 

1.2、方法二:使用concat、${}

1.3、方法三:使用双引号、#{}

2、批量删除:使用in()

3、动态设置表名

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


本次笔记使用的模块是 MyBatis_demo2

1、模糊查询

1.1、方法一:使用 #{} 

① 创建 SQLMapper 接口,并添加方法

public interface SQLMapper {

    
    List getUserByLike(@Param("username") String username);

}

② 创建对应的映射文件 SQLMapper.xml,并添加 SQL 语句,这里先测试使用 #{} 来获取参数值

    
    
        select * from t_user where username like '%#{username}%'
    

③ 测试方法

    @Test
    public void testGetUserByLike(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
        List d = mapper.getUserByLike("d");
        System.out.println(d);
    }

④ 输出结果

DEBUG 03-16 17:12:20,017 ==>  Preparing: select * from t_user where username like '%?%' (baseJdbcLogger.java:137) 

可以看到 SQL 语句中 #{} 被替代为 ?

⑤ 使用 ${} 来替代 #{} 获取参数值 

    
    
         
        select * from t_user where username like '%${username}%'
    

⑥ 测试,输出结果如下

DEBUG 03-16 17:57:07,529 ==>  Preparing: select * from t_user where username like '%d%' (baseJdbcLogger.java:137) 
DEBUG 03-16 17:57:07,557 ==> Parameters:  (baseJdbcLogger.java:137) 
DEBUG 03-16 17:57:07,577 <==      Total: 1 (baseJdbcLogger.java:137) 
[User{id=4, username='admin', password='123456', age=23, sex='男', email='123456@qq.com'}]

1.2、方法二:使用concat、${}
    
    
         
        
        select * from t_user where username like concat('%',#{username},'%') 
    

1.3、方法三:使用双引号、#{}
    
    
        select * from ${tableName}
    

③ 测试方法

    @Test
    public void testGetUserByTableName(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
        List t_user = mapper.getUserByTableName("t_user");
        System.out.println(t_user);
    }

④ 输出结果

DEBUG 03-16 20:14:40,053 ==>  Preparing: select * from t_user (baseJdbcLogger.java:137) 
DEBUG 03-16 20:14:40,085 ==> Parameters:  (baseJdbcLogger.java:137) 
DEBUG 03-16 20:14:40,105 <==      Total: 2 (baseJdbcLogger.java:137) 
[User{id=4, username='admin', password='123456', age=23, sex='男', email='123456@qq.com'}, User{id=5, username='李四', password='lisi', age=33, sex='男', email='lisi@qq.com'}]

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

应用场景: 
假设现在有两张表:t_clazz(clazz_id,clazz_name)   t_student(student_id,student_name,clazz_id)  
需求:为学生设置班级(班级需要新建)
1. 添加班级信息  
2. 获取新添加的班级的id  
3. 为班级分配学生,即将某学的班级id修改为新添加的班级的id

① 在 SQLMapper 接口添加 insert 方法

    
    void insertUser(User user);

② 在 SQLMapper.xml 添加 SQL 语句

    
    
    
        insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
    

③ 测试方法

    @Test
    public void testInsertUser(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        SQLMapper mapper = sqlSession.getMapper(SQLMapper.class);
        User user = new User(null, "admin", "123456", 99, "女", "admin@qq.con");
        mapper.insertUser(user);
        System.out.println(user);
    }

④ 输出结果,发现输出的 user 对象有 id 值

DEBUG 03-16 21:05:19,306 ==>  Preparing: insert into t_user values(null,?,?,?,?,?) (baseJdbcLogger.java:137) 
DEBUG 03-16 21:05:19,339 ==> Parameters: admin(String), 123456(String), 99(Integer), 女(String), admin@qq.con(String) (baseJdbcLogger.java:137) 
DEBUG 03-16 21:05:19,343 <==    Updates: 1 (baseJdbcLogger.java:137) 
User{id=6, username='admin', password='123456', age=99, sex='女', email='admin@qq.con'}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/769569.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号