mybatis的基础环境如何搭建起来的?
本文讲述了两种方式搭建mybatis的基础环境
(以下介绍的都是基础搭建,使用的都是idea工具,本人使用的idea是2020.3版本的)
1.导jar包的方式
2、通过搭建maven项目,导入依赖来搭建
一、导jar包的方式
1、导jar包
我们先来讲述一下通过搭建一个很简单的javase项目来搭建mybatis的基础环境
创建好一个javase项目之后呢,先建一个Directory,命名为lib
然后再GitHub搜索mybatis,找到mybatis项目,在里面下载zip,zip里面有jar包以及一份快速上手简介,顺便也可以下载一份源码,到时候导进到idea中就可以看到源码
将下载的zip解压,然后将zip里面的lib包下的jar包复制到我们自己创建的项目里面,还有那个mybatis的jar包,还有mysql的驱动包,8.0以上或者6.0以下的都没什么影响,只是你在后面连接数据库的时候要注意写法和加时区。
总结一下,需要那些jar包
- zip里面的lib包下的所有jar包
- mybatis的jar包(核心jar包)
- mysql的驱动包
贴一张我搭建的里面的jar包图(超级贴心)
jar包导好,记得讲jar包 add as library... 一定要做这一步
2、编写实体类
ok,以上的步骤完成之后,我们先建一个放实体包的pojo包,然后建一个实体类,下面我贴出我的实体类,以及数据库的结构
注意: 使用mybatis,不需要POJO实体类名称和数据库表名一致,因为mybatis是POJO与SQL语句之间映射,只要pojo实体中的属性和数据表中的字段保持一致即可
package com.gec.pojo;
public class Course {
private String cno;
private String cname;
private String tno;
public String getCno() {
return cno;
}
public void setCno(String cno) {
this.cno = cno == null ? null : cno.trim();
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname == null ? null : cname.trim();
}
public String getTno() {
return tno;
}
public void setTno(String tno) {
this.tno = tno == null ? null : tno.trim();
}
@Override
public String toString() {
return "Course{" +
"cno='" + cno + '\'' +
", cname='" + cname + '\'' +
", tno='" + tno + '\'' +
'}';
}
}
这里我贴一下我创建数据表的sql吧-----(是不是超级贴心)
点击查看代码
LOCK TABLES `COURSE` WRITE;
/*!40000 ALTER TABLE `COURSE` DISABLE KEYS */;
INSERT INTO `COURSE` VALUES ('3-105','计算机导论','825'),('3-245','操作系统','804'),('6-166','数据电路','856'),('9-888','高等数学','100');
/*!40000 ALTER TABLE `COURSE` ENABLE KEYS */;
UNLOCK TABLES;
3、编写配置文件
ok,以上的准备工作做好了,我们就开始写了,首先我们需要创建一个file,直接放在src路径之下就行,(咱们刚学啊,咱们就写这样放哦)
命名为:mybatic-config.xml
第一次写这个呢,就需要在刚刚下载的zip里面有一个文档找到他的头声明,刚学习的小伙伴可以去找找一下,加深印象哦
你可以把找到的这一段全部复制到你的mybatic-config.xml中,然后去改对应的位置就行,但是新手,我建议还是自己写一遍,加深一下印象,同时也认识一下。
下面贴出的我的mybatic-config.xml 小伙伴们要根据你的数据库驱动来更改你的数据库连接配置,下面的mappers标签里的内容后面会讲到
<?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>
<!--配置数据库环境-->
<!--default="dev", 这default指的是默认的数据库,
当environments中有多个数据源时,指定那个数据源为默认的。
-->
<environments default="dev">
<!-- 可以配置多数据源 -->
<environment id="dev">
<!--事务管理,目前交给JDBC管理-->
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<!--这里面的name是不能更改的,这是别人定义的名字-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--在主配置文件中关联mapper sql映射文件-->
<mappers>
<mapper resource="com/gec/pojo/CourseMapper.xml"></mapper>
</mappers>
</configuration>
一般呢我们写mybatis是使用的是接口的方式,但是对于新学的小伙伴,我觉得还是需要了解一下,没有使用接口方式的写法(仅仅是了解)
首先我们写一个mapper.xml,这个mapper.xml的的命名呢是你的实体类名称+Mapper.xml
例如:我的就是CourseMapper.xml,放在跟实体类的包里面(暂时先这样放着)
我们编写这个CourceMapper.xml也是需要头声明的,同样的头声明去zip包里面的pdf中找
ok,我们先复制下来,然后呢改代码
<?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="aaa">
<!---这个是编写sql语句,在mapper里面有增删改查四种标签,这里我们写的是select 查询的这种标签--->
<select id="selectById" resultType="com.gec.pojo.Course">
select * from course where cno=#{cno}<!--#{} 一种占位符的写法-->
</select>
</mapper>
接口方式
首先我们创建一个包mapper,然后写个接口命名为CourseMapper
接口开发模式需要遵循的原则
1. 映射文件中namespace要等于接口的全路径名称
2. 映射文件中sql语句的id要等于接口的方法名称
3. 映射文件中输入参数类型要等于接口方法中的参数类型
4. 映射文件中的返回值类型要等于接口方法中的返回值类型----歧义 这个你在以后的项目开发中就会有深刻的体会
下面我贴出我的CourseMapper
package com.gec.mapper;
import com.gec.pojo.Course;
public interface CourseMapper {
public Course selectById(String cno);
}
下面我贴出我的CourseMapper.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.gec.mapper.CourseMapper">
<select id="selectById" resultType="com.gec.pojo.Course">
select * from course where cno=#{cno}
</select>
</mapper>
完成上面这些,我们就需要将CourceMapper.xml跟mybatic-config.xml 关联起来,这就是在mybatic-config.xml 中mappers标签的作用
<mappers>
<mapper resource="com\gec\entity\UserMapper.xml"></mapper>
</mappers>
4、编写测试类
新建一个包,然后新建一个测试类,测试类如下
package com.gec.demotest;
import com.gec.mapper.CourseMapper;
import com.gec.pojo.Course;
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;
public class CourseTest {
public static void main(String[] args) throws IOException {
String config="mybatis-config.xml";
// 读取配置文件,创建输入流
InputStream resourceAsStream = Resources.getResourceAsStream(config);
// 会话工厂构建者对象 创建 SqlSessionFactory SqlSessionFactory是专门帮我们创建SqlSession对象
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
// SqlSession专门用来操作数据库的增删改查,事物操作。
// SqlSession是可以创建多个,但是一旦调用了close方法,那么当前sqlSession就废了
SqlSession sqlSession = sqlSessionFactory.openSession();
// Course course = sqlSession.selectOne("aaa.selectById","3-105");
//
// System.out.println(course);
CourseMapper mapper = sqlSession.getMapper(CourseMapper.class);
Course course = mapper.selectById("3-105");
System.out.println(course);
}
}
运行成功呢,就说明你的第一个mybatis的helloword运行成功
这里着重说明一下,要是想了解一下测试类里面的SqlSessionFactory ,SqlSessionFactoryBuilder,SqlSession 对象,可以去
https://pdai.tech/
这个全栈网站找到mybatis的源码解析部分看一下,对你学习mybatis有一定的提升
通过搭建maven项目,导入依赖来搭建
这种方式,只要把maven搭建起来,然后导入依赖,步骤接着第一种方式的第二步开始就可以完成
主要就是要注意依赖的导入以及Mapper.xml文件的放置位置就行
1、搭建maven项目,这里有个maven仓库的配置,emmm,可以去看看我的文章,里面有一片专门讲maven仓库配置的
2、添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gec</groupId>
<artifactId>01-mybatisTest</artifactId>
<version>1.0-SNAPSHOT</version>
<name>01-mybatisTest</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.ow2.asm/asm -->
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>7.1</version>
</dependency>
<dependency>
<groupId>ognl</groupId>
<artifactId>ognl</artifactId>
<version>3.3.3</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.29.1-GA</version>
<scope>compile</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.36</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>ch.qos.reload4j</groupId>
<artifactId>reload4j</artifactId>
<version>1.2.22</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
<!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>3.7.1</version>
</plugin>
<!-- <plugin>-->
<!-- <artifactId>maven-project-info-reports-plugin</artifactId>-->
<!-- <version>3.0.0</version>-->
<!-- </plugin>-->
</plugins>
</pluginManagement>
</build>
</project>
这里的mybatic-cofig.xml文件放在resources下面,CourseMapper.xml是要放在resources下的mapper包下,不然你运行的时候很可能会出现CourseMapper跟CourseMapoer.xml文件映射不到的问题。
ok,以上两种方法都介绍完毕,源码,我会放在gitee,欢迎大家拉取使用!
https://gitee.com/ye-yi919/Mybatis_code.git
(要是不会用idea拉取,可以点下面那个连接,里面的.md有详细讲解)
https://gitee.com/ye-yi919/gitTest.git
创作不易,多多点赞,感谢
本文来自博客园,作者:岁_穗,转载请注明原文链接:https://www.cnblogs.com/ZengXinYi-919-blog/p/16575403.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!