Mybatis入门
什么是mybatis?
MyBatis 是一款优秀的持久层框架
它支持自定义 SQL、存储过程以及高级映射
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录
第一个Mybatis程序
安装:
使用maven创建项目,添加相关依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>x.x.x</version>
</dependency>
Mybatis核心配置文件:
在src/main/resource/目录下建立一个xml文件mybatis-config.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="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
创建一个工具类:
每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得,而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先配置的 Configuration 实例来构建出 SqlSessionFactory 实例。 有了 SqlSessionFactory,顾名思义,我们可以从中获得 SqlSession 的实例。
工具类的作用是产生一个SqlSessionFactory,由于SqlSessionFactoryBuilder创建出SqlSessionFactory后基本就没用了,所以使用的是单例模式,而SqlSessionFactory则在整个流程中发挥重要的作用。
工具类:com.exmple.utils.MyUtils.Class
调用其中的MyUtils.getSqlSession()方法可以都得到一个sqlSession对象,而方法中的Factory是一个单例
public class MyUtils(){
private SqlSessionFactory sqlSessionFactory;
static {
try{
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
catch(Exception e){
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
创建pojo层
创建类User.class,在pojo层中创建数据对象
创建Mapper层
创建接口UserMapper(UserDao),在Mapper中编写数据接口,接口中有一个getUserList方法
创建UserMapper.xml配置文件:(先前的操作是实现UserMapper接口,用UserDaoImp;如今用Mapper代替Dao,用.xml文件来代替Imp实现类)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//绑定一个确定的Mapper接口
<mapper namespace="com.exmple.UserMapper">
//select查询语句
<select id="getUserList" resultType="User">
select * from mybatis.user //之前搭建好的数据库,数据库为mubatis,表为user
</select>
</mapper>
测试:
在对应test位置,在UserMapper相同位置创建UserMapperTest
public class UserMapperTest{
@Test
public void test(){
//1.获取SqlSession对象
SqlSession sqlSession = MyUtils.getSqlSession();
//2.调用sqlSession的getMapper方法获取对应的接口对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for(User user:userList){
System.out.println(user)
}
//3.关闭SqlSession
sqlSession.close();
}
}
由于使用结束后一定要关闭sqlSession,因此建议将sqlSession.close()放在finally方法块中:
try{
//1.获取SqlSession对象
SqlSession sqlSession = MyUtils.getSqlSession();
//2.调用sqlSession的getMapper方法获取对应的接口对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
for(User user:userList){
System.out.println(user)
}
}catch(Exception e){
e.printStackTrace();
}finally{
//3.关闭SqlSession
sqlSession.close();
}