一. 问题一:
JDBC和MyBatis都可以访问数据库,那它们的区别是什么?在具体运用过程中有什么不同?MyBatis是怎么实现对数据库的访问的?
二. 学习过程
我对MyBatis的认识是从JDBC引入的,那就先从JDBC说起。
是程序访问数据库的接口,JDBC接口通过JDBC驱动对数据库进行访问。
第一:接口不能实例化,JDBC接口并不知道我们使用哪个数据库,那应该怎么让它明确知道你在使用哪个数据库?
我们可以用哪个数据库,就使用哪个数据库的实现类。(JDBC驱动:某个数据库实现了JDBC接口的jar包。)
第二:如何创建与数据库的连接?
需要用到Connection对象,每个Connection对象代表一个数据库连接。
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称?charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8", "用户名", "密码");
System.out.println("连接成功!");
System.out.println("连接对象:" + con);
第三:怎么操作?
通过创建数据库操作接口(Statement / PreparedStatement)的对象来执行数据库SQL语句
Statement st = con.createStatement();
int row = st.executeUpdate("insert into bank(customerName,currentMoney) values('王一博',8000)");
但是由于每次对同一数据库执行操作时,会建立多次连接,浪费了不必要的资源和代码,所以我们就引入了JDBC连接池。我们可以提前创建一个数据库连接池(我就叫它为数据库工具类),在每次对数据库进行操作时,获取连接池中的连接对象,这样就避免了数据库连接的频繁创建,关闭的开销。
public class DBUtil { // 数据库连接参数
private static final String JDBC_URL = "jdbc:mysql://localhost:3306/数据库名?charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8"; private static final String JDBC_USERNAME = "用户名"; private static final String JDBC_PWD = "密码"; // 创建连接池对象
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 连接池参数
static { // 必写
dataSource.setJdbcUrl(JDBC_URL);
dataSource.setUser(JDBC_USERNAME);
dataSource.setPassword(JDBC_PWD);
} public static Connection getConnection() { // 从连接池中返回一个空闲连接
try {
Connection con = dataSource.getConnection(); return con;
} catch (SQLException e) {
e.printStackTrace(); return null;
}
}
}
再从连接池中获取连接:
Connection con = DBUtils1.getConnection()
最后记得关闭连接:
con.close();
2.JDBC频繁的创建statement,加载驱动很麻烦,因此就有了MyBatis,MyBatis内部封装了JDBC,简化了加载驱动,创建连接等繁杂的过程,只需要关注语句本身。(小声说一句:不得不说创新真的很重要,还要计算机语言的使用发展到现在,那些前者真的太了!真的很厉害!)
MyBatis
MyBatis是一个开源的,轻量级的数据持久化框架,可以替代JDBC。
MyBatis支持定制SQL,存储过程以及高级映射,可以在实体类和SQL语句之间建立mapping映射关系,性能优秀,简单。(关注SQL语句和注重映射关系)
一. MyBatis的开始
首先导包:
第二,在src目录下创建实体类(实体类均在一个包中,比如我的包名为com.my.entity)。实体类中首先要有成员变量(和数据库的表相对应),还有getxxx(),setxxx(),toString(),构造方法。
第三,在src目录下创建映射文件(映射文件均在同一个包中,比如我的包名com.my.mapper)。映射文件包括映射接口类(包括方法)和映射文件(配置执行地SQL语句)。
第四,创建MyBatis核心配置文件(mybatis-config.xml),用于配置数据库连接和MyBatis运行时所需的各种属性。(如下:这个很重要!!千万不要忘记将mapper文件加到配置文件)
<?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>
<!-- 日志文件 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 配置mybatis运行环境 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- MySQL数据库驱动 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<!-- 连接数据库的URL -->
<property name="url"
value="jdbc:mysql://localhost:3306/yibo?charset=utf8mb4&useSSL=false&useTimezone=true&serverTimezone=GMT%2B8" />
<property name="username" value="root" />
<property name="password" value="zhangjin0801" />
</dataSource>
</environment>
</environments>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="com/my/mapper/WebsiteMapper.xml"/>
<mapper resource="com/my/mapper/CouponMapper.xml"/>
</mappers></configuration>
第五:日志文件
MyBatis默认使用log4j输出日志信息,我们就可以看到控制台输出的SQL语句。
最后一步:测试类
为了在同一个数据库表中不重复创建SqlSession,我们会创建一个工具类,每次通过sqlSession来获取某个接口的实现类对象。
首先创建这个工具类:通过创建SqlSessionFactoryBuilder对象来传入配置文件创建SqlSessionFactory的对象,再通过这个对象的openSession()方法来创建SqlSession。
public class MybatisUtils {
private static SqlSessionFactory factory; static{
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); try { factory = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession() {
SqlSession session = null; if(factory != null) {
session = factory.openSession();
} return session;
}
}
接下来就是具体操作:通过Mybatis来获取SqlSession对象,再通过这个对象的getMapper()方法来创建接口的实现类对象,然后通过这个实现类对象来调用接口中的方法
MyBatis与JDBC的区别:
①. 免费且开源。
②. 它将大量的SQL语句剥离出来,使用XML文件或注解的方式实现SQL的配置,可以在不修改程序代码的情况下,直接在配置文件中修改SQL语句,而JDBC需要手动设置参数,比JDBC减少了至少50%的代码量,并且很灵活,提高了代码的复用性。
③. MyBatis是最简单的持久化框架,体积小且学习门槛低。
④. 提供XML标签,支持编写动态SQL语句。
⑤. 提供映射标签,支持实体对象与数据库表的字段的映射关系。
【我对映射的理解:】
数据库字段和实体类中的属性在映射文件中要一一对应,在映射文件中,它的SQL语句在数据库中执行,映射文件和接口类在同一个包中,且要求他们的名字也相同,这也算对应。
二. 问题二:
这是由于没有将映射文件加载到配置文件中。改正如下:
标签:JDBC,映射,遇到,创建,数据库,学习,SQL,MyBatis From: https://blog.csdn.net/weixin_74412978/article/details/144827498