3 CRUD详解

CRUD详解

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.zzb.dao.UserMapper">
    <select id="getUserList" resultType="com.zzb.pojo.User">
      select * from user
    </select>

    <select id="getUserListByLike" parameterType="String" resultType="com.zzb.pojo.User">
      select * from user where name like #{value}
    </select>


    <select id="getUserById" parameterType="int" resultType="com.zzb.pojo.User">
        select * from user where id = #{id}
    </select>

    <select id="getUserById2" parameterType="map" resultType="com.zzb.pojo.User">
        select * from user where id = #{keyId}
    </select>

    <!--对象的属性可以直接取出来-->
    <insert id="addUser" parameterType="com.zzb.pojo.User">
        insert into user (id, name, pwd) values ( #{id}, #{name}, #{pwd});
    </insert>

    <update id="updateUser" parameterType="com.zzb.pojo.User">
        update  user set name = #{name}, pwd = #{pwd} where id = #{id};
    </update>

namespace

配置文件中的namespace中的名称为对应的Mapper接口的完整包名,必须一致!

select

  • select标签是mybatis中最常用的标签之一
  • select语句中有很多属性
    • parameterType:传入SQL语句的参数类型,如果是基本类型可以省略,也可以通过Map进行参数传递
    • resultType:SQL语句的返回值类型,如果是基本类型可以省略,其他对象必须为完整的类名(含包名)或者别名
    • 接口中的方法名与XML映射文件中的SQL语句ID要一一对应
    • resultMap:为返回结果集映射,即实体类中的属性与数据库表中的表头名称无法一一对应时,需要进行结果集的映射,才能保证成功完整的取出数据。

根据id查询用户

1、在UserMapper接口中添加相应的方法

    // 根据Id查询用户
    User getUserById(int userId);

2、在UserMapper.xml中添加select语句

    <select id="getUserById" resultType="com.bg.pojo.User">
        SELECT * FROM user WHERE id = #{userId}
    </select>

参数类型传递方法

  • 直接传递参数,可以按照上述代码传递参数,也可以在接口方法的参数前添加@Param属性,显示的指定参数名。

    import org.apache.ibatis.annotations.Param;    
    
    	// 根据Id查询用户
        User getUserById(@Param("id") int userId);
    

    那么在XML配置文件中,就要做相应的修改(userId —> id)

    <select id="getUserById" resultType="com.bg.pojo.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    
  • 使用万能的Map传递参数,将需要传递的参数封装程Map,将接口修改为如下所示。

    import java.util.Map;    
    
    	// 根据Id查询用户
        User getUserById(Map<String, Object> map);
    

    XML配置文件无需修改,也可以显示的指明传入参数类型为map

        <select id="getUserById" parameterType="map" resultType="com.bg.pojo.User">
            SELECT * FROM user WHERE id = #{id}
        </select>
    

    测试时,需要将传入参数设置为Map类型:

        @Test
        public void getUserById(){
            // 首先获得SqlSession对象
            SqlSession sqlSession = MyBatisTool.getSqlSession();
            // 通过SqlSession对象获取Mapper接口对象
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            // map封装参数
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("id", 3);
            // 调用mapper中的函数,执行sql
            User user = mapper.getUserById(map);
    
            // 遍历结果,并输出
            System.out.println(user.toString());
    
    
            // 使用完毕后,关闭SqlSession对象
            sqlSession.close();
        }
    

insert

给数据库增加一个用户

1、在UserMapper接口中添加对应的方法

    // 增加一个用户
    int addUser(User user);

2、在UserMapper.xml中添加insert语句

    <!--返回类型为基本类型,可以省略-->
    <insert id="addUser" parameterType="com.bg.pojo.User">
        INSERT INTO user(id, name, pwd) VALUES (#{id}, #{name}, #{pwd})
    </insert>

注意:参数直接去User对象中对应的属性即可。

3、测试

    @Test
    public void addUser(){
        // 首先获得SqlSession对象
        SqlSession sqlSession = MyBatisTool.getSqlSession();
        // 通过SqlSession对象获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用mapper中的函数,执行sql
        User user = new User(5, "赵六", "9527");

        int i = mapper.addUser(user);
        if(i == 1){
            System.out.println("插入数据成功");
            // 因为SqlSession默认关闭事务自动提交,因此插入数据成功后,我们需要手动提交事务,才能在数据库中完成插入
            sqlSession.commit();
        }else{
            System.out.println("插入数据失败");
        }

        // 使用完毕后,关闭SqlSession对象
        sqlSession.close();
    }

注意:增、删、改操作都需要提交事务

update

通常使用update标签进行更新数据的操作。

修改用户信息

1、在UserMapper接口中添加对应的方法

    // 修改一个用户
    int updateUser(User user);

2、在UserMapper.xml中添加insert语句

    <update id="updateUser" parameterType="com.bg.pojo.User">
        UPDATE user SET name = #{name}, pwd = #{pwd} WHERE id = #{id}
    </update>

3、测试

    @Test
    public void updateUser(){
        // 首先获得SqlSession对象
        SqlSession sqlSession = MyBatisTool.getSqlSession();
        // 通过SqlSession对象获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用mapper中的函数,执行sql
        User user = new User(3, "张飞", "00222555");

        int i = mapper.updateUser(user);
        if(i == 1){
            System.out.println("更新数据成功");
            // 因为SqlSession默认关闭事务自动提交,因此更新数据成功后,我们需要手动提交事务,才能在数据库中完成插入
            sqlSession.commit();
        }else{
            System.out.println("更新数据失败");
        }

        // 使用完毕后,关闭SqlSession对象
        sqlSession.close();
    }

delete

根据id删除一个用户

1、在UserMapper接口中添加对应的方法

    // 删除一个用户
    int deleteUser(int userId);

2、在UserMapper.xml中添加insert语句

    <!--输入参数为基本数据类型,也可以省略不写-->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM user WHERE id = #{userId};
    </delete>

3、测试

@Test
public void deleteUser(){
    // 首先获得SqlSession对象
    SqlSession sqlSession = MyBatisTool.getSqlSession();
    // 通过SqlSession对象获取Mapper接口对象
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    // 调用mapper中的函数,执行sql

    int i = mapper.deleteUser(2);
    if(i == 1){
        System.out.println("删除数据成功");
        // 因为SqlSession默认关闭事务自动提交,因此删除数据成功后,我们需要手动提交事务,才能在数据库中完成插入
        sqlSession.commit();
    }else{
        System.out.println("删除数据失败");
    }

    // 使用完毕后,关闭SqlSession对象
    sqlSession.close();
}

模糊查询

在UserMapper接口中添加对应的方法

    // 模糊查询
    User getUserByLike(String s);

方法1:java代码中添加sql通配符

    <!--模糊查询-->
    <select id="getUserByLike" resultType="com.bg.pojo.User">
        SELECT * FROM user WHERE name LIKE #{s}
    </select>
    @Test
    public void getUserByLike(){
        // 首先获得SqlSession对象
        SqlSession sqlSession = MyBatisTool.getSqlSession();
        // 通过SqlSession对象获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用mapper中的函数,执行sql
        User user = mapper.getUserByLike("%张%");

        // 遍历结果,并输出
        System.out.println(user.toString());
        
        // 使用完毕后,关闭SqlSession对象
        sqlSession.close();
    }

方法2:在sql语句中拼接通配符

    <!--模糊查询-->
    <select id="getUserByLike" resultType="com.bg.pojo.User">
        SELECT * FROM user WHERE name LIKE "%"#{s}"%"
    </select>
    @Test
    public void getUserByLike(){
        // 首先获得SqlSession对象
        SqlSession sqlSession = MyBatisTool.getSqlSession();
        // 通过SqlSession对象获取Mapper接口对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        // 调用mapper中的函数,执行sql
        User user = mapper.getUserByLike("王");

        // 遍历结果,并输出
        System.out.println(user.toString());

        // 使用完毕后,关闭SqlSession对象
        sqlSession.close();
    }

小结:

  • 所有的增删改操作需要显示的提交事务,或者在获取SqlSession的时候显示指定开始事务自动提交。
  • 接口所有的普通参数,尽量写实@Param参数,显示声明参数名
  • 可以考虑使用map传递参数,方便、简单。
  • 为了规范操作,在SQL的配置文件中,我们尽量将Parameter参数和resultType都写上。
posted @ 2020-11-26 19:51  Zzb01  阅读(199)  评论(0)    收藏  举报