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("666666@qq.com");
    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 优化要求比较高,或是项目需求或业务经常变动。


                                                                       公众号推荐:aFa攻防实验室

                         分享关于信息搜集、Web安全、内网安全、代码审计、红蓝对抗、Java、Python等方面的东西。

                                                                         

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值