以前时间太赶,学东西没有系统,现在回头看,好多东西当时会用记住了,问题解决了。但是现在又遇到同样的问题还是从头开始。所以现在记录到博客上,进行归纳。
以下是初步认识 dao 层 框架mybatis的基本使用。
dao层 使用jdbc 对数据进行CURD,但是
1、数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
2、Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大,sql 变动需要改变 java 代码。
3、使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能 多也可能少,修改 sql 还要修改代码,系统不易维护。
4、对结果集解析存在硬编码(查询列名),sql 变化导致解析代码变化,系统不易维护,如果能将数据库记 录封装成 pojo 对象解析比较方便。
下面讲解如何进行简单配置:
- 基本思路是 : java需要的 物料
1 javaBean 提供 pojo 属性 如User.java
2 dao 接口 IUserDao 也可以写成 UserDao 或者 UserMapper
3 mapper.xml IUserDao.xml
要求:
创建位置:必须和持久层接口在相同的包中。
名称:必须以持久层接口名称命名文件名,扩展名是.xml
4 sqlMapConfig.xml
5 pom.xml 引入jar坐标
6 测试类测试
- mysql 提供物料: 建表 提供假数据
结构图:
如果是注解式开发。相当于舍去IUserDao.xml 。而在接口的方法上加上注解和sql 语句。改 SqlMapConfig.xml 不是xml 的resource 属性,而是class 属性 。
再 对应 IUserDao.xml配置文件中编写 语句,在IUserDao.java对用方法id.
再次注意:持久层接口和持久层接口的映射配置必须在相同的包下
下图是mybatis使用 传值参数、返回值、占位符等时候的问题
#{} 与 ${} 区别 。一个是占位符相当于JDBC 中? . 一个是固定写法,代表传入的参数的值
使用聚合函数 max min count avg sum
java 属性名和数据库列对应关系:
或者:建立对应关系再查询。(常用)
以下是 SqlMapConfig.xml配置文件 中:
1 typeAliases(类型别名
2 SqlMapConfig.xml 中配置的内容和顺序
3 配置数据连接:
3.1
3.2 或者
db.properties 文件 和 sqlmapConfig.xml
mybatis 自带连接池。事务 自动提交默认关闭,所以前面 需要手动 session.commit();
我们也可以设置自动提交,那就是在factory.openSession( true) .
这样后面就不用手动提交了。
下面是 mybatis 特有的动态sql 处理方式,遇到复杂逻辑进行 使用。支持OGNL 和其他元素 if where foreach。。。
或者不用 1=1
那么需要遍历指定限制的集合:用foreach