提示:
Mapper配置文件的命名空间为对应接口包名+接口名字,这个经常会忘记和搞错的!!
select标签
在接口中编写三个查询方法
//获取全部用户
List<User> selectUser();
//根据id查询用户
User getUserByID(int id);
//根据一个对象查询
User getUserByUser(User user);
标签信息
<select id="" parameterType="" resultType="" resultMap=""> -- sql语句 (#{name}--这个格式能获取方法参数与sql语句整合) </select>
id:对应接口对应方法名字
parameterType:为参数类型
resultType:查询结果返回类型
resultMap:手动映射查询结果(之后随笔会介绍)
UserMapper.xml中select语句:
<select id="selectUser" resultType="com.ttt.pojo.User" > select * from mybatis.user </select> <select id="getUserByID" parameterType="int" resultType="com.ttt.pojo.User"> select * from mybatis.user where id=#{id} </select> <select id="getUserByUser" parameterType="com.ttt.pojo.User" resultType="com.ttt.pojo.User"> select * from mybatis.user where name=#{name} </select>
1、若返回结果为一个集合,那么返回类型就填返回集合里对象类型。
2、在接口方法的参数前加 @Param属性 ,Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型
例如:
//通过密码和名字查询用户 User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd); /* <select id="selectUserByNP" resultType="com.ttt.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select> */
测试语句:
@Test public void test01(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users1 = userMapper.selectUser(); User user2 = userMapper.getUserByID(1); User user3 = userMapper.getUserByUser(new User(1, "黑子", "123456")); System.out.println("selectUser方法结果:"); for (User user : users1) { System.out.println(user); } System.out.println("getUserByID方法结果:"); System.out.println(user2); System.out.println("getUserByUser方法结果:"); System.out.println(user3); sqlSession.close(); }
insert标签:
1、在接口添加方法
//insert一个用户 int addUser(User user);
2、UserMapper.xml中insert语句
<insert id="addUser" parameterType="com.ttt.pojo.User"> insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd}) </insert>
3、测试
@Test public void test04(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.addUser(new User(4,"demo", "1234" )); sqlSession.commit(); sqlSession.close(); }
update标签
1、接口添加方法
//修改用户 int updateUser(User user);
2、UserMapper.xml中update语句
<update id="updateUser" parameterType="com.ttt.pojo.User"> update user set name = #{name}, pwd=#{pwd} where id=#{id} </update>
注:update语句没有返回标签
3、测试
@Test
public void test05(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updateUser(new User(4, "绿员君", "123456"));
sqlSession.commit();
sqlSession.close();
}
delete标签
1、接口中添加方法
//删除一个用户 int deleteUser(int id);
2、UserMapper.xml中delete语句
<delete id="deleteUser" parameterType="int"> delete from mybatis.user where id=#{id}; </delete>
3、测试
@Test public void test06(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.deleteUser(4); sqlSession.commit(); sqlSession.close(); }
传参技巧--万能map
- 在接口方法中,参数直接传递Map
-
User selectUserByNP2(Map<String,Object> map);
-
-
编写sql语句的时候,需要传递参数类型,参数类型为map
-
<select id="selectUserByNP2" parameterType="map" resultType="com.ttt.pojo.User"> select * from user where name = #{username} and pwd = #{pwd} </select>
-
-
在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!
Map<String, Object> map = new HashMap<String, Object>(); map.put("username","小明"); map.put("pwd","123456"); User user = mapper.selectUserByNP2(map);
如果参数太多,我们可以使用map实现,而参数太少了,就直接传递参数即可。
小结:
- 所有的增删改操作都需要提交事务!
- 接口所有的普通参数,尽量都写上@Param参数,尤其是多个参数时,必须写上!
- 有时候根据业务的需求,可以考虑使用map传递参数!
- 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上!