当前位置: 首页 > 工具软件 > go-plus > 使用案例 >

Mybatis\Mybatis-plus笔记

公羊浩阔
2023-12-01

Mybatis

第一章 框架的概述

1.三层架构


mvc: web开发中,使用MVC架构模式。m:数据,v:视图,c:控制器。

​ c控制器:接受请求,调用service对象,显示请求的处理结果。当前使用servlet作为控制器。

​ v视图:现在使用jsp,HTML,css,js。显示请求的处理结果,把m中数据显示出来

​ m数据:来着数据库MySQL,来自文件,来自网络。

MVC作用:

​ 1)实现解耦

​ 2)让MVC各负其职

​ 3)使的系统扩展更好,更容易维护。

三层架构:

​ 1.界面层(视图层):接收用户的请求,调用service,显示请求的处理结果的。包含了jsp,HTML,servlet等对象, 对应包controller。

​ 2.业务逻辑层:处理业务逻辑,使用算法处理数据。把数据返回界面层。对应的是service包和包中的很多的XXXService类。

​ 3.持久层(数据库访问层):访问数据库,或者读取文件,访问网络,对应的包是dao。dao包中包含了很多的XXXDao。

2.三层架构请求的处理流程


用户发起请求—>界面层—>业务逻辑层----->持久层------>数据库

3.为什么要使用三层


1.结构清晰,耦合度低,各层分工明确。

2.可维护性高,可扩张性高

3.有利于标准化

4.开发人员可以只关注整个结构中的其中某一层的功能实现

5.有利于各层逻辑的复用

4.三层架构模式和框架


每一层对应着一个框架

​ 1)界面层-- SpringMVC框架

​ 2)业务层–Spring框架

​ 3) 持久层–Mybatis框架

5.Mybatis框架


​ Mybatis是一个优秀的基于Java的持久层框架,内部封装了jdbc,开发者只需要关注sql语句本身,而不需要处理加载驱动、创建连接、创建statement、关闭连接。

6.框架


1)什么是框架(framework)

​ 框架:就是一个软件,完成了部分的功能。软件中的类和类之间的方法调用都已经规定好了。通过这些可以完成某些功能。框架看做是模板。

​ 框架是可以升级的、改造的。框架是安全的。

​ 框架是对某一方面有用的,不是全能的。

7.框架解决的问题


1)框架能实现技术的整合。

2)框架能够提高开发效率,降低难度。

8. Mybatis-plus配置日志文件

第一种:

mybatis-plus:
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
	#配置日志文件
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl 

第二种:

 @Bean("sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        // 导入mybatissqlsession配置
        MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        // 指明数据源
        sessionFactory.setDataSource(multipleDataSource(dataSource0(), dataSource1(), dataSource2()));
        // 指明mapper.xml位置(配置文件中指明的xml位置会失效用此方式代替,具体原因未知)
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:/mapper/**Mapper.xml"));
        // 指明实体扫描(多个package用逗号或者分号分隔)
        sessionFactory.setTypeAliasesPackage("gsa.geographic.system.entity");
        // 导入mybatis配置
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setJdbcTypeForNull(JdbcType.NULL);
        configuration.setMapUnderscoreToCamelCase(true);
        configuration.setCacheEnabled(false);
        // 配置打印sql语句
        configuration.setLogImpl(StdOutImpl.class);
        sessionFactory.setConfiguration(configuration);
        // 添加分页功能
        sessionFactory.setPlugins(new Interceptor[]{
                paginationInterceptor()
        });
        // 导入全局配置
        sessionFactory.setGlobalConfig(globalConfiguration());
        return sessionFactory.getObject();
    }​

9.原生分页(IPage)

 Page<LoginEntity> page=new Page(pageNum,pageSize);
 IPage<LoginEntity> iPage=loginMapper.selectLoginInfo(page,searchInfo);

注意事项:

  • Dao/Mapper层返回数据格式为IPage 对象
  • 持久层方法Page必须为第一个参数,不然会报异常

Mybatis-puls–多表分页查询(使用QueryWrapper)

  • controller层
 @PostMapping("get-leave-info")
    public Response getLeaveInfo(@RequestBody LeaveEntity entity){
        if ("".equals(entity.getPageNum()) || null == entity.getPageNum() || null == entity.getPageSize())
            return ResponseUtil.failed(StatusCode.FAIL_PAGE);
        IPage<LeaveEntity> iPage=leaveService.getLeaveInfo(entity);
        return ResponseUtil.success(iPage);
    }
  • Service-impl
 @Override
    public IPage<LeaveEntity> getLeaveInfo(LeaveEntity entity) {
        Page<LeaveEntity> page=new Page<>(entity.getPageNum(),entity.getPageSize());
        QueryWrapper<LeaveEntity> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("e.del",entity.getDel());
        IPage<LeaveEntity> iPage = leaveMapper.getLeaveInfo(page,queryWrapper);
        return iPage;
    }
  • Mapper
IPage<LeaveEntity> getLeaveInfo(@Param("page") Page<LeaveEntity> page, @Param(Constants.WRAPPER) Wrapper wrapper);
  • xml
 <resultMap id="leaveEntity" type="com.greatyu.demo.entity.LeaveEntity">
        <result column="id" property="id"></result>
        <result column="username" property="username"></result>
        <result column="name" property="name"></result>
        <result column="start_time" property="startTime"></result>
        <result column="end_time" property="endTime"></result>
        <result column="create_time" property="createTime"></result>
        <result column="go_to_addr" property="goToAddr"></result>
        <result column="phone" property="phone"></result>
        <result column="reason" property="reason"></result>
        <result column="remarks" property="remarks"></result>
        <result column="state" property="state"></result>
        <result column="del" property="del"></result>
        <association property="userInfo"  javaType="com.greatyu.demo.entity.UserParentInfo">
            <result column="username" property="username"></result>
            <result column="user_class" property="userClass"></result>
            <result column="college" property="college"></result>
            <result column="major" property="major"></result>
            <result column="dorm" property="dorm"></result>
            <result column="instructor" property="instructor"></result>
        </association>
    </resultMap>
     
<select id="getLeaveInfo" resultMap="leaveEntity">
        select e.*,
               u.user_class,
               u.college,
               u.major,
               u.major,
               u.dorm,
               u.instructor
        from ep_leave e left join  users u on  e.username = u.username
                   where del = 0
        <if test="ew.sqlSegment != null and ew.sqlSegment != ''">
            AND ${ew.sqlSegment}
        </if>
        order by e.create_time desc
    </select>

  • QueryWrapper 条件查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eLBbhrSt-1656057670187)(E:\资料\学习笔记\Mybatis或Mbatis-plus\image\t1.png)]

 类似资料: