MyBatis环境搭建以及简单案例运行

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


前言

MyBatis 开发环境配置


1.MyBatis 概述

1.1 MyBatis特点

  • 半自动ORM(Object Relation Mapping)框架,对比Hibernate全自动,MyBatis的sql语句还是要求自己写,效率不如Hibernate(也不一定)但是性能提高
  • 用简单的xml或者注解来配置接口以及pojo与数据库记录的对应关系
  • 支持定制化sql,存储过程以及高级映射
  • 避免了JDBC的繁琐代码

1.2 Mybatis开发环境配置以及项目创建

MyBatis下载链接,下载zip包即可,里面包含pdf文档,其中一部分介绍了环境配置。
Mybatis 在ssm可以大致概括为JDBC的封装,是对数据库进行CRUD操作。这里主要采用的是Maven项目的方式,当然你可以单独导入jar包,但是Maven无论是管理还是下载都更为方便。

  • Maven项目创建

新建Maven项目,Archetype选择quickstart,我初始创建出来的目录是这样的,缺少resource 资源文件,分别为其创立resource资源文件即可。方法为点击main->新建目录->命名resources->标记为resources资源文件。第四步如果是idea,可能会有提示。若没有或者错过,单击新创建的resources->右击选择将目录标记为->资源根目录。测试资源文件同理。若没有出现java目录,也可以同样的方法标记为源代码根目录和测试源代码根目录
请添加图片描述

  • 环境配置
    创建好了maven项目,就需要配置Mybatis所需要的环境依赖,主要是配置文件pom.xml
    在dependencies标签中加入所需要的依赖,这里主要包括数据库核心,
    以下仅供参考,具体的版本以及数据库驱动配置根据自己情况而定。
<dependencies>
    <!-- mybatis 核心-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.13</version>
    </dependency>
    <!--junit 核心-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.13.2</version>
    </dependency>
    <!-- mysql 核心-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.30</version>
    </dependency>
    <!-- log4j 日志-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.12</version>
    </dependency>

  </dependencies>

到这里,一个MyBatis大致的开发环境已经创建好了,接下来就是MyBatis中的具体配置。

2.MyBatis搭建

2.1 MyBatis核心配置文件mybatis-config.xml

  • 配置文件习惯命名为mybatis-config,xml
  • 核心配置用于连接数据库
  • 放在src/main/resources/目录下
    其中具体配置一开始可以参照官方pdf文档中Getting Started中2.1.2末尾的xml配置,其中包括数据库环境的配置以及映射文件(sql语句所在)的配置。如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--设置连接数据库的环境-->
 <environments default="development">
 <environment id="development">
 <transactionManager type="JDBC"/>
 <dataSource type="POOLED">
 <property name="driver" value="${driver}"/>
 <property name="url" value="${url}"/>
 <property name="username" value="${username}"/>
 <property name="password" value="${password}"/>
 </dataSource>
 </environment>
 </environments>
<!--引入映射文件-->
 <mappers>
 <mapper resource="org/mybatis/example/BlogMapper.xml"/>
 </mappers>
</configuration>

其中,environments主要是设置数据库环境,根据实际环境填入driver,url,username,pwd。mappers中主要包含映射文件配置。具体的标签含义以及作用后续将会详细介绍。

2.2 创建pojo(Plain Old Java Object)

pojo主要用来包含Java类,Java与数据库的对应关系为

Java数据库
属性(get方法后的为属性名)
一个类的实例对象对应表中的一条记录

eg. 创建了User(用户)类,如上所述,数据库中也有相应的表,属性与列对应。

2.3 创建mapper接口

mapper接口相当于dao,是对数据库中表的操作的集合。
这一接口有一特点,不需要有实现类,只需要有操作方法即可,方法实现的sql语句在mapper.xml中配置(后续会介绍)
命名规范:与DAO相同,例如对User类的操作,命名为UserMapper
请添加图片描述

public interface UserMapper {
 /*** 添加用户信息 */ 
int insertUserExample(); 
}

2.4 创建mapper映射文件

上面讲到mapper接口没有实现类,那他是如何对实现对数据库的操作呢,关键就在于mapper映射文件
mapper映射文件中包含了对对应类(表) 的sql语句
1、映射文件的命名规则:
表所对应的实体类的类名+Mapper.xml
例如:表user,映射的实体类为User,所对应的映射文件为UserMapper.xml
因此一个映射文件对应一个实体类,对应一张表的操作
MyBatis映射文件用于编写SQL,访问以及操作表中的数据
MyBatis映射文件存放的位置是src/main/resources/mappers目录下
2、 MyBatis中可以面向接口操作数据,要保证两个一致:
* mapper接口的全类名和映射文件的命名空间(namespace)保持一致
* mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致

<?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.atguigu.mybatis.mapper.UserMapper"> <!--int insertUserExample();-->
 <insert id="insertUser"> insert into t_user values(null,'root_1','123456',18,'男','12345123@qq.com') 
 </insert>
  </mapper>

2.5 测试insertUserExample

在测试前,需要将UserMapper加入全局配置文件mybatis-config.xml

<mappers>
<mapper resource="mappers/UserMapper.xml"/>
<mappers>

测试代码如下

//解析核心配置文件->SqlSessionFactoryBuilder->SqlSessionFactory->sqlSession->UserMapper实现类(通过解析UserMapper.xml得到)->执行Mapper中的方法
//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象 
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); 
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象 
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交(autoCommit设置为true) 
SqlSession sqlSession = sqlSessionFactory.openSession(true); //通过代理模式创建UserMapper接口的代理实现类对象 
UserMapper userMapper = sqlSession.getMapper(UserMapper.class); 
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配 映射文件中的SQL标签,并执行标签中的SQL语句 
int result = userMapper.insertUserExample(); 
System.out.println("结果:"+result);
### 一、JavaEE与MyBatis开发环境搭建概述 在JavaEE项目中集成MyBatis作为持久层框架,可以有效解决传统JDBC编程中存在的问题[^2]。通过分离SQL逻辑和Java代码,提升项目的可维护性和扩展性。 --- ### 二、具体实现步骤 #### 1. 创建Maven工程 创建一个标准的Maven Web应用项目结构。确保`pom.xml`文件中包含必要的依赖项: ```xml <dependencies> <!-- MyBatis Core --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <!-- MySQL JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <!-- Servlet API (for Java EE environment) --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> </dependencies> ``` 上述配置包含了MyBatis核心库以及MySQL驱动程序[^1]。 --- #### 2. 数据源配置 (`jdbc.properties`) 为了简化数据库连接参数的管理,在项目根目录下新增`src/main/resources/jdbc.properties`文件,并填写如下内容: ```properties jdbc.driver=com.mysql.cj.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false jdbc.username=root jdbc.password=123456 ``` 此文件定义了数据库访问所需的必要属性[^3]。 --- #### 3. MyBatis全局配置文件 (`mybatis-config.xml`) 新建`src/main/resources/mybatis-config.xml`文件,其基本内容如下所示: ```xml <?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> <properties resource="jdbc.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mapper/UserMapper.xml"/> </mappers> </configuration> ``` 该文件指定了事务管理和数据源类型为`POOLED`,即采用连接池机制来提高性能[^4]。 --- #### 4. DAO接口及XML映射文件 假设有一个名为`UserDao.java`的数据访问对象(DAO),它位于`com.example.dao`包下,则对应的XML映射文件应放置在同一路径下的资源目录中(`resources/com/example/dao`)。 ##### `UserDao.java` ```java package com.example.dao; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserDao { @Select("SELECT * FROM users WHERE age > #{age}") List<User> findUsersByAge(int age); } ``` ##### `UserMapper.xml` ```xml <mapper namespace="com.example.dao.UserDao"> <select id="findUsersByAge" resultType="com.example.model.User"> SELECT * FROM users WHERE age > #{age} </select> </mapper> ``` 需注意的是,DAO接口所在的包路径应在Spring或其他容器中正确注册[^5]。 --- #### 5. 测试验证 编写JUnit测试案例以确认基础功能正常运行。例如: ```java 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.InputStream; public class TestMain { public static void main(String[] args) throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); try (SqlSession session = sqlSessionFactory.openSession()) { UserDao userDao = session.getMapper(UserDao.class); System.out.println(userDao.findUsersByAge(18)); } } } ``` 以上代码片段展示了如何加载MyBatis配置并执行查询操作。 --- ### 总结 完成上述步骤后即可成功构建基于JavaEE平台的MyBatis应用程序。整个流程涵盖了从初始化到最终部署的关键环节。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值