MyBatis是一款优秀的持久层框架,用于简化JDBC开发。 持久层是负责将数据保存到数据库的那一层代码。 框架是一个半成品软件,是一套可重用的,通用的,软件基础代码模型,在框架的基础上构建软件编写更加高效,规范,通用可扩展。
JDBC缺点:
1、硬编码:在创建与数据库之间的连接时,会用到很多字符串,比如:用户名和密码。但很多时候用户名和密码不是一成不变的,需要改动;同时我们需要实现的需求不同时,sql语句也会不同,sql语句也需要改动。
2、操作繁琐:sql语句中有多个占位符 ? 时,我们需要一个一个的手动去设置参数。然后在获取对象的时候,我们需要把获取的每一条信息加入相应的对象中。
MyBatis可以解决上述问题,解决办法:把与数据库连接所需的字符串比如数据库ip,用户名和密码单独写入一个配置文件中,sql语句也是单独写入另一个配置文件中,这样我们就可以同时写多个数据库连接所需要的数据,而不需要重复修改同一个,而操作繁琐的那一部分也会有相应的方法自动完成。
下面开始配置写MyBatis所需要的环境:在pom文件中添加以下依赖。
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
8.0.21
<--用于与数据库建立连接-->
junit
junit
4.13.2
test
<--用于写test测试代码-->
<--下面全是用于写日志的配置-->
org.slf4j
slf4j-api
1.7.36
ch.qos.logback
logback-core
1.1.7
ch.qos.logback
logback-access
1.1.7
ch.qos.logback
logback-classic
1.1.7
为了在写代码过程中能过速在接口方法和xml文件中找到对应的方法,建议大家可以在idea中下载一个MyBatisX的插件。
下面开始MyBatis的正式编写: 这是MyBatis的官网,其中有我们需要的代码。有需要的可以去看看。
入门_MyBatis中文网https://mybatis.net.cn/getting-started.html
首先让我们在resources资源文件下创建一个xml文件,名为 mybatis-config.xml
然后编辑该文件
注意上面是我连接我自己的MySql数据库,其中的url,username和password对应的value都需要改成你自己的数据库的对应数据。
mybatis-config.xml 中写明了连接数据库所需要的ip,用户名和密码,同时
然后创建数据库中对应的实体类,先创建一个pojo包用于存放多个实体类,在pojo包中创建对应的实体类。
package org.example.pojo;
public class brand {
private int id;
private String city;
private Integer points;
private String firstName;
private String lastName;
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
private String address;
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Integer getPoints() {
return points;
}
public void setPoints(Integer points) {
this.points = points;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
}
在实体类中,声明与数据库中字段相应的属性,并写好对应的get和set方法。(数据库中的字段如first_name这样的,在实体类中用驼峰表示法firstName)。
然后写操作数据库的接口方法。先创建一个与pojo包位与同一目录下的Mapper包,Mapper包中存放了操作不同数据库表的多个接口方法。
我们可以先定义一个查询所有的接口方法
public interface brandMapper {
//查询所有
ListselectAll();
}
各位在刚写时 selectAll下面会出现红线报错,各位不用担心,这是正常的,先不用管他。
然后继续写我们的配置文件:
在resources资源包中创建一个Mapper包,然后在包中新建文件brandMapper.xml
注意:在创建directory目录名字为的org.example.Mapper目录时,输入包名时应将 . 符号换成 \
应该这样写 org\example\Mapper 才能创建成我们所需要的目录结构
然后编写该文件
namespace是为sql语句和实体类这个整体起个名字,可以随意起;但在用MyBatis代理时有要求需要改成对应的Mapper接口的全限定名。
select *
from sql_store.customers
然后来说一下MyBatis代理的要求:1、定义与sql映射文件同名的Mapper接口,并且将Mapper接口和sql映射文件配置在同一目录下。这个我们在写文件时已经搞完了。
2、设置sql配置文件的namespace属性为Mapper接口的全限定名。这个上面也说明了,已经写好了。
3、在Mapper接口定义方法中,方法名就是sql映射文件中sql标签中的id,并保持参数类型和返回值类型一致。就是写
4、开始编码:(1)通过SqlSession的getMapper方法获取Mapper接口代理对象;(2)调用对应方法完成sql的执行。
下面开始写测试方法:在test包中创建如下结构的MyBatisTest类(MyBatisTest不需要统一,可自定义。)
public class MyBatisTest {
@Test
public void selectAll() throws IOException {
//1.获取SqlSessionFactory。
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//2.获取sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//3.获取Mapper接口的代理对象
brandMapper brandMapper = sqlSession.getMapper(brandMapper.class);
//4.执行方法
List brands = brandMapper.selectAll();
System.out.println(brands);
//5.释放资源
sqlSession.close();
}
}
这样就可以实现查询我们需要查询的数据库表中的所有信息了。
这个小鸟图标就是我们前面下的MyBatisX插件的作用,只要我们点击一下红头巾的小鸟,就会跳转到对应的蓝头巾小鸟处,同样只要我们点击一下蓝头巾的小鸟,就会跳转到对应的红头巾小鸟处,这样等以后方法越写越多时,我们就不要在众多的方法中找我们需要的那个了,方便我们迅速找到对应的方法。
以上就是MyBatis代理的配置,以及简单的实现查询所有selectAll方法的步骤。