我们学过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里面配置文件过滤: