<select id="findRoleByParam" parameterType="chapter2.pojo.RoleParam" resultMap="roleMap"> select id,role_name,note from t_role where role_name like concat('%', #{roleName},'%') and note like concat('%',#{note},'%') </select>
RoleMapper.java接口方法:
public List<Role> findRoleByParam(RoleParam role);
客户端调用执行:
RoleParam rp = new RoleParam(); rp.setNote("note"); rp.setRoleName("test"); List<Role> roles = roleMapper.findRoleByParam(rp);
批量插入操作:
RoleMapper.xml配置文件里面的定义的SQL语句:
<insert id="insertBatch" useGeneratedKeys="true" parameterType="java.util.List"> insert into t_role(role_name, note) values <foreach collection="list" item="item" index="index" separator=","> (#{item.roleName},#{item.note}) </foreach> </insert>
useGeneratedKeys="true" 表明使用数据库表中自带的主键自增策略。在文章所述的t_role表的结构中, id 是自增的主键,但是这里的批量插入操作,并不需要显示的插入 id 的值。
待插入的每条记录值 放在 java.util.List 对象中保存,通过 foreach 循环遍历,"item"代表遍历到的每条记录---即每个Role对象, 通过 #{item.roleName} 和 #{item.note} 取出Role对象属性值---即每个表的字段值。
RoleMapper.java接口方法:
public void insertBatch(List<Role> roleList);
客户端调用执行:(记得最终 调用 commit() 方法进行提交)
sqlSession = SqlSessionFactoryUtil.openSqlSession(); RoleMapper roleMapper = sqlSession.getMapper(RoleMapper.class); Role role = new Role(); role.setRoleName("testName"); role.setNote("testNote"); Role role2 = new Role(); role2.setRoleName("xx"); role2.setNote("notexx"); List<Role> roleList = new ArrayList<>(); roleList.add(role2); roleList.add(role2); roleMapper.insertBatch(roleList); System.out.println("insert finished"); sqlSession.commit();