这篇文章,主要介绍如何通过MyBatis框架实现CRUD增删改查的功能。
目录
MyBatis作为一个持久层框架,那必然缺少不了对数据库的增删改查操作,下面介绍一下如何通过MyBatis实现增删改查的功能。
MyBatis提供了【
标签属性:
- id:唯一标识,这个id值必须和Mapper接口中方法名称相同(一个XML映射文件里面不能存在相同的id值)。
- parameterType:参数类型(这个用于指定方法的参数数据类型)。
- useGeneratedKeys:是否返回主键ID值(这个属性设置为true后,可以获取到数据库当前添加的数据主键ID值)。
- keyProperty:这个用于设置数据表中主键自动对应Java实体类中的哪个属性值。
- keyColumn:这个用于设置数据表中的主键字段名称。
- databaseId:指定数据库类型,在一个项目中存在多个数据库的时候,如果配置类databaseIdProvider,那么MyBatis可以自动选择执行哪个数据库类型的SQL语句。
- flushCache:是否刷新缓存。
上面几个属性是实际开发过程中比较常用的。
下面通过案例,看下如何插入数据到数据库里面,这里是通过Mapper接口和Mapper映射文件的方式来操作数据库。
- public interface UserMapper {
- /**
- * 添加数据
- * @param user
- * @return
- */
- int insertData(User user);
- }
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.demo.mapper.UserMapper">
-
-
- <insert id="insertData" parameterType="com.mybatis.demo.domain.User"
- useGeneratedKeys="true" keyProperty="id" keyColumn="id">
- insert into user (username, password)
- values (#{username}, #{password})
- insert>
-
- mapper>
- package com.mybatis.demo;
-
- import com.mybatis.demo.domain.User;
- import com.mybatis.demo.mapper.UserMapper;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.InputStream;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/8 20:32
- * @Description
- */
- public class InsertTest {
- public static void main(String[] args) throws IOException {
- // 1、加载配置文件
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- // 2、创建 SqlSessionFactoryBuilder 对象
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
- // 3、创建 SqlSessionFactory 对象
- SqlSessionFactory sqlSessionFactory = builder.build(is);
- // 4、创建 SqlSession 对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- // 5、获取 UserMapper 接口
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- // 6、调用插入方法
- User user = new User("mybatis", "123456");
- int res = userMapper.insertData(user);
- System.out.println("返回值是: res=" + res);
- // 8、提交事务
- sqlSession.commit();
- // 9、关闭流
- is.close();
- }
- }
注意:MyBatis默认是没有开启自动提交事务的,所以我们在插入数据之后,需要手动的提交事务,这样才能够在数据库中看到新插入的数据。
运行上面程序,查看数据库表中是否存在新插入的数据,以及控制台的返回值。

MyBatis中【
要获取插入数据的主键ID值,就可以利用MyBatis提供的【useGeneratedKeys】、【keyProperty】、【keyColumn】三个属性。
在新插入数据之后,mybatis会将生成的主键ID值通过反射机制赋值给实体类中对应的成员变量。

需要注意的是,必须在提交事务之后获取,不然获取不到主键ID。

MyBatis提供了【
标签属性:
- id:唯一标识,这个id值必须和Mapper接口中方法名称相同(一个XML映射文件里面不能存在相同的id值)。
- parameterType:参数类型(这个用于指定方法的参数数据类型)。
- databaseId:指定数据库类型,在一个项目中存在多个数据库的时候,如果配置类databaseIdProvider,那么MyBatis可以自动选择执行哪个数据库类型的SQL语句。
- flushCache:是否刷新缓存。
delete删除标签属性比较少。
- package com.mybatis.demo.mapper;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/7 15:14
- * @Description
- */
- public interface UserMapper {
-
- /**
- * 删除数据
- * @param id
- * @return
- */
- int deleteData(Integer id);
-
- }
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.demo.mapper.UserMapper">
-
-
- <delete id="deleteData" parameterType="java.lang.Integer">
- delete from user where id = #{id}
- delete>
-
- mapper>
- package com.mybatis.demo;
-
- import com.mybatis.demo.mapper.UserMapper;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.InputStream;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/8 21:04
- * @Description
- */
- public class DeleteTest {
- public static void main(String[] args) throws IOException {
- // 1、加载配置文件
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- // 2、创建 SqlSessionFactoryBuilder 对象
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
- // 3、创建 SqlSessionFactory 对象
- SqlSessionFactory sqlSessionFactory = builder.build(is);
- // 4、创建 SqlSession 对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- // 5、获取 UserMapper 接口
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- // 6、删除数据
- int res = userMapper.deleteData(3008);
- System.out.println("返回值: res=" + res);
- // 7、提交事务
- sqlSession.commit();
- // 8、关闭流
- is.close();
- }
- }
以上就是删除数据的操作,MyBatis中删除的时候,可以有一个int整数类型的返回值,这个整数表示受影响的记录数,也就是删除了多少条数据。
MyBatis提供了【
- package com.mybatis.demo.mapper;
-
- import com.mybatis.demo.domain.User;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/7 15:14
- * @Description
- */
- public interface UserMapper {
-
- /**
- * 更新数据
- * @param user
- * @return
- */
- int updateData(User user);
-
- }
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.demo.mapper.UserMapper">
-
-
- <update id="updateData" parameterType="com.mybatis.demo.domain.User"
- useGeneratedKeys="true" keyColumn="id" keyProperty="id">
- update user set username = #{username}, password = #{password}
- where id = #{id}
- update>
-
- mapper>
- package com.mybatis.demo;
-
- import com.mybatis.demo.domain.User;
- import com.mybatis.demo.mapper.UserMapper;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.InputStream;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/8 21:13
- * @Description
- */
- public class UpdateTest {
- public static void main(String[] args) throws IOException {
- // 1、加载配置文件
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- // 2、创建 SqlSessionFactoryBuilder 对象
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
- // 3、创建 SqlSessionFactory 对象
- SqlSessionFactory sqlSessionFactory = builder.build(is);
- // 4、创建 SqlSession 对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- // 5、获取 UserMapper 接口
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- // 6、调用更新方法
- User user = new User("test2022", "test2022");
- user.setId(3009);
- int res = userMapper.updateData(user);
- System.out.println("返回值是: res=" + res);
- // 7、提交事务
- sqlSession.commit();
- // 8、关闭流
- is.close();
- }
- }
运行上面代码,可以查看数据库中id=3009的这条数据记录的变化。

MyBatis中更新方法也是可以有一个int整数类型的返回值,这个整数表示受影响的记录数,也就是指更新了多少条数据。
MyBatis提供了【
- id:唯一标识,这个id值必须和Mapper接口中方法名称相同(一个XML映射文件里面不能存在相同的id值)。
- parameterType:参数类型(这个用于指定方法的参数数据类型)。
- resultType:返回结果类型(指定执行SQL语句之后的返回结果类型)。
- resultMap:返回结果映射类型(当数据库表字段和Java实体类字段不相同时候,可以通过这个进行关系映射)。
MyBatis框架中,最经常使用,也是实际开发过程里面使用最多的一个操作就是查询,查询通过【
- package com.mybatis.demo.mapper;
-
- import com.mybatis.demo.domain.User;
-
- import java.util.List;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/7 15:14
- * @Description
- */
- public interface UserMapper {
-
- /**
- * 查询数据库记录
- * @return
- */
- List
queryList(); - }
- mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.mybatis.demo.mapper.UserMapper">
-
- <select id="queryList" resultType="com.mybatis.demo.domain.User">
- select * from user
- select>
- mapper>
- package com.mybatis.demo;
-
- import com.mybatis.demo.domain.User;
- import com.mybatis.demo.mapper.UserMapper;
- import org.apache.ibatis.io.Resources;
- import org.apache.ibatis.session.SqlSession;
- import org.apache.ibatis.session.SqlSessionFactory;
- import org.apache.ibatis.session.SqlSessionFactoryBuilder;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.List;
-
- /**
- * @author ZhuYouBin
- * @version 1.0.0
- * @Date: 2022/8/12 20:22
- * @Description
- */
- public class QueryTest {
- public static void main(String[] args) throws IOException {
- // 1、加载配置文件
- InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
- // 2、创建 SqlSessionFactoryBuilder 对象
- SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
- // 3、创建 SqlSessionFactory 对象
- SqlSessionFactory sqlSessionFactory = builder.build(is);
- // 4、创建 SqlSession 对象
- SqlSession sqlSession = sqlSessionFactory.openSession();
- // 5、获取 UserMapper 接口
- UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
- // 6、执行查询
- List
list = userMapper.queryList(); - // 打印输出
- for (User user : list) {
- System.out.println(user);
- }
- // 7、关闭流
- is.close();
- }
- }
运行上面测试代码,控制台输出查询的结果:

以上,就是MyBatis实现增删改查相关的操作。
综上,这篇文章结束了,主要介绍如何通过MyBatis框架实现CRUD增删改查的功能。
【源代码地址:https://gitee.com/zhuyoubin/ssm_code/tree/master/mybatis/mybatis-demo02】