我的第一个mybatis程序
写在前面:
最近开始了框架的学习,打算先从mybatis入手,下面是我的第一个mybatis程序。
编译环境:
idea+jdk1.8+mysql+maven-3.6.3
首先需要在pom.xml中添加依赖代码
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
//这里我用的是3.5.2版本
创建mybatis的配置文件,包括获取数据库连接实例的数据源(DataSource)以及决定事务作用域和控制方式的事务管理器(TransactionManager)。
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}"/> //jdbc驱动,我的是com.mysql.jdbc.Driver <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers>
//每一个mapper都需要注册,这里和后面有关 <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
我们以前都是通过jdbc来操作数据库,频繁的连接关闭不仅会消耗巨大的资源,并且如果要修改sql的话不利于整体的维护。
而mybatis的核心概念有Configuration 、 SqlSessionFactory 、 Session 、 Executor 、 MappedStatement 、StatementHandler、ResultSetHandler。我是首先了解了 SqlSessionFactory。
我们首先看官方文档是怎样定义的:
我们创建一个mybatisutil用来获取sqlsession对象
package utils; 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 java.io.IOException; import java.io.InputStream; //sqlSessionFactory对象 public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try { String resource = "mybatis-config.xml"; InputStream inputStream = null; inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){ SqlSession sqlSession = sqlSessionFactory.openSession(); return sqlSession; } }
同样我们再联系一下传统MVC设计模式的写法,我们会写一个DAO接口,然后创建一个实现类去继承它,如下:
那么我们通过mybatis,不用在创建实现类了,而是在xml语句中定义映射,如下:
<?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"> <!--namespace绑定一个Dao/Mapper接口--> <mapper namespace="dao.UserDao"> <select id="getCloud" resultType="bean.Cloud"> select * from caijing </select> </mapper>
在这里,namespace用来绑定一个Dao/Mapper接口,也就是说,这个xml就相当于我们之前创建的实现类,它们的作用是一样的,省去了jdbc一系列的操作,更加简单了。
现在我们回过头来再看一开始创建的mybatis-config.xml,大家有没有注意到:
我在这里注释道每一个mapper都需要注册,这里它的resource需要改为"dao.UserMapper.xml",一定要注意是每一个!!!我只创建了一个,所有这里就注册一个。
写到这,准备工作也就差不多了,下面我们开始测试:
package dao; import bean.Cloud; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import utils.MybatisUtils; import java.util.List; public class UserDaoTest { @Test public void test(){ //1.获取sqlsession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); //2.1执行sql UserDao mapper = sqlSession.getMapper(UserDao.class); List<Cloud> list = mapper.getCloud(); for (Cloud cloud : list) { System.out.println(cloud); } //关闭sqlsession sqlSession.close(); } }
运行结果: