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