1: 参数类型绑定
单个参数传递
<insert id="insertUser">
insert into t_user(id,name,age,user_address)
value(
#{id},
#{name},
#{age},
#{address}
)
</insert>
serivice 接口
Integer insertUser(String id,String name,Integer age,String address);
实现类
public Integer insertUser(String id, String name, Integer age, String address) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
return userMapper.insertUser(id,name,age,address);
}
Mapper中添加
Integer insertUser(String id, String name, Integer age, String address);
测试类
public class UserTest03 {
@Test
public void testInsert(){
UserService userService = new UserServiceImpl();
userService.insertUser(UUID.randomUUID().toString(),"杨幂",30,"北京");
}
}
测试结果如下: 报参数匹配不上的错误
### The error occurred while setting parameters
### SQL: insert into t_user(id,name,age,user_address) value( ?, ?, ?, ? )
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg3, arg2, arg1, arg0, param3, param4, param1, param2]
将mapper中的sql 进行修改
<insert id="insertUser">
insert into t_user(id,name,age,user_address)
value(
#{param1},
#{param2},
#{param3},
#{param4}
)
</insert>
或者
<insert id="insertUser">
insert into t_user(id,name,age,user_address)
value(
#{arg0},
#{arg1},
#{arg2},
#{arg3}
)
</insert>
之后发现sql 执行正常了 但是我们还是没法很准确的知道参数怎么和
sql #{} 中的值对应上,mybatis 还提供了另外的方式帮助我们解决这个问题
修改 Mapper 接口中的 Integer insertUser(String id, String name, Integer age, String address);
为Integer insertUser(@Param("id") String id, @Param("name") String name, @Param("age") Integer age, @Param("address") String address);
然后修改sql 为
<insert id="insertUser">
insert into t_user(id,name,age,user_address)
value(
#{id},
#{name},
#{age},
#{address}
)
</insert>
再次执行sql就可以正常的根绝我们自己的需要映射绑定数据了
2 : 使用map的方式传递参数
@Test
public void testInsertByMap(){
UserService userService = new UserServiceImpl();
Map<String,Object> param = new HashMap<>();
param.put("id",UUID.randomUUID().toString());
param.put("name","嫦娥");
param.put("age",2000);
param.put("address","皇宫");
userService.insertUserByMap(param);
}
service 中添加
void insertUserByMap(Map<String, Object> param);
实现类中添加
public void insertUserByMap(Map<String, Object> param) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.insertUserByMap(param);
sqlSession.commit();
sqlSession.close();
logger.info("insert {} success",count);
}
Mapper 接口中添加
Integer insertUserByMap(Map<String, Object> param);
无需使用@Pram()指定
mapper.xml 中添加
<insert id="insertUserByMap" parameterType="map">
insert into t_user(id,name,age,user_address)
value(
#{id},
#{name},
#{age},
#{address}
)
</insert>
3 : 使用pojo 的方式传递参数
@Test
public void testInsertByPojo() {
UserService userService = new UserServiceImpl();
User user = new User();
user.setId(UUID.randomUUID().toString());
user.setName("如花");
user.setAge(100);
user.setUserAddress("guang周");
userService.insertUserByPojo(user);
}
service 接口
void insertUserByPojo(User user);
实现类
@Override
public void insertUserByPojo(User user) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.insertUserByPojo(user);
sqlSession.commit();
sqlSession.close();
logger.info("insert {} success",count);
}
mapper 接口
Integer insertUserByPojo(User user);
mapper.xml
<insert id="insertUserByPojo" parameterType="org.wl.pojo.User">
insert into t_user(id,name,age,user_address)
value(
#{id},
#{name},
#{age},
#{userAddress}
)
</insert>
4: 修改
@Test
public void testYUpdateByPojo() {
UserService userService = new UserServiceImpl();
User user = new User();
user.setId("88a18dca-7ed9-49ab-a192-147d0720daec");
user.setUserAddress("小西天");
userService.updateUserByPojo(user);
}
service 接口
void updateUserByPojo(User user);
实现类
@Override
public void updateUserByPojo(User user) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.updateUserByPojo(user);
sqlSession.commit();
sqlSession.close();
logger.info("insert {} success",count);
}
Mapper 接口
Integer updateUserByPojo(User user);
mapper.xml
<update id="updateUserByPojo" parameterType="org.wl.pojo.User">
update t_user set user_address= #{userAddress} where id=#{id}
</update>
其他根据map 或者根据单值的查询其实传递参数的方式和 insert 是一样的这里不做更多的演示了
5: 删除
删除一个
@Test
public void testDeleteOne(){
UserService userService = new UserServiceImpl();
userService.delById("88a18dca-7ed9-49ab-a192-147d0720daec");
}
接口
void delById(String id);
实现类
public void delById(String id) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.delById(id);
sqlSession.commit();
sqlSession.close();
logger.info("insert {} success",count);
}
Mapper
Integer delById(@Param("id") String id);
mapper.xml
<delete id="delById">
delete from t_user where id = #{id}
</delete>
删除多个使用or的方式
@Test
public void testDeleteByOr(){
List<String> params = new ArrayList<>();
params.add("d8360c20-5e47-41b6-9fe8-6cda391cde6d");
params.add("8c0ef264-bcfd-45b6-8a68-a4b20bc00e4e");
UserService userService = new UserServiceImpl();
userService.delByListOr(params);
}
接口 :
void delByListOr(List<String> params);
实现类
public void delByListOr(List<String> params) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.delByListOr(params);
sqlSession.commit();
sqlSession.close();
logger.info("delete {} success",count);
}
mapper 接口
Integer delByListOr(@Param("params") List<String> params);
mapper.xml
<delete id="delByListOr" parameterType="java.util.List">
delete from t_user where
<foreach collection="params" item="item" separator="or" open="(" close=")">
id = #{item}
</foreach>
</delete>
删除多个使用in的方式
@Test
public void testDeleteByIn(){
List<String> params = new ArrayList<>();
params.add("43384a19-4cc9-4ce3-b4d5-ce9474627778");
params.add("1e9d6465-c9c7-4eed-8a26-b52b1e0101c5");
UserService userService = new UserServiceImpl();
userService.delByListIn(params);
}
void delByListIn(List<String> params);
public void delByListIn(List<String> params) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Integer count = userMapper.delByListIn(params);
sqlSession.commit();
sqlSession.close();
logger.info("delete {} success",count);
}
<delete id="delByListIn" parameterType="java.util.List">
delete from t_user where id in
<foreach collection="params" item="item" separator="," open="(" close=")">
#{item}
</foreach>
</delete>