mybatis入门+快速上手(面向官网编程)

news/2024/11/18 5:26:13/

什么是 MyBatis?

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
回答得这么官方一看就是官网(https://mybatis.org/mybatis-3/zh/index.html)拷贝过来的啦。

根据官网的描述来看,Mybatis是基于持久层(DAO)的一个框架,然后就是mybatis对传统JDBC操作进行了封装和简化(划重点)。

MyBatis有什么用?

既然是对jdbc的简化封装,当然是为了更方便地对数据库进行操作啦。

MyBatis如何使用?

重点来了看下面↓

先看一下官网是怎么说的
mybatis009
大概意思就是,你把jar包丢进去就可以用了。牛*那就来吧!

首先打开工具IDEA
创建一个新的项目
mybatis001

你可以使用其他方式创建项目,为了方便快捷我这里直接用maven创建。
点maven不使用骨架,直接Next下一步创建项目。
mybatis002

然后填写你项目的坐标,也就是项目名。
ArtifactID是指项目的标识,定义了项目属于哪个组,一般由你公司域名倒写如:com.baidu
Artifacted定义了当前maven项目在组中唯一的ID,写项目名就行了
如果子父工程的项目这部分比较重要
我这个是单模块,so~填完点击next下一步
mybatis003

在这里继续填写你的项目名,还有你项目存放的路径。
注意下面折叠起来的信息!
mybatis004

搞定之后finish创建项目项目就出来了
mybatis005

项目创建完了,创建个数据库创建个表

-- 1.创建数据库
CREATE DATABASE mybatis DEFAULT CHARACTER SET utf8;

-- 2.创建用户表
DROP TABLE IF EXISTS USER;CREATE TABLE USER (id INT(11) NOT NULL AUTO_INCREMENT,username VARCHAR(32) NOT NULL COMMENT '用户名称',birthday DATETIME DEFAULT NULL COMMENT '生日',sex CHAR(1) DEFAULT NULL COMMENT '性别',address VARCHAR(256) DEFAULT NULL COMMENT '地址',PRIMARY KEY  (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;INSERT  INTO USER(id,username,birthday,sex,address) VALUES 
(41,'小三','2019-09-27 17:47:08','女','东莞'),
(42,'小四','2019-09-02 15:09:37','女','东莞'),
(43,'小五','2019-09-04 11:34:34','女','东莞'),
(45,'小六','2019-09-05 12:04:06','男','北京'),
(46,'老王','2019-09-07 17:37:26','男','上海'),
(48,'老李','2019-09-08 11:44:00','男','广州');

项目创建好了,数据也有了,开始写项目了。

先创建一个实体类
mybatis01\src\main\java\com\Mrhu\entity\User.java
mybatis006
mybatis007

然后完善实体类,把数据库的字段跟实体类属性对应好,一张表对应一个实体类,提供get和set方法。在这里不多解释了

import java.util.Date;public class User {private int id;private String username;private Date birthday;private String sex;private String address;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

mybatis008

接着添加依赖,就是添加jar包。
在maven的pom.xml进行依赖添加

<dependencies><!--要用mybatis肯定要他的包才能用,下面导入mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><!--mysql数据库驱动包--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.30</version></dependency><!--日志包,可以要可以不用--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!--junit测试包方便测试运行--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency></dependencies>

导入后刷新一下maven,没有报错就没问题了。

导入jar包没问题,第一步安装就已经完成了。接着按照官网提示就是需要进行一些配置。

mybatis010

从官网的描述来看,我们需要一些配置(SqlSessionFactory),这些配置包含了一些核心配置(好绕)!官网给出了两种配置方式:1.使用java代码进行配置;2.使用xml文件进行配置。so,那么来看看有哪些配置吧!

首先我这里使用的是第二种(使用xml文件进行配置),先创建一个xml文件(mybatis01\src\main\resources\SqlMapConfig.xml)空文件,名字叫SqlMapConfig.xml当然名字可以随意取不要花里胡哨就行,要遵循规范要见名知意,比如applicationContext.xml也是有人取。
mybatis011

文件创建好了之后,文件里该填些什么,继续看一下官网。

mybatis012

通过官网的描述,大概分析出,我们需要配置一些属性环境变量等东西。比较显眼的环境变量、数据源,也就是说连接数据库的东西在这配置。具体可以自己详看官网文档(有中文很友好)。

大概知道我们需要配置啥了,开始操作。

第一步是copy代码(能copy就不要敲,新手勿模仿)

mybatis013

先把文件头copy进来,这部分最好copy别自己手写没意义。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">

这段代码是添加约束,输入里面那个网址http://mybatis.org/dtd/mybatis-3-config.dtd就会下载出一个.dtd的文件,添加了约束之后你这个xml文件就要按照这个文件的规定来写,详细自己去摆渡了解。

添加依赖后继续完成下面的代码,就是属性的配置。
约束可以看出根节点为configuration
mybatis014

然后看看有哪些重要的属性,既然是基于JDBC的框架,那么肯定先得连接数据库吧,数据库都没连上说那么多都没意义。那就找找连接数据库的配置8.
mybatis015

找到这个环境配置就是配置数据源的,那就看看8.

mybatis016

可以看到这就是配置数据源的玩意,官网提供了两种方式,一种是基于java代码的配置,另一种是xml的设置,我这用的是xml方式那就按xml的来,做啥都要统一嘛。那就直接copy一下咯!

mybatis017
继续分析一下都是啥玩意
首先

environments default=“development”:他的描述是默认使用的环境 ID,其实就是下面的environment(后面没有s的看清楚)可以配置多个,id是指定使用其中一个。示范

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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><environment id="development1"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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><environment id="development2"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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>
</configuration>

就是说可以配置多个数据库的连接配置,然后**environments default=“development”**的作用是指定某一个配置

environment id=“development”:每个 environment 元素定义的环境 ID,上面已经解释的很清楚了,注意这个id最好用数据库的名字来命名如

<configuration><environments default="Oracle"><environment id="mysql"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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><environment id="Oracle"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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><environment id="MongoDB"><transactionManager type="JDBC"><property name="..." value="..."/></transactionManager><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>
</configuration>

transactionManager type=“JDBC”:事务管理器的配置(比如:type=“JDBC”)这个我就直接复制官网的话了,已经说的通俗易懂。
在 MyBatis 中有两种类型的事务管理器(也就是 type=”[JDBC|MANAGED]”):

JDBC – 这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。

MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。例如

<transactionManager type="MANAGED"><property name="closeConnection" value="false"/>
</transactionManager>

所以用JDBC就行了。(文章不对事务进行分析详细自行摆渡)

继续
dataSource type=“POOLED”:官方话太多我就不复制了,dataSource数据源的意思,tpye=POOLED(连接池),推测一下这应该就是连接池的配置8。
官网推荐了三种:[UNPOOLED|POOLED|JNDI]
我这就用推荐的POOLED具体有什么区别自行摆渡。

driver – 这是 JDBC 驱动的 Java 类的完全限定名(并不是 JDBC 驱动中可能包含的数据源类)。
url – 这是数据库的 JDBC URL 地址。
username – 登录数据库的用户名。
password – 登录数据库的密码。

到这里全都搞定了

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--default 表示默认使用哪一个运行环境配置--><environments default="mysql"><!--id="mysql" 表示mysql的运行环境配置--><environment id="mysql"><!--事务管理器配置:基于JDBC的事务控制--><transactionManager type="JDBC"></transactionManager><!--连接池配置(UNPOOLED/POOLED/JNDI)--><dataSource type="pooled"><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf8"></property><property name="username" value="root"></property><property name="password" value="root"></property></dataSource></environment></environments>
</configuration>

基本的配置完,下面为了快速上手简化操作,我将脱离官网的描述与步骤。

目前我们的目录
mybatis018

继续创建一个接口
mybatis01\src\main\java\com\Mrhu\dao\UserDao.java
mybatis019
然后添加个查询方法。

import com.Mrhu.entity.User;import java.util.List;public interface UserDao {List<User> findAll();}

注意是interface(接口)不是class(类)!
注意导包!
使用mybatis将不需要写接口的实现

继续创建关于这个接口的mapper,在这里定义SQL 映射语句。也就是sql在这里写。
那么创建这个文件先
mybatis01\src\main\resources\com\Mrhu\dao\UserDao.xml
mybatis020

继续编写这个文件
老样子添加约束

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper></mapper>

mapper是根节点里面包含了许多标签
mybatis021
例如最常使用的增删改查,那就先写句简单的sql吧。
注意属性值,这段代码不要完全复制粘贴!

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.Mrhu.dao.UserDao"><select id="findAll" resultType="com.Mrhu.entity.User">select * from user</select>
</mapper>

namespace 名称空间,表示当前的xml是哪一个接口的映射
select id 对应的是IUserDao接口的方法名称
select resultType 方法的返回值类型,如果方法返回的是集合,只要指定集合中元素的类型
select标签里面则是sql语句标签,我这里直接用sql语句暂且没用sql语句标签。

接口映射文件写完了

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace 名称空间,表示当前的xml是哪一个接口的映射-->
<mapper namespace="com.Mrhu.dao.UserDao"><!--id 对应的是IUserDao接口的方法名称--><!--resultType 方法的返回值类型,如果方法返回的是集合,只要指定集合中元素的类型--><!--如何封装数据?mybatis会自动封装数据,要求:查询列名称要与对象的属性名称一致。--><select id="findAll" resultType="com.Mrhu.entity.User">select * from user</select>
</mapper>

接着要加载这个配置文件,那就需要在之前的主配置文件中加上一段。
mybatis022

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration><!--default 表示默认使用哪一个运行环境配置--><environments default="mysql"><!--id="mysql" 表示mysql的运行环境配置--><environment id="mysql"><!--事务管理器配置:基于JDBC的事务控制--><transactionManager type="JDBC"></transactionManager><!--连接池配置(UNPOOLED/POOLED/JNDI)--><dataSource type="pooled"><property name="driver" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///mybatis?characterEncoding=utf8"></property><property name="username" value="root"></property><property name="password" value="root"></property></dataSource></environment></environments><!--加载接口的映射文件--><mappers><!--必须放到类路径下--><mapper resource="com/Mrhu/dao/UserDao.xml"></mapper></mappers>
</configuration>

写完了就可以测试了,接着写个测试类测试一下吧。
mybatis01\src\test\java\com\Mrhu\dao\UserDaoTest.java
mybatis023

接着写测试类

import com.Mrhu.entity.User;
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 org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class UserDaoTest {@Testpublic void findAll() throws IOException {// 1. 获取文件流InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");// 2. 创建工厂的构建器SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();// 3. 创建SqlSession的工厂SqlSessionFactory factory = builder.build(in);// 3. 创建SqlSessionSqlSession session = factory.openSession();// 4. 创建接口的代理对象UserDao userDao = session.getMapper(UserDao.class);// 查看是否是代理对象?class com.sun.proxy.$Proxy2System.out.println(userDao.getClass());// 5. 调用方法List<User> list = userDao.findAll();System.out.println(list);// 6. 关闭,释放资源session.close();in.close();}
}

写完直接运行方法看是否查出数据,如果有就代表成功了。
mybatis025
如果报错了
1.确定你的运行环境正常
2.确定你数据源所指定的地址,数据库的账号密码是否一致。
3.确定你的数据库是能连接上的,如mysql服务没打开
4.确定你代码里文件路径是对的
5.如果能运行但是报了这样的错了
mybatis024
你是导了log4j没有配置
那么创建一个log4j的配置文件
mybatis01\src\main\resources\log4j.properties
mybatis026
文件内容直接copy这里,需要详细了解里面内容请自行摆渡log4j

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

继续运行,控制台打印的内容将更详细
mybatis027

如有错误的地方请指出,本文将持续更新修改。
完结


http://www.ppmy.cn/news/747102.html

相关文章

官网: arthas 快速入门

快速入门 alibaba开源 jvm 调优工具, 生产环境巨好用 . 1. 启动Demo curl -O https://alibaba.github.io/arthas/arthas-demo.jar java -jar arthas-demo.jar arthas-demo是一个简单的程序&#xff0c;每隔一秒生成一个随机数&#xff0c;再执行质因数分解&#xff0c;并打印…

chatgpt api极简入门(参考官网教程)

写在前面 心血来潮&#xff0c;复试完结束很摆&#xff0c;研究点东西玩玩&#xff0c;之前之知道nonebot搭建qq机器人的方法和步骤&#xff0c;这次记录下自己使用openai&#xff0c;gpt3.5的api的代码&#xff0c;参考自openai的官网。 环境 要求 python 版本 >3.8 &…

从入门到资深

转自https://zhuanlan.zhihu.com/p/54641472 4.3. 到底要深入学什么 根据知识的半衰期&#xff0c;作为Android应用开发最应该学习的就是Java、App开发相关技术、Android系统底层源码、数据结构、设计模式等等。注意是深入学习。你要通过项目实战理解这些技术的原理内核。知其…

As从入门到精通

Android Studio2.0 教程从入门到精通Windows版 - 安装篇 系统要求 Win7或更高 内存 最少 4 GB &#xff0c;建议8 GB RAM 硬盘 4G Java Runtime Environment (JRE) 6或更高 Java Development Kit (JDK) 7 或更高 下载 新手建议下载安装版&#xff0c;比较简单一路…

Gstore官网学习三:快速入门

文章目录 一、数据格式二、构建数据库2.1、创建数据库方法一&#xff1a;命名行模式&#xff08;gbuild&#xff09;方法二&#xff1a;可视化工具&#xff08;gworkbench)方法三&#xff1a;HTTP API&#xff08;ghttp&#xff09; 2.2、数据库查询方法一&#xff1a;命令行模…

创业公司开发自己的公司官网-从入门到上线-(1)

《文件管理君》APP,欢迎各位尝鲜下载 一:啥是跨域啊? 答:由于页面开发中&#xff0c;静态资源是放在本地电脑上的&#xff0c;访问这些资源通常通过IP方式&#xff08;127.0.0.1&#xff09;或者localhosts来访问&#xff0c;与线上服务器所在域名不符&#xff0c;不能顺利进…

尚硅谷-尚医通实战经验总结

整个系统采用b2c的管理模式&#xff0c;分为管理员系统和用户系统&#xff08;直接商对客&#xff09; 1 后端整合Swagger进行技术测试 2 后端框架使用ssmp框架 3 logback和 log4j 作为日志实现框架 4 idea开发后端 5 vscode开发前端 6 vue做前端框架 7 ES6标准的JS语言…

Crestron的rava sip设置语音视频对讲的初步入门

目录 Crestron快思聪和SIP协议SIP协议兼容性触屏的设置方法SIP模式的设置SIP协议智能家居的好处 Crestron快思聪和SIP协议 Crestron快思聪是支持SIP协议的&#xff0c;其名为RAVA的SIP协议技术&#xff0c;在其官网是这样写的&#xff1a; Rava SIP Intercom & Phone Tech…