什么是MyBatis
MyBatis源自Apache的iBatis开源项目, 从iBatis3.x开始正式更名为MyBatis。它是一个优秀的持久层框架。
为什么使用MyBatis
为了和数据库进行交互,通常的做法是将SQL语句写在Java代码中,SQL语句和Java代码耦合在一起不利于后期维护修改,而MyBatis能够帮助我们将SQL语句和Java代码分离,方便了后期因需求变动而对SQL语句进行修改。(联系properties文件的作用)
如何使用MyBatis
- 引入jar包
- 创建一个接口,采用模块化开发的方式对应数据库中的一张表
public interface IUserInfoDao {
//这里我们定义一个抽象方法,通过id字段来获取user_name字段
String getUserName(String id);
}
- 接下来创建与配置xml文件
- 先来配置user_info模块的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="live.sunhao.userinfo.dao.IUserInfoDao">
<!-- 这是一个select标签 对应着select语句 这里的id对应着接口中的方法名,resultType是返回值类型 #{id}对应着方法中传入的参数值-->
<select id="getUserName" resultType="java.lang.String">
select user_name from user_info where id=#{id}
</select>
</mapper>
- 再来配置整个项目的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="test"><!-- 这里default决定默认使用哪个环境,如下有两种环境 一个用来测试(test) 一个是正式开发的环境(dev) -->
<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>
<environment id="dev">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:keeper" />
<property name="username" value="root" />
<property name="password" value="root" />
</dataSource>
</environment>
</environments>
<!-- 这里将每个模块的xml文件 配置到整个项目的xml文件中,我这里暂时就一个模块 -->
<mappers>
<mapper resource="user_info.xml"/>
</mappers>
</configuration>
- 写一个测试类
public class Test {
public static void main(String[] args) {
try {
InputStream inputStream = Resources.getResourceAsStream("mybatis_config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//SqlSession对象代指一次数据库连接
SqlSession sqlSession = sqlSessionFactory.openSession();
IUserInfoDao userInfoDao = sqlSession.getMapper(IUserInfoDao.class);
System.out.println(userInfoDao.getClass().getName());
String userName = userInfoDao.getUserName("3ddcf637-15a8-49d9-a378-b3fa2f2f9c65");
System.out.println(userName);
} catch (IOException e) {
e.printStackTrace();
}
}
}
最后看一下控制台输出:
我们可以看到这里是JDK动态代理,userInfoDao是代理类对象,自动实现了我们创建的接口,从而实现了通过36位id找到user_name