Mybatis面试系列五

1、如何执行批量插入?

首先,创建一个简单的insert语句:

复制代码
 <insert id="insertname">
 insert into names(name) values(#{value})
 </insert>

然后在java代码中像下面这样执行批处理插入:

复制代码
 list <string> names=new arraylist();
 names.add("fred");
 names.add("barney");
 names.add("betty");
 names.add("wilma");
 //注意这里executortype.batch
 sqlsession sqlsession=
 sqlsessionfactory.opensession(executortype.batch);
 try{
 namemapper mapper=sqlsession.getmapper(namemapper.class);
 for(string name:names){
 mapper.insertname(name);
 }
 sqlsession.commit();
 }catch(Exceptione){
 e.printStackTrace();
 sqlSession.rollback();
throw e;
 }
 finally {
 sqlsession.close();
 }

2、如何获取自动生成的(主)键值?

insert 方法总是返回一个 int 值 ,这个值代表的是插入的行数。

如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入

的参数对象中。

示例:

复制代码
<insert id="insertname" usegeneratedkeys="true" keyproperty="
 id">
 insert into names (name) values (#{name})
 </insert>
 name name =newname();
 name.setname("fred");
 int rows = mapper.insertname(name);
 // 完成后,id已经被设置到对象中
system.out.println("rows inserted = " + rows);
 system.out.println("generated key value = " + name.getid());

3、在mapper中如何传递多个参数?

1、第一种:

DAO层的函数

复制代码
public UserselectUser(Stringname,Stringarea);

对应的xml,#{0}代表接收的是dao层中的第一个参数,#{1}代表dao层中第二

参数,更多参数一致往后加即可。

复制代码
<select id="selectUser" resultMap="BaseResultMap">
 select * from user_user_t  where user_name=#{0}
 and user_area=#{1}
 </select>

2、第二种:使用@param注解:

复制代码
 public interface usermapper{
 user selectuser(@param("username") string
 username,@param("hashedpassword") string hashedpassword);
 }

然后,就可以在xml像下面这样使用(推荐封装为一个map,作为单个参数传递给

mapper):

复制代码
<select id="selectuser" resulttype="user">
 selec tid,username,hashedpassword
 from some_table
 where username=#{username}
 and hashedpassword=#{hashedpassword}
 </select>

3、第三种:多个参数封装成map

复制代码
try {
 //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的
SQL
 //由于我们的参数超过了两个,而方法中只有一个Object参数收集,因此
我们使用Map集合来装载我们的参数
Map <String, Object > map = new HashMap();
 map.put("start", start);
 map.put("end", end);
 return sqlSession.selectList("StudentID.pagination", map);
 } catch (Exception e) {
 e.printStackTrace();
 sqlSession.rollback();
 throw e;
 } finally {
 MybatisUtil.closeSqlSession();
 }

阿里云新用户专享特惠,上云优惠聚集地!

相关推荐
SimonKing16 分钟前
OpenCode 桌面版这 10 天偷偷迭代了 5 个版本,你还在用旧版吗?
java·后端·程序员
凉凉的知识库31 分钟前
什么是 HTTP Keep-Alive?一文讲清连接复用机制
网络协议·http·面试
Dontla1 小时前
冒烟测试介绍(Smoke Test、BVT构建验证测试、构建验收测试)与回归测试对比、与单元测试对比、与集成测试对比、Cypress
java·单元测试·集成测试
清泓y1 小时前
UE基础知识与引擎架构面试题
面试·架构·ue5·ue4·游戏程序
暖和_白开水1 小时前
数据分析agent(十):loguru日志输出优化 和es 启动流程
java·elasticsearch·数据分析
减瓦1 小时前
Gradle 版本演进全景:构建工具的进化密码
java·gradle
玛丽莲茼蒿1 小时前
很难出错的Spring5(十)—— IOC进阶
java·开发语言·jvm
减瓦1 小时前
Jackson 使用指南
java·spring boot·json
Devin~Y1 小时前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
触底反弹1 小时前
💡 React 父子组件通信:一个进度条教会我的 5 件事
前端·react.js·面试