MyBatis 增删改查基础

0x00:前言

以之前的文章 MyBatis 工作环境的搭建示例为基础,记以下 MyBatis 对数据库的 CURD 操作。

0x01:模糊查询

首先,需要在 sql 配置文件 UserMapper.xml 中配置相应的 sql 映射,代码如下:

<select id="findUserByUsername" parameterType="java.lang.String" resultType="cn.com.mybatis.pojo.User">
    SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>

其中,id 代表其 sql 被解析时的唯一标识。parameterType 代表 sql 中接收参数的类型。resultType 代表其结果类型,代码中指的是 User 的 JavaBean。
PS:对于 sql 中参数设置 ${} 代表是将字符串直接拼接到 sql 语句中,$ 符有 sql 注入的危险,如果不是必须,建议使用 #代替。因为需要在接收的值两边加上 % 做模糊查询,所以需要用 $ 符,这时的 #是不行的。# 会对接收的值做预编译处理,相当于传统 JDBC 中的? 占位符。

在测试类中添加如下代码进行测试:

@Test
public void TestFuzzySearch() throws IOException{
    SqlSession sqlSession = dataConn.getSqlSession();
    List<User> userList = sqlSession.selectList("test.findUserByUsername","三");
    for(int i = 0; i < userList.size(); i++){
        User user = userList.get(i);
        System.out.println("姓名:" + user.getUsername());
        System.out.println("性别:" + user.getGender());
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.err.println("生日:" + sdf.format(user.getBirthday()));
        System.out.println("所在地:" + user.getProvince() + user.getCity());
    }
    sqlSession.close();
}

代码中通过 sqlSession 的 selectList 方法来查询多条记录,第一个参数是 sql 映射文件中配置的 id 标识,第二个是查找的关键字,其运行结果如下:

0x02:新增数据

首先,需要在 sql 配置文件 UserMapper.xml 中配置相应的 sql 映射,代码如下:

<insert id="insertUser" parameterType="cn.com.mybatis.pojo.User">
    insert into user(username,password,gender,birthday,email,province,city)
    value(#{username},#{password},#{gender},#{birthday,jdbcType=DATE},#{email},#{province},#{city})    
</insert>

其中 id 代表其 sql 被解析时的唯一标识,parameterType 代表 sql 中接收参数的类型。因为是插入操作,所以没有 resultType 返回。
在测试类中添加如下代码进行测试:

@Test
public void TestInsert() throws Exception{
    SqlSession sqlSession = dataConn.getSqlSession();
    User user = new User();
    user.setUsername("小明");
    user.setPassword("666666");
    user.setGender("男");
    user.setEmail("[email protected]");
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    user.setBirthday(sdf.parse("1700-01-01"));
    user.setProvince("中国");
    user.setCity("香港");
    sqlSession.insert("test.insertUser",user);
    sqlSession.commit();
    sqlSession.close();
}

代码中通过 sqlSession 的 insert 方法来插入数据,第一个参数是 sql 映射文件中配置的 id 标识,第二个参数是要插入的对象。其运行结果如下:

0x03:删除数据

首先,需要在 sql 配置文件 UserMapper.xml 中配置相应的 sql 映射,代码如下:

<delete id="deleteUser" parameterType="java.lang.Integer">
    delete from user where id=#{id}
</delete>

其中 id 代表其 sql 被解析时的唯一标识,parameterType 代表 sql 中接收参数的类型。
在测试类中添加如下代码进行测试:

@Test
public void TestDelete() throws Exception{
    SqlSession sqlSession = dataConn.getSqlSession();
    sqlSession.delete("test.deleteUser",4);
    sqlSession.commit();
    sqlSession.close();
}

代码中通过 sqlSession 的 delete 方法来删除数据,其中第一个参数是 sql 映射文件中配置的 id 标识,第二个参数是传递的值内容,代码中代表要删除记录的 id 号,其运行结果如下:

0x04:修改数据

首先,需要在 sql 配置文件 UserMapper.xml 中配置相应的 sql 映射,代码如下:

<update id="updateUserName" parameterType="cn.com.mybatis.pojo.User">
    update user set username=#{username} where id=#{id}
</update>

其中 id 代表其 sql 被解析时的唯一标识,parameterType 代表 sql 中接收参数的类型。
在测试类中添加如下代码进行测试:

@Test
public void Testupdate() throws Exception{
    SqlSession sqlSession = dataConn.getSqlSession();
    User user = new User();
    user.setId(1);
    user.setUsername("张三2");
    sqlSession.update("test.updateUserName",user);
    sqlSession.commit();
    sqlSession.close();
}

代码中通过 sqlSession 的 update 方法来修改数据,其中第一个参数是 sql 映射文件中配置的 id 标识,第二个参数是传递的内容,代码中为 user 对象,其运行结果如下:

0x05:MyBatis 使用场景总结

对于 MyBatis,其 sql 语句重点是在 sql 映射配置文件中配置的,而 hibernate 的 sql 语句不需要开发人员完成,只需要调用相关 API 即可,在开发效率来说是有优势的,缺点是不能对 sql 语句进行优化和修改。而 MyBatis 可以自己配置 sql 语句,可以适应项目经常变化的需求。

所以,MyBatis 使用场景是:对 sql 优化要求比较高,或是项目需求或业务经常变动。


更多关于代码审计、WEB渗透、网络安全的运维的知识,请关注微信公众号:发哥微课堂。



猜你喜欢

转载自blog.csdn.net/fageweiketang/article/details/80726741