2.MyBatis的CRUD操作

转载:https://blog.kuangstudy.com/index.php/archives/492/

一.CRUD操作

1.基本操作流程

  1.  在Mapper接口中添加一个方法

  2. 在Mapper.xml中添加一个xml语句与方法对应

  3. 在测试类中添加一个方法测试

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 }

 

posted @ 2020-02-11 19:53  All_just_for_fun  阅读(199)  评论(0编辑  收藏  举报