简介
什么是MyBatis?
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。这是官方的说法,简单来说MyBatis就是基于java的操作数据库的框架。
快速开始一个MyBatis工程
- 在idea中新建一个空的Maven工程作为父工程,删除不必要的SRC目录,然后导入如下的Maven依赖。``
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
记得导入依赖后要刷新Maven。mybatis中包含了Mybatis的核心jar包,junit是方便我们测试环境是否搭建成功需要的jar包。
- 在父工程下新建一个模块作为子工程,在resources下新建一个xml文件,然后在其中写入以下内容:
<?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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="psf179611"/>
</dataSource>
</environment>
</environments>
</configuration>
这里注意如果你的resources目录没有是一个资源目录的标识,如下图:
请右键单击该文件夹,选择如下的操作:
xml文件中的数据库配置修改为自己电脑上的相关配置即可。
3.新建一个类,并且在类中导入以下的代码:
public class MybatisUtils {
private static SqlSessionFactory build; //取得工厂类
static{
String resources="mybatis-config.xml"; //请注意资源名要和resources目录下的配置文件同名
try {
InputStream resourceAsStream = Resources.getResourceAsStream(resources);
build = new SqlSessionFactoryBuilder().build(resourceAsStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获得了SqlSession的对象
public static SqlSession getSqlSession(){
return build.openSession();
}
}
这里的sqlSessionFactoy可与理解为德鲁伊连接池中的DataSourceFactory,sqlSession可以类比为一个数据库的连接,但是相比于Connection,sqlSession进行了封装,后者的功能更强大。
开启测试:
如果成功打印出来了sqlSession对象的引用,那么环境就配置成功了。
4.接下来我们要对数据库进行实际的操作,由于博主连接的数据库中已经新建好了表,并且在java中编写了对应的实体类。那么这两个操作就在这里跳过,请读者自行完成。
我们需要新建一个dao包,在里面写上对应的实体类操作的接口。
public interface UserDao {
public List<User> getList(); //获取数据库表的所有记录
}
记得要为对应的实体类生成所有的字段生成get和set方法!!!
编写好了之后,我们还在dao包下新建一个xml配置文件:
<?xml version="1.0" encoding="utf8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.psf.dao.UserDao">
<select id="getList" resultType="com.psf.bean.User">
select * from user
</select>
</mapper>
**1.其中的Id字段要与接口中的方法名一致。
2.resultType顾名思义是返回值类型,需要填写全路径,当然Mybatis中也有相关的策略可以简化,不过都是后话。**
3.namespace表示这是为哪一个接口配置相应的映射文件,填写刚才创建的接口的全路径即可。
在select标签之间直接写自己需要的操作即可,这里是需要查询数据库user表的全部记录。 **接下来非常重要的一步不能忘记,需要去Mybatis的核心配置文件中配置这个文件的映射属性!!!
<mappers>
<mapper resource="com/psf/dao/UserMapper.xml"></mapper>
</mappers>
注意这里使用斜杠而不是"."。
之后就可以继续测试了。
@Test
public void test11(){
SqlSession sqlSession = MybatisUtils.getSqlSession(); //获取sqlSession实例,可以类比为Connection
UserDao mapper = sqlSession.getMapper(UserDao.class); //通过sqlSession获取映射
List<User> list = mapper.getList(); //调用方法
list.forEach(System.out::println); //打印结果
sqlSession.close();//用完之后记得关闭连接
}
输出了全部的记录。