MyBatis快速入门(四):MyBatis单表之删、改、查

删除操作

在持久层接口(UserDao)中添加删除方法,如下:

/**
 * 删除用户
 * @param id
 */
void deleteUser(int id);

在UserDao接口的映射配置文件中添加如下内容:

<!--删除用户-->
<delete id="deleteUser" parameterType="java.lang.Integer">
    delete from user where id=#{uid}
</delete>

注意: 该标签和insert处于同一层级,当只有一个参数且为基本数据类型时,#{}中的内容可以随便写(相当于一个占位符),如deleteUser方法中的参数为id,这里可以写uid,iid等等都可以。

在测试类中添加如下测试方法,运行该测试方法即可看到效果:

/**
 * 测试删除用户
 */
@Test
public void testDelete() {
    userDao.deleteUser(50);
}

更新(修改)操作

在持久层接口(UserDao)中添加修改方法,如下:

/**
 * 更新用户
 * @param user
 */
void updateUser(User user);

在UserDao接口的映射配置文件中添加如下内容:

<!--更新用户-->
<update id="updateUser" parameterType="com.zfnotes.beans.User">
    update user set username=#{username}, sex=#{sex}, address=#{address}, birthday=#{birthday} where id=#{id};
</update>

在测试类中添加如下测试方法,运行该测试方法即可看到效果:

/**
 * 测试更新
 */
@Test
public void testUpdate() {
    User user = new User();
    user.setId(50);
    user.setUsername("六六");
    user.setAddress("河南省");
    user.setSex("女");
    user.setBirthday(new Date());
    userDao.updateUser(user);
}

根据id(主键值)查询用户

在持久层接口(UserDao)中添加根据id(主键值)查询用户的方法,如下:

/**
 * 根据id查询用户
 * @param id
 */
User findById(int id);

在UserDao接口的映射配置文件中添加如下内容:

<!--根据id查询用户-->
<select id="findById" resultType="com.zfnotes.beans.User">
    select * from user where id=#{id};
</select>

在测试类中添加如下测试方法,运行该测试方法即可看到效果:

/**
 * 测试根据id查询User
 */
@Test
public void testFindById() {
    User user = userDao.findById(41);
    System.out.println(user);
}

模糊查询

模糊查询username中包含字的用户信息

方式一

在持久层接口(UserDao)中添加模糊查询方法,如下:

/**
 * 根据名称模糊查询
 * @param username
 * @return
 */
List<User> findByName(String username);

在UserDao接口的映射配置文件中添加如下内容:

<!--根据名称模糊查询-->
<select id="findByName" parameterType="string" resultType="com.zfnotes.beans.User">
    select * from user where username like #{name};
</select>

在测试类中添加如下测试方法,运行该测试方法即可看到效果:

/**
 * 测试根据名称模糊查询
 */
@Test
public void testFindByName() {
    List<User> users = userDao.findByName("%王%");
    for (User user: users){
        System.out.println(user);
    }
}

方式二

持久层接口(UserDao)中内容不变,将UserDao接口的映射配置文件中的内容修改成如下内容:

<!--根据名称模糊查询-->
<select id="findByName" parameterType="string" resultType="com.zfnotes.beans.User">
    select * from USER where username like '%${value}%';
</select>

将测试类中的内容修改如下:

/**
 * 测试根据名称模糊查询
 */
@Test
public void testFindByName() {
    List<User> users = userDao.findByName("王");
    for (User user: users){
        System.out.println(user);
    }
}

两种方式的区别(推荐使用第一种)

  • 第一种使用PreparedStatement的参数占位符,#{}中的内容随意填写,只起占位作用。由于没有在sql语句中写%,所以传参时要携带%,当然也可以将sql语句该为select * from user where username like '%' #{name} '%',此时就不需要在传参时携带%了。注意%#{}要有空格,表示字符串拼接。
  • 第二种方式是字符串拼接SQL语句,注意${}中的内容只能写value。这种方式可能会造成SQL注入

使用聚合函数

在持久层接口(UserDao)中添加查询用户总数的方法,如下:

/**
 * 查询总用户数
 * @return
 */
int findTotal();

在UserDao接口的映射配置文件中添加如下内容:

<!--查询总用户数-->
<select id="findTotal" resultType="int">
    select count(*) from USER;
</select>

在测试类中添加如下测试方法,运行该测试方法即可看到效果:

/**
 * 测试查询总用户数
 */
@Test
public void testFindTotal() {
    System.out.println("用户总数为: "+userDao.findTotal());

}

使用包装对象传递查询条件

新建MyQuery类,将User类型的对象引用作为其中一个属性,内容如下:

package com.zfnotes.beans;

public class MyQuery {
    private User user;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}

在持久层接口(UserDao)中添加查询方法如下:

/**
 * 根据MyQuery中的条件查询用户
 * @param mq
 * @return
 */
List<User> findUserByMq(MyQuery mq);

在UserDao接口的映射配置文件中添加如下内容,user.username使用的是OGNL表达式:

<!--根据queryVo中的条件查询用户-->
<select id="findUserByMq" resultType="com.zfnotes.beans.User">
    select * from USER where username=#{user.username};
</select>

在测试类中添加如下测试方法,运行该测试方法即可看到查询成功:

/**
 * 测试使用MyQuery作为查询条件
 */
@Test
public void testFindByMq() {
    MyQuery mq = new MyQuery();
    User user = new User();
    user.setUsername("王二");
    mq.setUser(user);
    List<User> users = userDao.findUserByMq(mq);
    for (User u:users){
        System.out.println(u);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值