简介
MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
配置与使用
- 引入相应的jar包 mybatis基本包,mysql驱动包,log4j日志包
- 建立dao层,dao层需要一个接口文件和一个xml文件,接口文件的文件名要和xml文件名一模一样
- 建立mybatis的配置文件
a.配置数据源 详情请看xml文件
b.配置dao层的xml文件 - 在dao层写接口,写响应的sql调用的方法
- 测试sql语句
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>
<!--相关的设置-->
<settings>
<!--mybatis log4j的日志 -->
<setting name="logImpl" value="LOG4J" />
</settings>
<!--所有的数据源
default指定默认的数据源 填入数据源的ID
-->
<environments default="mysqlDataSource">
<!--单个数据源-->
<environment id="mysqlDataSource">
<!--事务类型 -->
<transactionManager type="JDBC"></transactionManager>
<!--数据连接池-->
<dataSource type="POOLED">
<!--数据源的4个配置 驱动,地址,用户名,密码-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/emp"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 注册dao层 -->
<mappers>
<!--单个注册dao分为 源代码注册和资源文件(xml)注册-->
<mapper class="com.dao.IEmpDao"></mapper>
<!--<mapper resource="com/dao/IEmpDao.xml"></mapper>-->
</mappers>
</configuration>
public interface IEmpDao {
/*查询所有的Emp*/
public List<Emp> findAllEmp();
//根据ID查询人员
public Emp findByID(int empno);
}
IEmpDao.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来指定 全路径-->
<mapper namespace="com.igeek.dao.IEmpDao">
<!--指定我的sql语句
id 代码接口中方法名
resultType 返回值的类型(泛型)
parameterType 参数类型
-->
<select id="findAllEmp" resultType="com.entity.Emp">
select * from emp
</select>
<select id="findByID" resultType="com.entity.Emp" parameterType="int">
select * from emp where empno = #{empno}
</select>
</mapper>
public class MybatisUtil {
public static SqlSession getSession(){
//1.加载mybatis的配置文件
//mybatis提供了读取配置文件输入流的工具类
InputStream is = null;
try {
is = Resources.getResourceAsStream("mybatis-config.xml");
} catch (IOException e) {
e.printStackTrace();
}
//2.SqlSessionFactory mybatis的工厂类
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.SqlSession mybatis查询组件(类似于原本JDBC连接)
SqlSession sqlSession =factory.openSession();
return sqlSession;
}
}
public class TestMybatis {
@Test
public void test1() throws IOException {
//1.加载mybatis的配置文件
//mybatis提供了读取配置文件输入流的工具类
//InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//2.SqlSessionFactory mybatis的工厂类
//SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//3.SqlSession mybatis查询组件(类似于原本JDBC连接)
//SqlSession sqlSession =factory.openSession();
//4.sqlSession动态生成dao层接口的实现类
// a.接口和xml文件一定要同名
// b.接口和xml文件一定要放在同一层目录
// c.一定要在mybatis的配置文件中注册这个dao
//通过工具类得到sqlSession
SqlSession sqlSession = MybatisUtil.getSession();
//5.得到实现类
IEmpDao dao = sqlSession.getMapper(IEmpDao.class);
List<Emp> emps = dao.findAllEmp();
System.out.println(emps);
IEmpDao dao = sqlSession.getMapper(IEmpDao.class);
Emp emp = dao.findByID(7654);
System.out.println(emp);
}
}