Mybatis学习_02_CRUD操作及配置分析

注意:namespace要与UserMapper接口一致,如下:

<mapper namespace="com.zhaolei.dao.UserMapper">

操作流程:UserMapper接口声明操作--->在UserMapper.xml编写SQL语句---->测试

1、select

1.1、在UserMapper里声明函数:

List<User> getUserList();

1.2、在UserMapper.xml文件里编写对应的代码:

<select id="getUserList" resultType="com.zhaolei.pojo.User">
    select * from mybatis.user
</select>

1.3、测试

@Test
public void test(){
    //第一步:获得SqlSession对象
    SqlSession sqlSession= MybatisUtils.getSqlSession();

    UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
    List<User> userList= userMapper.getUserList();
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();

}

2、insert

2.1、在UserMapper里声明函数:

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

2.2、在UserMapper.xml文件里编写对应的代码:

<insert id="addUser" parameterType="com.zhaolei.pojo.User">
    insert into mybatis.user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>

1.3、测试

public void addUser(){
    SqlSession sqlSession= MybatisUtils.getSqlSession();

    UserMapper Mapper=sqlSession.getMapper(UserMapper.class);
    int user = Mapper.addUser(new User(4, "李艳丽", "123987"));
    sqlSession.commit();
    sqlSession.close();

}

3、update

3.1、在UserMapper里声明函数:

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

3.2、在UserMapper.xml文件里编写对应的代码:

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

3.3、测试

public void updateUser(){
    SqlSession sqlSession= MybatisUtils.getSqlSession();

    UserMapper Mapper=sqlSession.getMapper(UserMapper.class);
    int user = Mapper.updateUser(new User(4, "李艳丽", "123111"));
    sqlSession.commit();
    sqlSession.close();

}

4、delete

4.1、在UserMapper里声明函数:

//删除用户
int deleteUser(int id);

4.2、在UserMapper.xml文件里编写对应的代码:

<delete id="deleteUser" parameterType="int">
    delete from mybatis.user where id=#{id}
</delete>

4.3、测试

public void deleteUser(){
    SqlSession sqlSession= MybatisUtils.getSqlSession();

    UserMapper Mapper=sqlSession.getMapper(UserMapper.class);
    int user = Mapper.deleteUser(2);
    sqlSession.commit();
    sqlSession.close();
}

注:增删改都需要提交事务(sqlSession.commit();),否则数据库不会改变!!!

5、Map

如果数据库中的表格中的字段十分多,当我们对其中一些字段进行操作时,使用上述的四种方法就会极其繁琐,这时引入了Map,使用map可以对数据的某些字段进行操作,更符合实际情况。

5.1、在UserMapper里声明函数:

// 使用Map实现根据ID查询用户
User getUserByID2(Map<String,Object> map);

5.2、在UserMapper.xml文件里编写对应的代码:

    <select id="getUserByID2" parameterType="map" resultType="com.zhaolei.pojo.User">
        select * from mybatis.user where id=#{userid}
    </select>

5.3、测试

public void getUserByID2(){
    SqlSession sqlSession= MybatisUtils.getSqlSession();
    UserMapper Mapper=sqlSession.getMapper(UserMapper.class);
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("userid","1");   // 这里可以对Map进行操作
    User user = Mapper.getUserByID2(map);
    System.out.println(user);
    sqlSession.close();
}

6、模糊查询(like)

  • 方法一:
//模糊查询,查询姓"赵"的用户
List<User> getUserList2(Map<String,Object> map);
<select id="getUserList2" parameterType="map" resultType="com.zhaolei.pojo.User">
    select * from mybatis.user where name like #{username}
</select>
public void getUserList2(){
    //第一步:获得SqlSession对象
    SqlSession sqlSession= MybatisUtils.getSqlSession();
    UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("username","%赵%");   //注意"赵"左右的%%
    List<User> userList= userMapper.getUserList2(map);
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();
}
  • 方法二(在sql语句中拼接通配符,会引起sql注入
//模糊查询,查询姓"赵"的用户
List<User> getUserList2(Map<String,Object> map);
<select id="getUserList2" parameterType="map" resultType="com.zhaolei.pojo.User">
    select * from mybatis.user where name like '%${username}%'  //在sql语句中拼接通配符,会引起sql注入
</select>
public void getUserList2(){
    //第一步:获得SqlSession对象
    SqlSession sqlSession= MybatisUtils.getSqlSession();
    UserMapper userMapper =sqlSession.getMapper(UserMapper.class);
    Map<String,Object> map=new HashMap<String,Object>();
    map.put("username","赵");
    List<User> userList= userMapper.getUserList2(map);
    for (User user : userList) {
        System.out.println(user);
    }
    sqlSession.close();
}

注意:方法一与方法二like后的表述,方法一like后是#{username} ,而方法二like后是'%${username}%' ,这里不能使用 # 代替

总结:

  1. 所有的增删改操作都需要提交事务!
  2. 接口所有的普通参数,尽量都写上@para参数,尤其是多个参数时,必须写上。
  3. 字段较多时可以考虑使用map来处理!
  4. 在SQL的配置文件中,尽量将parameter和resultType都写上!
posted @ 2023-03-02 17:09  ZLey  阅读(9)  评论(0编辑  收藏  举报