提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
1. dao层
起初,没有学 orm( object relation mapping ) 框架的时候, 写项目使用的是: JdbcTemplate 模板进行操作数据库。
- 起初使用jdbc ,创建 connection 对象 进行获取数据,但是麻烦,浪费资源。所以使用了 数据库连接池技术。如:Druid 德鲁伊
- 创建 数据库连接池对象,数据库的密码,账号写入到该对象中,进行获取connenction进行使用。
- 由于耦合的问题,将配置:数据库的密码,账号等配置,写在了 properties文件中,使用classLoader加载注入到 数据库连接池对象当中去。
- 封装一个工具类,获取connection对象,执行对应的sql即可。
- 在使用 JdbcTemplate 小工具简化 jdbc获取数据的流程,只关注写sql,获取数据即可。daoImpl包中写对应的sql。
mybatis 的流程:
上述问题:使用JdbcTemplate 小工具 后, sql 语句就与 Java 代码 耦合了(写在了java代码中了),而且到时候项目上线了,需要对sql进行优化修改的话,就需要对java的源代码进行修改,是不符合情况的。
那么,将sql写在 配置文件中。 解决了高耦合问题。
上面是:思想
- 导入 mybaits 的jar包 , 需要使用mybatis 框架 ,需要写一个 mybatis 核心配置文件,一个是mapper映射文件(专门写sql 语句的文件)
- mybatis 底层也是需要使用 数据库连接池技术的。
- mybatis 核心配置文件 写 数据库 的配置:密码等,全局配置文件:有数据源一些运行环境信息,映射文件的位置等
导入依赖:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
<scope>runtime</scope>
</dependency>;https://mybatis.org/mybatis-3/zh/index.html
创建MyBatis的配置文件,并创建好test类来创建sqlSessionFactory 使用:
- 加载mybatis全局配置文件,来创建一个SqlSessionFactory对象
- sqlSession 对象根据 全局配置文件中指定的mapping映射文件中进行查询对应的sql 进行执行。 根据id进行查询,写了namespace的话,一起写。namespace.id
@Test
public void test() throws IOException {
String resource = "MyBatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
Employee o = sqlSession.selectOne("com.Mybatis.EmployeeMapper.selectEMP", 1);
System.out.println(o);
sqlSession.close();
}
修改
Employee o = sqlSession.selectOne("com.Mybatis.EmployeeMapper.selectEMP", 1);
Employee o = sqlSession.selectOne("com.Mybatis.EmployeeMapper.selectEMP", "abc");参数类型无法判断
一起的版本是上面这样获取数据的,由于 无法判断数据的类型,所以使用了接口式编程
一个接口对应的映射文件。映射文件的namespace写接口全类名,id写对应的方法名。即可。
EmployeeMapperDap mapper = sqlSession.getMapper(EmployeeMapperDap.class); 可以获取对应的代理对象直接执行sql。
这种方法怎么找到对应的sql 的???
- 指定了sql的映射位置的,在mybatis全局配置文件中。
- 根据接口的class对象,可以获取它的全类名,对比映射文件中的namespace 的值,执行的方法可以对应映射文件中的id,就可以找到执行的sql语句了。
|