栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis增删改查快速上手

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis增删改查快速上手

作为一个快乐的小码农,在每一个阶段往往都在重复写着不同版本的,学生管理,用户管理,注册登录,从 JavaSE 的控制台版,或者 GUI 版,再到 JavaWeb的 JSP版,再到纯粹使用 HTML 作为前端展示的版本,以及使用一个更新的技术,在此其中,我们用过 txt 做数据库,用 XML 也可以,到现在常用的 MySQL,增删改查一直是我们必不可少的一部分内容,即使你不懂原理,即使你对这个技术的理解不是很深刻,拿出你的增删改查,噼里啪啦就是一段乱敲,好歹还是能让你着手先做起来(当然,对技术的理解还是很重要的),今天就和大家聊一聊 MyBatis 这门技术的 CURD (增删改查)

优化测试方法

在测试方法中,读取配置文件,生产 SqlSession,释放资源等等,在每一测试方法的时候,都是重复的,所以我们完全可以提出出这一部分,防止大量的重复代码

@Before
  public void init() throws Exception{
    //读取配置文件
    inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
    //创建SqlSessionFactory工厂
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);

    //使用工厂生产SqlSession对象
    sqlSession= factory.openSession();
    //使用SqlSession创建Mapper接口的代理对象
    userMapper = sqlSession.getMapper(UserMapper.class);
  }
 @After
  public void destroy() throws Exception{
    sqlSession.close();
    inputStream.close();
  }

在这两个方法上增加 @Before 和 @Aftrer 注解,就可以保证,init() 和 destory() 这两个方法,分别在我们真正被测试的方法的前后执行

(一) 增添操作 (1) 编写代码

首先,在 UserMapper 接口中 增加对应的方法

public interface UserMapper {
  
  void addUser(User user);
}

接着,在SQL映射文件中,增加新增的映射配置,这些有关内容放在 标签对中,具体代码如下


  insert intouser(username,telephone,birthday,gender,address)values(#{username},#  {telephone},#{birthday},#{gender},#{address})

(2) 说明:

1、id 属性,自然是对应的方法名,而由于这里,我们并不需要拿到返回信息,所以这里并没有返回参数 resultType,而方法中的参数又为一个 JavaBean 类,也就是User实体类,所以需要在标签属性中,添加一个 parameterType 属性,其中需要指定这个实体类

2、在文本中书写插入的SQL语句,由于实体类中已经快捷生成了对应的 get set 方法,所一可以使用 #{}的方式代表对应的值

3、提示,数据库中id为自增,所以并不需要设置 id

(3) 注意:

由于添加是更新类的语句,所以在执行插入语句后,需要提交事务,也就是执行对应的 commit方法,以提交更新操作,若没有这一句,即使不会报错,也无法正常存入,会被回滚,且这个id被占用

(4) 测试代码:


  @Test
  public void testUpdateUser() throws Exception{
    User user = new User();
    user.setId(17);
    user.setUsername("修改");
    user.setTelephone("18899999999");
    user.setBirthday(new Date());
    user.setGender("女");
    user.setAddress("广州");

    //执行方法
    userMapper.updateUser(user);

  }

(5) 执行结果:

控制台:

(6) 获取新增用户的id值

首先对于 MySQL自增主键来说,在执行 insert语句之前,MySQL 会自动生成一个自增主键,insert执行后,通过 SELECT LAST_INSERT_ID() 可以获取这条刚插入记录的自增主键

在 SQL 映射配置文件中,需要借助 标签,有一个属性比较特殊,order 属性,它代表着相对于插入操作的执行时间,before-之前,after-之后

注:该标签插入到


  SELECT LAST_INSERT_ID();

测试一下

@Test
public void testAddUser() throws Exception{
  User user = new User();
  user.setUsername("增加");
  user.setTelephone("12266660000");
  user.setBirthday(new Date());
  user.setGender("男");
  user.setAddress("珠海");
  System.out.println("执行插入前" + user);
  //执行方法
  userMapper.addUser(user);
  System.out.println("执行插入后" + user);
}

执行效果

(二) 修改操作 (1) 编写代码

在 UserMapper 接口中增加修改方法

public interface UserMapper {
  
  void updateUser(User user);
}

在 SQL 映射文件中增加语句,内容包括在 中,需要注意的基本与添加操作是一致的


  update user set username=#{username},telephone=#{telephone},birthday=#{birthday},gender=#{gender},address=#{address} where id=#{id}

(2) 测试代码


  @Test
  public void testAddUser() throws Exception{
    User user = new User();
    user.setUsername("增加");
    user.setTelephone("12266668888");
    user.setBirthday(new Date());
    user.setGender("女");
    user.setAddress("成都");

    //执行方法
    userMapper.addUser(user);

  }

(3) 执行效果

(三) 删除操作 (1) 编写代码

接口中增加删除方法

public interface UserMapper {
  
  void deleteUser(Integer uid);
}

在SQL映射文件中,使用 标签对进行内容的书写,需要注意的是,由于我们传入的参数是一个 Integer类型的用户id,所以参数类型的值为 parameterType


  delete from user where id=#{id}

(2) 测试代码


@Test
public void testDeleteUser() throws Exception{
  //执行方法
  userMapper.deleteUser(17);
}

(3) 执行效果

(四) 模糊查询

由于查询全部非常简单,这里就不展示了,基本流程都是一样的

(1) 编写代码

在 UserMapper 接口中编写方法

public interface UserMapper {
  
  List findByName(String username);
}

在 SQL 映射文件中新增查询语句


在QueryUserVo 中,封装的是查询信息的各种对象,为什么上述代码可以直接通过 userInstance.gender 直接取出对应的属性,这种方式叫做 OGNL 表达式,在类中 我们的写法通常是 user.getUsername 但在写法上,OGNL 表达式将get给省略了

(3) 测试代码


@Test
public void testFindUserByVo() throws Exception{
  //创建包装对象,设置查询条件
  QueryUserVo queryUserVo = new QueryUserVo();
  UserInstance userInstance = new UserInstance();
  userInstance.setGender("女");
  userInstance.setUsername("%张%");
  queryUserVo.setUserInstance(userInstance);

  //调用 UserMapper 的方法
  List userInstances 
     = userMapper.findUserByVo(queryUserVo);
  for (UserInstance u : userInstances){
    System.out.println(u);
  }
}

(4) 执行效果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/135302.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号