2.创建对应的javaBean
3.创建mybatis配置文件,sql映射文件
4.测试
mybatis操作数据库
1.创建mybatis全局配置文件mybatis全局配置文件包含了影响mybatis行为的设置和属性信息,如数据库连接池信息
<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEconfiguration
PUBLIC"-//mybatis.org//DTDConfig3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC"/>
<dataSourcetype="POOLED">
<propertyname="driver"value="com.mysql.jdbc.Driver"/>
<propertyname="url"value="jdbc:mysql://localhost:3306/mybatis"/>
<propertyname="username"value="root"/>
<propertyname="password"value="123456"/>
</dataSource>
</environment>
</environments>
</configuration>
2.创建sql映射文件
作用: 相当于定义Dao接口的实现类如何工作
如何运行: 1>.根据xml配置文件, 利用SqlSessionFactoryBuilder创建一个SqlSessionFactory对象 有数据源一些运行环境信息
SqlSessionFactorysqlSessionFactory=getSqlSessionFactory();
Public SqlSessionFactory getSqlSessionFactory()throws IOException{
String resource="mybatis-config.xml";
InputStreaminputStream=Resources.getResourceAsStream(resource);
Return newSqlSessionFactoryBuilder().build(inputStream);
}
2>使用SqlSessionFactory获取sqlSession实例,一个SqlSession对象代表和数据库的一次会话,能直接执行已经映射的sql语句
SqlSessionopenSession=sqlSessionFactory.openSession();
3>使用SqlSession根据方法id进行操作
Employee employee = openSession.selectOne(
"com.kwy.mybatis.EmployeeMapper.selectEmp", 1);
这个就存在一个问题, 每次要增删改查, sqlid很长. 而selectOne,我们也知道, 后面可以是对象啊,如果上面我把1换成了字符串"abc", 数据库中类型不应该, 肯定有问题呀. 接下来mybatis就给我们提供了一个更高级一点的方式:使用接口, 接口来描述给定的sql语句和返回值.
1.创建一个Dao接口
2.修改mapper文件
3.测试
使用SqlSession获取映射器进行操作
与上面的区别就是替换了第三步:
//获取接口的实现类对象
//会为接口自动的创建一个代理对象,代理对象去执行增删改查方法
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
Employee employee=mapper.getEmpById(1);
小结
1.接口式编程:
原生: Dao --->DaoImpl
mybatis: Mapper --->xxMapper.xml
2. 在这个过程中, 有一个非常重要的对象 SqlSeesion代表和数据库的一次会话. 每次使用完成后需要正确关闭,这个关闭操作是必须的. 同时它不是线程安全的.所以不能共享.不能这么写: private SqlSession sqlSession, 有可能A线程把这个sqlSession用了,给关了, B线程还去拿它了.
3.mapper接口没有实现类,mybatis会为这个接口生成一个代理对象(接口和xml绑定)
4.这里有两个重要的配置文件
一个是我们称之为:全局配置文件,包含数据库连接池信息,事务管理器信息等系统运行环境信息
当然也可以不用这个全局配置文件, 但是一定包含了系统运行信息了.
sql映射文件: 保存了每一个sql语句的映射信息. 将sql抽取出来.关键部分抽取出来,不像hibernate整个都是黑箱子.