MyBatis实现

使用MyBatis方便对java中的SQL语句进行管理,能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。下面给大家演示一下MyBatis的实现。

要实现我们需要MyBatis的jar包。下载地址https://github.com/mybatis/mybatis-3/releases

首先在数据库中建立几条记录

创建一个IUserInfo的接口,声明一个由id获得name的抽象方法。

public interface IUserInfoDao {
	String getUserName(String id);
}

创建xml文件命名为user_info.xml,在文件中输入下列代码。此时这个xml文件对应user_info表

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空间为接口的地址 -->
<mapper namespace="com.jd.userinfo.dao.IUserInfoDao">
	<!-- 查询使用select标签,id与抽象方法名相同,resultType为返回值类型 -->
	<select id="getUserName" resultType="java.lang.String">
		select user_name from user_info where id=#{id}		
	</select>
</mapper>

创建xml文件,命名为mybatis_config.xml,在文件中输入下列代码,此时这个xml为myBatis配置文件

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置数据库 -->
	<environments default="test">
		<environment id="test">
			<transactionManager type="JDBC"></transactionManager>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/test"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
        <!-- 对mapper进行注册-->
	<mappers>
		<mapper resource="user_info.xml"/>
	</mappers>
</configuration>

注意environments标签里可以有很多environment,标签里的default属性为某个environmentid,表明要使用哪一个数据库

而前面对数据库进行操作的xml文件需要在mappers里进行注册才能进行启用

 

这里注意两个XML前面的声明类型不一样。一个为mapper,而另一个为configuration

创建Test类进行测试如下代码

public static void main(String[] args) {
		try {
			InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml");
			SqlSessionFactory sqlSessionFactory = new  SqlSessionFactoryBuilder().build(inputStream);
			SqlSession sqlSession = sqlSessionFactory.openSession();
			IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);
			System.out.println(userInfoDao.getClass().getName());
			String userName = userInfoDao.getUserName("7eb9deed-ec87-416e-abb3-1a5a2ce819de");
			System.out.println(userName);
			sqlSession.close();			
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

上述代码SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);运行时就会创建sqlSession工厂,依照顺序去寻找全局配置文件mybatisconfig,找到mapper文件,然后找到Dao文件,然后给Dao创建代理类及代理对象。

sqlSession对象代指一次数据库连接。

运行结果:

注意一个问题,我们之前虽然创建了接口但是我们并没有创建实现接口的实现类。而从输出可以看出userInfoDao是一个代理类。这说明了getName这个方法由代理类实现了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章