按照MyBatis的官方文档,写了第一个MyBatis程序,使用了接口式编程
一、接口式编程
项目文件结构,这里没有给各个层单独建包,实际应该单独建包
1、sqlsession代表和数据库的一次会话,用完必须关闭
2、sqlsession和connetcion是非线程安全的,每次都要获取新的对象
3、mapper接口没有实现类,但是mybatis回味这个接口生成一个代理对象
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
(接口和xml进行绑定)
4、两个重要配置文件:
mybatis全局配置文件:包括数据库连接池信息,事务管理器信息,系统运行环境等信息;
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mybatis?serverTimezone=Asia/Shanghai"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--将写好的sql映射文件注册到全局配置文件中-->
<mappers>
<mapper resource="conf/EmployeeMapper.xml"/>
</mappers>
</configuration>
sql映射文件:保存了每一个sql语句的映射信息,将sql抽取出来。
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.uestc.mybatis.EmployeeMapper">
<!--namespace:名称空间
id唯一标识
resultType:返回值类型
#{id}:从传递过来的参数中取出id值
public Employee getEmpById(Integer id);
-->
<select id="getEmpById" resultType="com.uestc.mybatis.Employee">
select * from tbl_employee where id = #{id}
</select>
</mapper>
5、其他
接口式定义
```java
public interface EmployeeMapper {
public Employee getEmpById(Integer id);
}
测试类
@Test
public void test01() throws IOException {
/*根据xml配置文件创建一个SqlSessionFactory对象*/
String resource = "conf/mybatis_config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取sqlsession实例,能够直接执行已经映射的sql语句
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
Employee employee = mapper.getEmpById(1);
System.out.println(employee);
}finally {
openSession.close();
}
}