mybatis(一)
一. 环境搭建
首先,需要的jar包以及源码从GitHub上下载,地址为:https://github.com/mybatis/mybatis-3/releases,从这里可以看到各个历史版本。jar包解压后,里面有一个官方的Mybatis文档。Mybatis的jar包就一个:mybatis-3.4.6.jar.里面其他的jar包是一些辅助的包,非必须。
小技巧:下载的源码可以用来在Eclipse中与mybatis进行关联,这样就能看到源码以及注释了,有助于学习。
方法:如图,双击mybatis包中的一个类,右边出现Attach Source按钮,点击之,选中Mybatis的源码(打包的zip文件),关联以后,就可以看到源码了。
源码如下:
鼠标放到某一个类或借口上,可以看到源码中写的注释:
然后建立一个Java工程,建立如下的包和目录,并Build Path,将Mybatis相关的包都引入,还有一个MySQL驱动包也需要引入,因为需要连接数据库。
二. 各个文件中的内容以及解析
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="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://192.168.0.5:3306/test" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/TestManageTypeMapper.xml" />
</mappers>
</configuration>
该配置文件分为两部分,第一部分是mysql数据库的相关配置信息,后面是Java bean类对应的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">
<mapper namespace="com.zkm.learn.mybatis.bean.TestManageTypeMapper">
<select id="selectTestManageType" resultType="com.zkm.learn.mybatis.bean.TestManageType">
select * from test_manage_type where MANAGE_TYPE_ID = #{id}
</select>
</mapper>
namespace写成什么无所谓,这里写成java类的包名加上TestManageTypeMapper,即类名加Mapper。resultType是在调用该方法时返回的数据类型,这里写Bean类的全名。Select语句就是该方法执行的SQL语句。这里要与调用时的方法对应着看。
三. 启动测试
新建上图所示的Junit测试类MybatisTest,内容如下:
public class MybatisTest {
@Before
public void befores(){
System.out.println(new Date());
}
@Test
public void test() throws IOException {
// fail("Not yet implemented");
String resource = "conf/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
try{
String id = "4028804c599cdafd0159a1ccbb19004e";
TestManageType type = sqlSession.selectOne("com.zkm.learn.mybatis.bean.TestManageTypeMapper.selectTestManageType", id);
System.out.println(type);
}finally{
sqlSession.close();
}
}
}
该文件首先载入配置文件mybatis-config.xml,然后获取session,执行session的方法selectOne,注意该方法第一个参数上述TestManagerTypeMapper.xml配置文件中的namespace加上select id,后面是表的ID,返回值就是配置文件指明的类。
四.接口式编程
上述方法是以前的使用方法,更先进的是接口式编程,首先建立一个及接口,如下所示:
然后对配置文件XXXmapper.xml进行修改,将里面的namespace改为接口的全类名,select标签的id与接口中方法名称相对应,如下所示:
再写一个测试类:
sqlSessionFactory因为经常使用,已经在类中处理过了,将其定义为类的属性,在@Before方法中获取了。注意看这个方法,首先获取mapper接口,然后调用该接口的方法获取对象。请注意没有为此接口写实现类,实际上Mybatis根据提供的信息自动生成了一个代理对象class $proxy.
五.总结
1.传统的接口编程,都是给接口写实现类,如Dao--->DaoImpl,而现在Mybatis会为接口生成代理类,不用写实现类。
2.sqlsession代表和数据库的一次会话,用完必须关闭
3.sqlsession和数据库的Connection一样,都不是线程安全的,每次使用都应该获取新的对象
4.不用为mapper接口写实现类,mybatis会为它生成一个代理对象。TestManageTypeMapper mapper = sqlSession.getMapper(TestManageTypeMaper.class);
5.两个重要配置文件:
mybatis-config:这是mybatis全局配置文件,包括了数据库连接池,事物配置等信息。
sql映射文件XXXmapper.xml:上面那个文件可以没有,这个必须要有。就是通过这个文件将SQL抽取出来。
本文来自博客园,作者:鱼儿快快飞,转载请注明原文链接:https://www.cnblogs.com/bibibobobaoxiang/p/9275812.html