说明:正式进入项目项目开发环节,搭建基础架构,作为第一部分完成与数据库代码的封装
目录
一 搭建基础架构
1 完成与数据库代码的封装
一 搭建基础架构
1 完成与数据库代码的封装
增加MyBatisUtils框架的依赖
引入mysql的jdbc驱动
引入junit单元测试及logback日志输出组件
创建mybatis-config.xml
加上声明和dtd
开启驼峰命名转换
描述与环境配置相关的选项:
dev代表开发环境
事务管理器选择jdbc
DataSource type 代表采用什么方式进行连接的管理输入POOlED代表采用连接池的形式管理
设备驱动类的名字为driverClassName 引入jdbc驱动类
url代表链接字符串
用户名 username
密码 password
加载xml文件 新增子包 utils代表工具类
新增MybatisUtils用于加载xml文件,并且提供一些数据处理的方法
通过静态变量声明一个sqlSessionFactory工厂类
通过static静态块对其进行初始化
通过javaio中的reader读取xml文件,形成字符的输入流,通过SqlSessionFactoryBuilder传入reader
构建出sqlSessionFactory对象
捕捉异常
初始化过程中的异常
//利用静态块在初始化类时实例化sqlSessionFactory static { Reader reader = null; try { //读取mybatis-config.xml reader = Resources.getResourceAsReader("mybatis-config.xml"); //构建SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { //初始化错误时,通过抛出异常ExceptionInInitializerError通知调用 throw new ExceptionInInitializerError(e); }
初始化后额外增加两个方法
打开会话和关闭会话,每一次都要手动开启和关闭,如果有一个步骤遗忘后果都非常严重。为了解决这个问题,我们可以对打开和关闭进行封装,使其自动开启,那么如何书写呢?那就要用到之前学习的lambda表达式以及函数式接口。
写一个简单的执行查询方法
Function是我们之前学习的函数式接口要求有两个泛型
第一个代表传入的参数是什么 传入sqlsession
第二个代表返回值是什么 传入object
参数名定义为func
执行前获取对应的session对象,通过opensession获取session对象
最核心的一句话,传入sqlsession参数,返回
我们要执行关闭语句,但这并不靠谱,因为在apply方法运行过程中会报异常,出现异常就会中断停止执行接下来的语句。导致数据库泄露无法关闭。
为了确保一定会被执行到,要利用try对其进行包裹,用finally直接调用sqlsession方法来进行关闭
try catch finally中catch块是可以被忽略的捕捉后无论异常还是怎样都会执行finally的关闭操作
executeQuery用于执行查询,但没有规定执行什么查询?从那个表中进行查询?在这里都被封装成Function函数式接口,利用Function屏蔽执行查询的细节。用函数式接口自己定义来查询什么数据。
executeQuery方法最核心的处理就是保证查询前获取到Sqlsession对象并传入到当前的Function中,这样内侧的Function就可以通过sqlsession对象来进行操作了。
无论操作与否都会执行sqlsession.close()方法来完成数据库连接释放的工作,这就是函数式接口在项目中的经典应用。



