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渗透、网络安全的运维的知识,请关注微信公众号:发哥微课堂。