Mybatis之增删改查

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加

Mybatis之增删改查


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

好的,以下是为你生成的生成 Mybatis 之增删改查博客的前言:

在当今的软件开发领域,Java 仍然是最受欢迎和广泛使用的编程语言之一。而在 Java Web 开发中,MyBatis 是一个非常流行的 ORM(对象关系映射)框架,它简化了数据库操作,提高了开发效率。

在这篇博客中,我将详细介绍如何使用 MyBatis 实现增删改查操作。我们将从 MyBatis 的基础知识开始,逐步引导你完成一个完整的示例项目,涵盖了增加、删除、修改和查询数据的常见操作。

通过学习本博客,你将了解到如何使用 MyBatis 创建映射文件、配置数据源以及编写 SQL 查询语句。

无论你是刚刚开始学习 MyBatis,还是已经有一定经验的开发人员,这篇博客都将为你提供有用的指导和实践经验。让我们一起开始使用 MyBatis 进行高效、灵活的数据库操作吧!


提示:以下是本篇文章正文内容,下面案例可供参考

一、MyBatis新增

1.在持久层添加新增方法

java 复制代码
void add(User user);

2.在UserMapper.xml映射文件添加标签

xml 复制代码
<insert id="add" parameterType="com.zhangsan.pojo.User">
   insert into user(username,sex,address) values(#{username},#{sex},#{address})
</insert>

注意:添加方法的标签为insert

3.测试编写方法

java 复制代码
@Test
public void testAdd() throws Exception {
  InputStream is= Resources.getResourceAsStream("SqlMapConfig.xml");
  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  SqlSessionFactory factory = builder.build(is);
  SqlSession session = factory.openSession();
  UserMapper userMapper = session.getMapper(UserMapper.class);
  User user = new User("程序员", "男", "上海");
  userMapper.add(user);
  // 提交事务
  session.commit();
  session.close();
  is.close();
}

注意:MyBatis事务默认手动提交,所以在执行完增删改方法后,需要手动调用SqlSession对象的事务提交方法,否则数据库将不发生改变。

二、MyBatis修改

1.在持久层添加新增方法

java 复制代码
void update(User user);

2.在UserMapper.xml映射文件添加标签

java 复制代码
<update id="update" parameterType="com.zhangsan.pojo.User">
   update user
   set username = #{username},
   sex    = #{sex},
   address=#{address}
   where id = #{id}
</update>

注意:添加方法的标签为update

3.优化测试类,编写测试方法

我们发现MyBatis的测试方法在操作数据库前都需要获取代理对象,操作数据库后都需要释放资源,可以利用Junit的前置后置方法,优化测试类代码。

java 复制代码
InputStream is = null;
SqlSession session = null;
UserMapper userMapper = null;

@Before
public void before() throws IOException {
  // (1)读取核心配置文件
  is = Resources.getResourceAsStream("SqlMapConfig.xml");
  // (2)创建SqlSessionFactoryBuilder对象
  SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
  // (3)SqlSessionFactoryBuilder对象获取SqlSessionFactory对象
  SqlSessionFactory factory = builder.build(is);
  // (4)SqlSessionFactory对象获取SqlSession对象
  session = factory.openSession();
  // (5)获取代理对象
  userMapper = session.getMapper(UserMapper.class);
}

@After
public void after() throws IOException {
  // 释放资源
  session.close();
  is.close();
}
java 复制代码
@Test
public void testUpdate(){
  User user = new User(8,"程序员1","女","深圳");
  userMapper.update(user);
  session.commit();
}

三、MyBatis删除

1.在持久层添加新增方法

java 复制代码
void delete(int userId);

2.在UserMapper.xml映射文件添加标签

xml 复制代码
<delete id="delete" parameterType="int">
   delete from user where id = #{id}
</delete>

注意:添加方法的标签为delete

3.编写测试方法

java 复制代码
@Test
public void testDelete(){
  userMapper.delete(8);
  session.commit();
}

四、MyBatis查询

根据ID查询

1.在持久层添加新增方法

java 复制代码
User findById(int userId);

2.在UserMapper.xml映射文件添加标签

xml 复制代码
<select id="findById" parameterType="int" resultType="com.zhangsan.pojo.User">
   select * from user where id = #{userId}
</select>

3.编写测试方法

java 复制代码
@Test
public void testFindById(){
  User user = userMapper.findById(1);
  System.out.println(user);
}

模糊查询

1.在持久层添加新增方法

java 复制代码
List<User> findByLike(String username);

2.在UserMapper.xml映射文件添加标签

xml 复制代码
<select id="findByLike" parameterType="string" resultType="com.itbaizhan.user.User">
   select * from user where username like #{name}
</select>

3.编写测试方法

java 复制代码
@Test
public void testFindByNameLike(){
  List<User> users = userMapper.findByNameLike("%王%");
  for (User user:users){
    System.out.println(user);
   }
}

但是,userMapper.findByNameLike("%王%");这样写非常的不美观,如果使用#还不想在调用方法的参数中添加%,可以使用bind标签,bind标签允许我们在 Sql语句以外创建一个变量,并可以将其绑定到当前的Sql语句中,还可以有效的解决sql注入的问题。用法如下:

xml 复制代码
<select id="findByUsernameLike" parameterType="string" resultType="com.zhangsan.pojo.User">
  <bind name="likeName" value="'%'+username+'%'"/>
   select * from user where username like #{likeName}
</select>

测试方法:

java 复制代码
@Test
public void testFindByNameLike(){
  List<User> users = userMapper.findByNameLike("王");
  for (User user:users){
    System.out.println(user);
   }
}

分页查询

在接口方法的参数列表中通过@Param定义参数名称,在Sql语句中通过注解中所定义的参数名称指定参数位置。此方式参数比较直观的,推荐使用。

1.持久层接口方法

java 复制代码
List<User> findPage1(@Param("startIndex") int startIndex, @Param("pageSize")int pageSize);

2.在UserMapper.xml映射文件添加标签

xml 复制代码
<select id="findPage1" resultType="com.itbaizhan.mapper.User">
  select * from user limit #{startIndex},#{pageSize}
</select>

3.编写测试方法

java 复制代码
@Test
public void testFindPage1(){
  List<User> users = userMapper.findPage1(3,3);
  users.forEach(System.out::println);
}

总结

提示:这里对文章进行总结:

在这篇博客中,我们深入探讨了如何使用 MyBatis 进行数据库的增删改查操作。通过详细的示例和解释,我们了解了 MyBatis 的核心概念和工作原理。

首先,我们学习了如何使用 MyBatis 创建映射文件,将数据库表与 Java 对象进行关联。然后,我们通过编写 SQL 查询语句和对应的 Java 方法,实现了增加、删除、修改和查询数据的功能。

在示例项目中,我们涵盖了常见的增删改查操作,包括插入新记录、删除现有记录、更新记录的字段值以及根据条件查询数据。我们还学习了如何处理结果集,以及如何使用 MyBatis 的参数传递机制。

通过学习和实践,我们掌握了使用 MyBatis 进行数据库操作的基本技能。MyBatis 提供了一种简洁而高效的方式来与数据库交互,使我们的开发工作更加便捷和高效。

希望这篇博客对你有所帮助,如果你有任何问题或需要进一步了解 MyBatis,请随时留言。

相关推荐
为将者,自当识天晓地。18 分钟前
c++多线程
java·开发语言
daqinzl26 分钟前
java获取机器ip、mac
java·mac·ip
激流丶41 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
时差9531 小时前
【面试题】Hive 查询:如何查找用户连续三天登录的记录
大数据·数据库·hive·sql·面试·database
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
秋意钟1 小时前
MySQL日期类型选择建议
数据库·mysql
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法
Heavydrink2 小时前
HTTP动词与状态码
java