Mybatis
第一天
框架
- 软件开发中的一套解决方案,不砼框架解决不同的问题
Mybatis概述
- 它封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,无需关注注册驱动等繁杂的过程
- 使用了ORM思想实现了结果集的封装
ORM
- Object Relational Mapping对象
- 将数 据库和实体类及实体类的属性属性对应起来
- 让我们可以操作实体类就实现操作数据库表
Mybatis环境搭建
- 创建maven工程导入坐标
- 创建实体类和dao的接口
- 创建mybatis的主配置文件
- 创建映射配置文件
方法细节
-
导入jar包
-
导入mysql(主配置文件)
-
配置环境(配置过程中必须要说明返回到那里去,否则无法执行)
-
<enviroments default="mysql">
-
-
配置事务的类型
-
<transactionManager type="JDBC"></transactionManager>
-
-
配置数据源
-
<dataSource type="POOLED"></dataSource>
-
-
配置数据库的四个连接基本信息
-
<property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://lovcalhost:3306/xxxx"/> <property name="suername" value="root"/> <property name="password" value="root"/>
-
-
-
指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件
-
<mappers> <mapper> </mapper> </mappers>
-
注意事项
- UserDao和UserMapper一样
- 创建目录的时候和包不一样
- mybatis的映射配置文件配置必须和dao接口的结构相同
- 映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
- 映射配置文件的操作配置(select),ID属性的取值必须是dao接口的方法名
- 遵循三四五之后,我们在开发中就无须再写dao的实现类
执行顺序
-
读取配置文件
-
InputStream in - Resources.getResourceAsStream("需要解析的文件.xml");
-
-
创建sqlSeaasionFactory对象
-
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in);
-
-
使用工厂生产sqlSession对象
-
SqlSesson session = factory.openSession();
-
-
使用sqlsession创建DAO层的代理对象
-
IUserDao userDao = session.getMapper(IUserDao.class);
-
-
使用代理对象执行方 法
-
List<User> users = userDao.finfAll(); for(User user : users){ System,out.pringtln(user); }
-
-
释放资源
-
session.close(); in.close();
-
-
不要忘记在映射配置中告知mybatis要封装到那个实体类中。配置的方法:指定实体类的全限定类名
mybatis基于注解
- 把UserDao.xml移除,在dao接口的方法中使用@Select注解,并且指定sql语句
明确
- 我们在实际开发中,越简洁越好,所以都不采用写dao实现类的方式
自定义mybatis的分析
- 第一
- 创建代理对象
- 第二
- 在代理对象中调用selectList
根据dao接口的字节码创建dao的代理对象
- 类加载器:
- 使用的和被代理对象是相同的类加载器
- 代理对象要实现的接口:
- 和被代理对象事项相同的接口
- 如何代理
- 就是增强方法,我们需要自己来提供
- 此处是一个invocationHandler的接口,需要写一个接口的实现类
- 再次实现类中调用selectList方法
好处
- 使用框架可以极简的方式实现功能。提高开发效率
三层架构
表现层
- 展示数据的
业务层
- 处理业务的
持久层
- 和数据库交互的
持久层技术解决方案
JDBC技术(是规范)
- Connection
- PreparedStatment
- ResultSet
Spring的jdbcTemplate(工具类)
- Spring的jdbc的简单封装
Apache的DBUtils(工具类)
- 他和Spring的jdbcTemplate很像,也是对jdbc的简单封装
第二天
OGNL表达式
object graphic navigation language(对象图导航语言)
- 他通过对象的取值方法来获取数据,在写法上把get给省略了
- 比如:
- 类中的写法:
- user.getUsername();
- OGNL中的写法:
- user.username
- 类中的写法:
- 由于parameterType中已经提拱了属性所属的类,所以此时不需要写对象名
PreparedStatement对象的执行方法
execute
- 能执行CRUD中的任何一种语言。它的返回值是一个boolean类型,表示是否有结果,有结果集为ture,没有结果集为false
executeUpdate
- 它只能执行CUD语句,查询语句无法执行。他的返回值是影响数据库记录的行数
executeQyery
- 它只能执行SELECT语句,无法执行则删改查,执行结果封装的结果集ResultSet对象