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。
用户发起请求—>界面层—>业务逻辑层----->持久层------>数据库
1.结构清晰,耦合度低,各层分工明确。
2.可维护性高,可扩张性高
3.有利于标准化
4.开发人员可以只关注整个结构中的其中某一层的功能实现
5.有利于各层逻辑的复用
每一层对应着一个框架
1)界面层-- SpringMVC框架
2)业务层–Spring框架
3) 持久层–Mybatis框架
Mybatis是一个优秀的基于Java的持久层框架,内部封装了jdbc,开发者只需要关注sql语句本身,而不需要处理加载驱动、创建连接、创建statement、关闭连接。
1)什么是框架(framework)
框架:就是一个软件,完成了部分的功能。软件中的类和类之间的方法调用都已经规定好了。通过这些可以完成某些功能。框架看做是模板。
框架是可以升级的、改造的。框架是安全的。
框架是对某一方面有用的,不是全能的。
1)框架能实现技术的整合。
2)框架能够提高开发效率,降低难度。
第一种:
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();
}
Page<LoginEntity> page=new Page(pageNum,pageSize);
IPage<LoginEntity> iPage=loginMapper.selectLoginInfo(page,searchInfo);
注意事项:
IPage
对象Page
必须为第一个参数,不然会报异常 @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);
}
@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;
}
IPage<LeaveEntity> getLeaveInfo(@Param("page") Page<LeaveEntity> page, @Param(Constants.WRAPPER) Wrapper wrapper);
<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>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eLBbhrSt-1656057670187)(E:\资料\学习笔记\Mybatis或Mbatis-plus\image\t1.png)]