2.MyBatis的CRUD操作
转载:https://blog.kuangstudy.com/index.php/archives/492/
一.CRUD操作
1.基本操作流程
-
在Mapper接口中添加一个方法
-
在Mapper.xml中添加一个xml语句与方法对应
-
在测试类中添加一个方法测试
2.namespace
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致!
3.select
(1)介绍
- select标签是mybatis中最常用的标签之一
-
select语句有很多属性可以详细配置每一条SQL语句
-
id:对应namespace中的方法名
-
parameterType:传入SQL语句的参数类型 。【万能的Map,可以多尝试使用】
-
resultType:SQL语句返回值类型。【完整的类名或者别名】
-
(2)案例:根据id查询用户
Mapper接口中添加方法
1 //根据ID查询用户 2 User getUserById(int id);
Mapper.xml中添加xml语句
1 <!--根据ID查询用户--> 2 <select id="getUserById" parameterType="int" resultType="edu.ustc.wzh.pojo.User"> 3 select * from mybatis.user where id=#{id} 4 </select>
测试类中添加方法
1 @Test 2 public void getUserById() { 3 4 SqlSession session = MybatisUtils.getSession(); 5 6 7 UserMapper mapper = session.getMapper(UserMapper.class); 8 User user = mapper.getUserById(1); 9 System.out.println(user); 10 11 session.close(); 12 }
3.insert
Mapper接口添加方法
1 //insert一个用户 2 int addUser(User user);
Mapper.xml中添加xml语句:对于对象的属性可以直接取出 values (#{id},#{name},#{pwd})
1 <!--对象中的属性,可以直接取出来--> 2 <insert id="addUser" parameterType="edu.ustc.wzh.pojo.User"> 3 insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd}); 4 </insert>
测试类添加方法:对于增删改都需要提交事务 session.commit();
1 //增删改需要提交事务 2 @Test 3 public void addUser(){ 4 SqlSession session = MybatisUtils.getSession(); 5 6 UserMapper mapper = session.getMapper(UserMapper.class); 7 8 int res = mapper.addUser(new User(4,"wzh","654321")); 9 if (res>0){ 10 System.out.println("插入成功!"); 11 } 12 13 //提交事务 14 session.commit(); 15 16 session.close(); 17 }
4.update
Mapper接口中添加方法
1 //更新用户信息 2 int updateUser(User user);
Mapper.xml中添加xml语句
1 <update id="updateUser" parameterType="edu.ustc.wzh.pojo.User"> 2 update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id}; 3 </update>
测试类中添加测试方法
1 @Test 2 public void updateUser(){ 3 SqlSession session = MybatisUtils.getSession(); 4 5 UserMapper mapper = session.getMapper(UserMapper.class); 6 7 int res = mapper.updateUser(new User(4,"wzh","000000")); 8 if (res>0){ 9 System.out.println("更新成功!"); 10 } 11 12 //提交事务 13 session.commit(); 14 15 session.close(); 16 }
5.delete
Mapper接口中添加方法
1 //删除用户 2 int deleteUser(int id);
Mapper.xml中添加xml语句
1 <delete id="deleteUser" parameterType="int"> 2 delete from mybatis.user where id=#{id}; 3 </delete>
测试类中添加测试方法
1 @Test 2 public void deleteUser(){ 3 SqlSession session = MybatisUtils.getSession(); 4 5 UserMapper mapper = session.getMapper(UserMapper.class); 6 7 int res = mapper.deleteUser(4); 8 if (res>0){ 9 System.out.println("删除成功!"); 10 } 11 12 //提交事务 13 session.commit(); 14 15 session.close(); 16 }
6.万能Map
假设我们的实体类或数据库中的表,字段或参数过多,我们应当考虑使用Map!
Mapper接口中添加方法
1 //使用万能Map添加用户信息 2 int addUser2(Map<String,Object> map);
Mapper.xml中添加xml语句
1 <!--使用万能Map,参数传递变为map,值传递map的key--> 2 <insert id="addUser2" parameterType="map"> 3 insert into mybatis.user (id,name,pwd) values (#{userId},#{userName},#{password}); 4 </insert>
测试类中添加测试方法
1 @Test 2 public void addUser2(){ 3 SqlSession session = MybatisUtils.getSession(); 4 5 UserMapper mapper = session.getMapper(UserMapper.class); 6 7 Map<String,Object> map = new HashMap<>(); 8 9 map.put("userId",5); 10 map.put("userName","ustc"); 11 map.put("password","098765"); 12 mapper.addUser2(map); 13 14 session.commit(); 15 session.close(); 16 }
注:
- Map传递参数,直接在SQL中取出key即可【parameterType="map"】
- 对象传递参数,直接在SQL中取出对象属性【parameterType="edu.ustc.wzh.pojo.User"】
- 只有一个基本类型的情况下,可以省略xml的参数类型,直接在SQL中取到
我们可以多用Map或者注解!
7.模糊查询
两种方式:
(1)Java代码执行的时候,传递通配符 % (推荐使用)
Mapper接口中添加方法
1 //模糊查询:Java代码方式 2 List<User> getUserLike(String value);
Mapper.xml中添加xml语句
1 <select id="getUserLike" parameterType="String" resultType="edu.ustc.wzh.pojo.User"> 2 select * from mybatis.user where name like #{value}; 3 </select>
测试类中添加测试方法
1 @Test 2 public void getUserLike(){ 3 4 SqlSession session = MybatisUtils.getSession(); 5 6 UserMapper mapper = session.getMapper(UserMapper.class); 7 8 List<User> userList = mapper.getUserLike("李%"); 9 for (User user : userList) { 10 System.out.println(user); 11 } 12 13 session.close(); 14 }
(2)在SQL中使用通配符拼接(可能会产生SQL注入)
Mapper接口中添加方法
1 //模糊查询:SQL拼接方式 2 List<User> getUserLike2(String value);
Mapper.xml中添加xml语句:直接在SQL代码处拼接 "%"#{value}"%" 可能产生SQL注入
1 <select id="getUserLike2" parameterType="String" resultType="edu.ustc.wzh.pojo.User"> 2 select * from mybatis.user where name like "%"#{value}"%"; 3 </select>
测试类中添加测试方法
1 @Test 2 public void getUserLike2(){ 3 4 SqlSession session = MybatisUtils.getSession(); 5 6 UserMapper mapper = session.getMapper(UserMapper.class); 7 8 List<User> userList = mapper.getUserLike2("李"); 9 for (User user : userList) { 10 System.out.println(user); 11 } 12 13 session.close(); 14 }