Mybatis

一、基本概念

1、什么是Mybatis

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

2、如何获得Mybatis?

3、什么是持久化

就是对数据进行持久化保存,把数据写入数据库,方便下次查询使用

为什么需要持久化?

有些用户数据或者交易记录这些数据需要再次使用的数据都要进行持久化存储

4、MyBatis 核心接口和类

二、使用过程

1、新建 Maven 工程,在pom.xml导入相关配置

  • mybatis
  • mysql
<dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.6</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version> </dependency> </dependencies>

2、在数据库新建数据表

CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `pwd` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

3、创建 MyBatis 的配置文件 mybatis-config.xml

  • Mysql数据库后接常规配置:?serverTimezone=UTC&amp;characterEncoding=utf8&amp;useSSL=true
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置Mybatis运行环境--> <environments default="development"> <environment id="development"> <!--配置JDBC事务管理--> <transactionManager type="JDBC"></transactionManager> <!--POODLE配置JDBC数据源连接池--> <dataSource type="POODLE"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&amp;characterEncoding=utf8&amp;useSSL=true"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> </configuration>

4、新建对应数据表的实体类

  • 实体类里每一个属性都要与数据库里的一致
public class User { private long id; private String username; private String password; private int age; }

5、新建 mapper 接口

  • 接口内可以编写需要实现对数据库进行操作的方法
public interface UserMapper { // 查询全部用户 List<User> getUserList(); // 根据ID查询用户 User gerUserById(int id); }

6、创建对应接口(类)的 Mapper.xml 配置文件(实现类)

  • namespace:绑定一个需要实现的Mapper接口
  • id:Mapper接口内需要实现的方法名
  • resultType:Sql语句执行的返回值类型
  • parameterType:传入参数的类型
<!--默认头部--> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--主体--> <mapper namespace="com.wnaoii.mapper.UserMapper"> <!--根据需要选择标签内编写sql--> <select id="getUserList" resultType="com.wnaoii.pojo.User"> <!--具体实现的sql--> select * from mybatis.user </select> <!--其他需要实现的sql--> <select id="gerUserById" resultType="com.wnaoii.pojo.User" parameterType="int"> select * from mybatis.user where id = #{id} </select> </mapper>

7、在之前创建的 MyBatis 配置文件中注册mapper

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--配置Mybatis运行环境--> <environments default="development"> <environment id="development"> <!--配置JDBC事务管理--> <transactionManager type="JDBC"></transactionManager> <!--POODLE配置JDBC数据源连接池--> <dataSource type="POODLE"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <!--在这里注册mapper.xml--> <mappers> <mapper resource="com/wnaoii/mapper/UserMapper.xml"></mapper> </mappers> </configuration>

可能出现的报错

  1. 没注册 mapper 会出现 org.apache.ibatis.binding.BindingException: Type interface com.wnaoii.dao.UserDao is not known to the MapperRegistry.错误

    解决办法:在 MyBatis 配置文件mybatis-congig.xml中注册 mapper

  2. java.io.IOException: Could not find resource mybatis-config.xml无法正常识别 mybatis-config.xml 文件

    解决办法:在 maven 工程的pom.xml中添加文件过滤

    <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> </resources> </build>

8、编写测试类

public class UserMapperTest { @Test public void test() { // 获得SqlSession对象 SqlSession sqlsession = MybatisUtils.getSqlsession(); // 获取接口对象 UserMapper mapper = sqlsession.getMapper(UserMapper.class); // 调用 mapper 接口内写好的实现方法 List<User> userList = mapper.getUserList(); // 循环打印输出 for (User user : userList) { System.out.println(user); } sqlsession.close(); } @Test public void gerUserById() { SqlSession sqlsession = MybatisUtils.getSqlsession(); UserMapper mapper = sqlsession.getMapper(UserMapper.class); User user = mapper.gerUserById(1); System.out.println(user); sqlsession.close(); } }

三、增删改查(CRUD)

  • 有了之前编写好的MyBatisUtils,之后的增删改查只需在原基础上进行稍加改动即可投入使用
  • 增、删、改都需要提交事务
  1. 编写接口

    public interface UserMapper { // 删除一个用户 int deletUser(int id); }
  2. 创建对应的Mapper.xml编写实现接口内定义方法的Sql语句

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.wnaoii.mapper.UserMapper"> <delete id="deletUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete> </mapper>
  3. 编写测试类测试

    public class UserMapperTest { @Test public void deletUser() { // 获得SqlSession对象 SqlSession sqlsession = MybatisUtils.getSqlsession(); // 获取接口对象 UserMapper mapper = sqlsession.getMapper(UserMapper.class); // 调用 mapper 接口内写好的实现方法 mapper.deletUser(2); // 提交事务(*重要*) sqlsession.commit(); sqlsession.close(); } }

1、增(Insert)

<insert id="addUser" parameterType="com.wnaoii.pojo.User"> insert into mybatis.user (id, username, pwd) values (#{id}, #{username}, #{pwd}); </insert>

2、删(Delete)

<delete id="deletUser" parameterType="int"> delete from mybatis.user where id = #{id}; </delete>

3、改(Update)

<update id="updateUser" parameterType="com.wnaoii.pojo.User"> update mybatis.user set username = #{username}, pwd = #{pwd} where id = #{id}; </update>

4、查(Select)

<select id="getUserList" resultType="com.wnaoii.pojo.User"> select * from mybatis.user; </select>

__EOF__

本文作者WNAOII
本文链接https://www.cnblogs.com/WNAOII/p/15696141.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   WNAOII  阅读(40)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示