我们学过servlet,在servlet项目中,我们使用的是JDBC的五大基本步骤,这里先回顾一下:
1:加载驱动
-
Class.forName(“com.mysql.cj.jdbc.Driver”);
2:获取数据库连接:
-
String url = “jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false” -
String user = root; -
String password = root -
Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:3306/xxx”, “root”, “root”);
3:获取执行sql语句的对象:
-
String sql = … -
Statement statement = conn.createStatement(sql);
4:执行sql语句:
-
ResultSet resultSet = statement.executeUpdate(sql);
5:操作结果集,关闭连接:
这里我们假设已经有了一个实体类:User,然后可以创建集合遍历结果集并存入集合中:
List<User> list = new ArrayList<>();
while(resultSet .next){
User user = new User;
user.setUserId= (resultSet.getInt("userId"));
user.setUserName = (resultSet.getInt("userName"));
list.add(user)
}
然后我来说一下Mybatis是什么,Mybatis其实就是帮我们封装好了上述的步骤,因为在我们学习servlet中,我们会发现我们每每使用一次数据库就需要不断的去加载驱动,这样做很麻烦而且浪费了内存,所以Mybatis帮我们做的就是封装起来这些
我具体来演示一下,首先我们创建好了一个基本的Mybatis项目,第一步我们就是去写好Mybatis的基本配置文件:
<?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>
<!-- 配置mybatis环境-->
<environments default="development">
<!-- id:数据源名称-->
<environment id="development">
<!-- 事务类型:使用JDBC的事务,使用Connection的提交和回滚-->
<transactionManager type="JDBC"/>
<!-- 数据源:dataSource数据源,创建Connection对象 type=“POOLED“ 使用数据库连接池技术 -->
<dataSource type="POOLED">
<!-- 连接数据库的四个参数 mysql8.0-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/ftz/demo/pojo/User.xml"/>
</mappers>
</configuration>
上面我很详细的注释了每一步的目的是什么,我们会发现在原来JDBC中的驱动和连接都写在了这里,其中在这个地方用到了数据库连接池技术,上面的代码我们在Mybatis中文官网就可以直接复制粘贴,都是不需要自己手写的!:
然后我们接下来就是去写一个实体类:
上面简单的用了一下Lombok插件自动生成的get set方法,大家也可以自己手写,然后在写好这些后,按照JDBC我们需要写sql语句了,在Mybatis我们的sql语句是可以直接写在.xml文件中的,我们也可以叫做mysql的映射文件
我们这里由于是.xml文件,所以是以标签的形式写主题内容,我们的sql语句就写在了select标签里面,这里我们比原来多写了一个命名空间叫做namespace,这里可以等价于我们曾经写的方法名字,说白了就是为这个sql语句单独起一个名字,方便我们后续调用sql语句的时候明确调用哪一条语句,并且这里需要写清楚返回值类型,我们这里直接使得返回类型对应实体类,这也就强制实体类中创建的属性必须与数据库中的字段一一对应!
然后我们回到Mybatis.xml这个配置文件中,为了保证我们可以让mybatis文件索引到我们的mysql映射文件,我们需要在下面加上mapper映射路径:
接下来我们就可以写测试类了:
package com.ftz.demo.test;
import com.ftz.demo.pojo.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.Reader;
import java.util.List;
public class Test01 {
@Test
public void test01() throws IOException {
Reader reader = Resources.getResourceAsReader("mybatis.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("com.ftz.demo.pojo.User.queryALL");
for (User user:userList){
System.out.println(user);
}
sqlSession.close();
}
}
在测试类中,我们发现,前面几步都是Mybatis帮我们做的,我们唯一决定性的就是上面我写的第四步执行sql语句: List<User> userList = sqlSession.selectList("com.ftz.demo.pojo.User.queryALL");
所以说Mybatis本质还是JDBC,只不过简化了我们的配置,可以理解成我们有了一个工厂去实现原来JDBC中我们的操作,使用工厂创建,并且修改sql语句可以不去修改源码,而是直接修改配置文件就好
还有一个就是过滤文件,由于我们写的xml都是在resources下面的,所以我们选哟在pom里面配置文件过滤:
|