MyBatis 的介绍及简单功能的实现与演示

1. 什么是 MyBatis

  MyBatis 是一款非常好的持久层框架, 它支持自定义 SQL、存储过程以及高级映射。MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象) 为数据库中的记录。简单来说 MyBatis 是更简单完成程序和数据库交互的工具,也就是更简单的操作和读取数据库工具。
  其中这个存储过程就类似于方法, 里面有很多条 SQL 语句, 最终目的就是为了达成一个功能, 这个也有很多缺点, 比如说操作难度大, 不支持调试, 又因为可能 SQL 语句太多, 导致修改和扩展难度很大,基于这些缺点, 存储过程这个功能用的较少。而高级映射是 MyBatis 最核心的功能。我们可以从下面这段话来理解高级映射之于 MyBatis 以及用户的重要性:
  MyBatis 也是一个 ORM 框架, ORM(Object Relational Mapping),即对象关系映射。在面向对象编程语言中, 将关系型数据库中的数据与对象建立起映射关系,进而自动的完成数据与对象的相互转换:

  1. 将传入数据(传入对象) + SQL 映射成原生 SQL
  2. 将结果集映射为返回对象,即输出对象。
    ORM 把数据库映射为对象:
     ● 数据库表(table)–> 类(class)
     ● 记录(record,行数据)–> 对象(object)
     ● 字段(field) --> 对象的属性(attribute)
    一般的 ORM 框架,会将数据库模型的每张表都映射为一个 Java 类。也就是说使用 MyBatis 可以像操作对象一样来操作数据库中的表,可以实现对象和数据库表之间的转换。

2. 添加 MyBatis 框架

有两种情况,一种是对之前已有的 Spring 项目进行添加;另一种就是擦黄建一个新的 MyBatis 和 Spring Boot 的项目。

2.1 老项目添加 MyBatis

首先没有添加之前,项目是正常运行的, 如下所示:
在这里插入图片描述
然后添加依赖:
在这里插入图片描述
注意,这里要添加两个依赖, 除了 MyBatis Framework 之外, 还需要添加对应数据库的Driver(驱动),比如的用的是 MySQL,那么我就还需要添加 MySQL Driver 的依赖。

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

2.2 新项目添加 MyBatis

在这里插入图片描述
在这里插入图片描述
就是在创建 Spring Boot 项目时,添加 MyBatis Framework 和 MySQL Driver 的依赖。创建Spring Boot 项目的详细介绍,可以看看这篇文章:http://t.csdn.cn/I0c08。
此时创建成功之后,点击运行,这时候会报错,正常情况下报的应该是这样的错:
在这里插入图片描述
报了这个 error,说明你成功了。原因也很简单,就是因为你添加了MySQL Driver 这个依赖后,启动项目就会连接数据库,但是我们并没有告诉项目到底连接哪个项目,那么下一步就是要配置数据库的连接信息。

3. 配置数据库的连接信息

3.1 数据库连接配置

如果你用的配置文件是application.properties,那么这么写:

# 其中的细节方面,按自己的来
spring.datasource.url=jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=1234
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

此时再次启动项目就可以运行成功了:
在这里插入图片描述
如果配置文件是application.yml,则这么写:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver

3.2 配置 MyBatis 中的 XML 路径

在这里插入图片描述
在这里插入图片描述
后面的 *Mapper 表示这个 mybatis 文件夹里的所有xxxMapper.xml 文件。
到了这一步就代表环境配置已经搞好了。

4. 添加业务代码

首先我们将代码分层管理,在demo路径下创建如下几个包:controller(控制层)、service(服务层)、mapper(持久层)、entity(实体类)。这几个包必须和启动类放在一个目录下。
在这里插入图片描述

4.1 创建实体类

我们可以先在 entity 中先写一个实体类,这个实体类对应着数据库中的一张表,所以说类名最好和表名相同,比如我数据库中的表有这些:
在这里插入图片描述
那么对应着表 userinfo,我在 entity 中创建了类名为 Userinfo 的类,类中的属性也要与表里的字段一致,我的 userinfo 表里的字段有:
在这里插入图片描述
于是我的 Userinfo 类中的属性就声明为:

@Data
public class Userinfo {
    private int id;
    private String username;
    private String password;
    private String photo;
    private LocalDateTime createtime;
    private LocalDateTime updatetime;
    private int state;
}

此时,我们就成功创建了一个实体类

4.2 构建 Mapper 层的代码实现(接口 + XML)

(1)先创建接口

在这里插入图片描述
这里的接口需要加 @Mapper 注解, 目的是让当前接口随 Spring 的创建而加载。我们在这个接口抽象出的功能就是根据 Id 查找 Userinfo 对象。

@Mapper 
public interface UserMapper {
    Userinfo getUserById(Integer id);
}

(2)创建 XML 实现

这里的 XML 文件一定和上面的配置里的路径一致,我们这里就是要放在 mybatis 文件下, 且文件名以 Mapper结束:
在这里插入图片描述
这里的 XML 的作用就是实现上述接口,起到 java 中的类的作用。
在这里插入图片描述
此时 xml 文件里的内容不用记,也不好记,建议把模板保存到一个可以随时找到的地方

<?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.example.ssmdemo.mapper.UserMapper">

</mapper>

需要注意的是这里的 namespace 与自己的文件路径对应:
在这里插入图片描述
此时就把这个 xml 与上面的 mapper 中的 接口连接起来了(此时映射关系以及有了,但是方法还未实现)。然后就开始实现方法,这个方法的效果是查询,所以我们这个时候就得利用 MyBatis 提供的 select 标签, id 里就填方法名,除此之外,这个方法还有返回值类型(Userinfo),我们在 resultType 中填写对应的全路径(包名 + 接口名),我这里的路径是 “com.example.ssmdemo.entity.Userinfo”。形参我们用 ${} 的方式将接口中的参数添加进去 :

<mapper namespace="com.example.ssmdemo.mapper.UserMapper">

    <select id="getUserById" resultType="com.example.ssmdemo.entity.Userinfo">
        select * from userinfo where id = ${id}
    </select>

</mapper>

在这里插入图片描述
大部分情况这样写就行了,但是也有一些环境里是不认这个 id 的,此时你就要严谨一些,在接口方法的参数列表里加上 @Param 标签,在里面把 key 设置为对应的参数变量名即可,这里 key 要和 xml 标签中的 key 一致(相对应),比如我们 xml 中的 key 设为了 id, 那么注解里的 key 也必须设置为 id,此时形参变量名的 id 就不重要了:
在这里插入图片描述
在这里插入图片描述

4.3 实现 service 层

首先就是进 @Autowired 注解进行属性注入,然后调用接口实现类的方法,此时我们的方法就是根据 id 得到对象, 所以我们就这么写即可:

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public Userinfo getUserById(Integer id){
        return userMapper.getUserById(id);
    }

}

此时 service 也就写完了。

4.4 实现 controller 层

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/byid")
    public Userinfo getUserById(Integer id){
        if(id == null){
            return null;
        }

        return userService.getUserById(id);
    }

}

5. 运行该项目

在这里插入图片描述
成功。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
批量添加数据可以借助MyBatis、Servlet和Tomcat来实现。下面是一个简单的示例代码: 1. 首先,创建一个数据访问层(DAO)接口和对应的实现类,使用MyBatis进行数据库操作。在接口中定义添加数据的方法,实现类中实现具体的逻辑。 ```java // UserDao.java public interface UserDao { void batchInsert(List<User> userList); } // UserDaoImpl.java public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } @Override public void batchInsert(List<User> userList) { try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); for (User user : userList) { userMapper.insert(user); } sqlSession.commit(); } } } ``` 2. 创建一个Servlet类,用于接收前端请求并调用DAO层的方法进行批量添加。 ```java // BatchInsertServlet.java public class BatchInsertServlet extends HttpServlet { private UserDao userDao; @Override public void init() { SqlSessionFactory sqlSessionFactory = MyBatisUtil.getSqlSessionFactory(); userDao = new UserDaoImpl(sqlSessionFactory); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 从请求中获取待添加的数据 List<User> userList = extractUserListFromRequest(request); // 调用DAO层的批量添加方法 userDao.batchInsert(userList); // 返回添加成功的信息 response.getWriter().println("Batch insert success"); } // 从请求中提取待添加的数据 private List<User> extractUserListFromRequest(HttpServletRequest request) { // 解析请求参数,构造User对象的列表 // ... } } ``` 3. 在web.xml中配置Servlet。 ```xml <!-- web.xml --> <web-app> <servlet> <servlet-name>BatchInsertServlet</servlet-name> <servlet-class>com.example.BatchInsertServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>BatchInsertServlet</servlet-name> <url-pattern>/batchInsert</url-pattern> </servlet-mapping> </web-app> ``` 4. 部署到Tomcat服务器上,并通过HTTP请求访问该Servlet。 ```bash POST http://localhost:8080/your-web-app-context/batchInsert ``` 以上示例代码演示了如何使用MyBatis、Servlet和Tomcat实现批量添加数据的功能具体的数据库操作和请求参数解析等细节需要根据实际需求进行实现和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想菜的鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值