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();
}