采用 Mybatis 的代理开发方式实现 DAO 层的开发
Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper 接口开发需要遵循以下规范:
1) Mapper.xml文件中的namespace与mapper接口的全限定名
相同
2) Mapper接口方法名和Mapper.xml中定义的每个statement的id
相同
3) Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型
相同
4) Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型
相同
1.程序员负责定义接口
2.在操作数据库,mybatis框架根据接口,通过动态代理的方式生成代理对象,负责数据库的crud操作
public Student selectById(Integer id) {Student stu = null;SqlSession sqlSession = null;InputStream is = null;try{//1.加载核心配置文件is = Resources.getResourceAsStream("MyBatisConfig.xml");//2.获取SqlSession工厂对象SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);//3.通过工厂对象获取SqlSession对象sqlSession = sqlSessionFactory.openSession(true);//4.获取StudentMapper接口的实现类对象StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); // StudentMapper mapper = new StudentMapperImpl();//5.通过实现类对象调用方法,接收结果stu = mapper.selectById(id);} catch (Exception e) {} finally {//6.释放资源if(sqlSession != null) {sqlSession.close();}if(is != null) {try {is.close();} catch (IOException e) {e.printStackTrace();}}}//7.返回结果return stu;}
根据实体类的不同取值,使用不同的 SQL语句来进行查询。比如在 id如果不为空时可以根据id查询,如果username 不为空时还要加入用户名作为条件
:条件标签。如果有动态条件,则使用该标签代替 where 关键字。
:条件判断标签。
查询条件拼接
循环执行sql的拼接操作
:循环遍历标签。适用于多个参数或者的关系。获取参数
属性
collection:参数容器类型, (list-集合, array-数组)。
open:开始的 SQL 语句。
close:结束的 SQL 语句。
item:参数变量名。
separator:分隔符。
将重复的 sql 提取出来,使用时用 include 引用即可
- :抽取 SQL 语句标签。
- :引入 SQL 片段标签。 抽取的 SQL 语句
1.目前使用的 MyBatis 是不带分页功能的,如果想实现分页的 功能,需要我们手动编写 LIMIT 语句。但是不同的数据库实现分页的 SQL 语句也是不同的,所以手写分页 成本较高。这个时候就可以借助分页插件来帮助我们实现分页功能。
2.PageHelper:第三方分页助手。将复杂的分页操作进行封装,从而让分页功能变得非常简单
①导入与PageHelper的jar包
②在mybatis核心配置文件中配置PageHelper插件
③测试分页数据获取
@Test
public void testPageHelper(){//设置分页参数PageHelper.startPage(1,2);List select = userMapper2.select(null);for(User user : select){System.out.println(user);}
}
//其他分页的数据
PageInfo pageInfo = new PageInfo(select);
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页:"+pageInfo.getPageNum());
System.out.println("每页显示长度:"+pageInfo.getPageSize());
System.out.println("是否第一页:"+pageInfo.isIsFirstPage());
System.out.println("是否最后一页:"+pageInfo.isIsLastPage());
分页:可以将很多条结果进行分页显示。
分页插件 jar 包: pagehelper-5.1.10.jar jsqlparser-3.1.jar
分页助手相关 API
1.PageHelper:分页助手功能类。
:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含对象的映射关系标签。property 属性:被包含对象的变量名javaType 属性:被包含对象的数据类型
:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型
:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型:配置主键映射关系标签。:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型
:配置字段和对象属性的映射关系标签。id 属性:唯一标识type 属性:实体对象类型
:配置主键映射关系标签。
:配置非主键映射关系标签。column 属性:表中字段名称property 属性: 实体对象变量名称
:配置被包含对象的映射关系标签。property 属性:被包含对象的变量名javaType 属性:被包含对象的数据类型
:配置被包含集合对象的映射关系标签。property 属性:被包含集合对象的变量名ofType 属性:集合中保存的对象数据类型
上一篇:泰克示波器采样率问题解答