当前位置: 首页 > news >正文

大鹏附近网站建设揭阳网站建设方案托管

大鹏附近网站建设,揭阳网站建设方案托管,基础的网站建设,泾阳做网站mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 ​ 缓存 是存在于内存中的临时数据#xff0c;使用缓存的目的是#xff1a;减少和数据库的交互次数#xff0c;提高执行效率。 2、mybatis 缓存 ​ mybatis 与 大多数的持久层框架一样#xff0c;提供了缓存策略…mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 ​ 缓存 是存在于内存中的临时数据使用缓存的目的是减少和数据库的交互次数提高执行效率。 2、mybatis 缓存 ​ mybatis 与 大多数的持久层框架一样提供了缓存策略通过策略减少数据库的查询次数从而提高性能。 3、mybatis 缓存分类 一级缓存二级缓存 二、一级缓存 1、一级缓存介绍 1描述 ​ mybatis 一级缓存是一种 session 级别的针对同一个会话SqlSession中执行多次条件完全相同的同一个SQL那么会共享这一个缓存。 2特点 自带的不能卸载SQLSession 级别的使用无需配置 2、一级缓存结构图 3、一级缓存示例代码 1项目结构和pom.xml、jdbc.properties、mybatisConfig.xml文件与mybatis03一样 2持久层接口 StudentMapper.java package com.etime.mapper;import com.etime.pojo.Student;import java.util.List;public interface StudentMapper {ListStudent getAllStudent(); }3持久层接口映射文件 StudentMapper.xml ?xml version1.0 encodingUTF-8? !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.etime.mapper.StudentMapperselect idgetAllStudent resultTypeStudentSELECT * FROM student/select/mapper4在mybatisConfig.xml文件中设置setting settings!--日志打印--setting namelogImpl valueSTDOUT_LOGGING/ /settings注意setting标签的位置 5编写测试方法 Testpublic void t01() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper studentMapper sqlSession.getMapper(StudentMapper.class);ListStudent list1 studentMapper.getAllStudent();list1.forEach(System.out::println);System.out.println(----------------------------------);ListStudent list2 studentMapper.getAllStudent();list2.forEach(System.out::println);sqlSession.close();}4、一级缓存分析 ​ 从上面的代码可以出我们写了两次查询操作但在访问数据时只有一次。 ​ 第一次先从一级缓存中获取因为session是新创建的一级缓存中没有数据于是就查询数据获取数据然后把查询的数据放到一级缓存中此时一定要注意的是一级缓存是一个Map集合map的key是你的查询条件字符串值就是查询出来的对象。 ​ 第二次查询时先从一缓存中获取因为上一次查询后已经放到一级缓存中了所以从一级缓存中获取到了就不用访问数据库了减少和数据次的一次交互提高了执行效率。 5、一级缓存的清空 代码 Test public void test01(){SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper studentMapper sqlSession.getMapper(StudentMapper.class);ListStudent list studentMapper.getAllStudent();// 清理以及缓存sqlSession.clearCache();list.forEach(System.out::println);System.out.println(--------------------------);ListStudent list2 studentMapper.getAllStudent();list2.forEach(System.out::println);sqlSession.close(); }结果 6、总结一级缓存清空三种方式 clearCache();执行数据库的操作delete、insert、update;手动提交事务commit(); 对于查询来说事务可以不提交。故使用该方式需考虑情况 三、二级缓存 1、二级缓存介绍 1描述 ​ 二级缓存是 mapper 映射级别的缓存多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句多个 SqlSession 可以共用二级缓存二级缓存是跨 SqlSession 的。 2特点 默认不开启使用需配置 2、二级缓存结构图 3、二级缓存的开启与关闭 1在mybatisConfig.xml文件中开启二级缓存 settings!--日志打印--setting namelogImpl valueSTDOUT_LOGGING/!--开启二级缓存--setting namecacheEnabled valuetrue/ /settingscacheEnabled true默认值开启false关闭 2配置映射文件 StudentMapper.xml ?xml version1.0 encodingUTF-8 ? !-- 引入dtd约束-- !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd !--namespace 是当前mapper对应的接口-- mapper namespacecom.etime.mapper.StudentMappercache/cacheselect idgetAllStudent resultTypeStudentselect * from student/select /mapper注意cache标签的位置 3在映射文件 StudentMapper.xml 配置statement 上面的 userCache属性 ?xml version1.0 encodingUTF-8 ? !-- 引入dtd约束-- !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd !--namespace 是当前mapper对应的接口-- mapper namespacecom.etime.mapper.StudentMappercache/cacheselect idgetAllStudent resultTypeStudent useCachetrueselect * from student/select /mapperuseCache true开启false关闭 注意针对每次查询都需要最新的数据sql要禁用二级缓存 4二级缓存测试 a.实体类需要序列化 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable; import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Student implements Serializable {private int sid;private String sname;private int cid; }b.测试方法 Test public void test01(){SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper studentMapper sqlSession.getMapper(StudentMapper.class);ListStudent list studentMapper.getAllStudent();sqlSession.clearCache();list.forEach(System.out::println);System.out.println(--------------------------);ListStudent list2 studentMapper.getAllStudent();list2.forEach(System.out::println);sqlSession.close(); }4、二级缓存分析 ​ 从结果可以看出第一次查询将所有学生信息存入一级缓存然后存入二级缓存中。 ​ 第二次查询我们现将一级缓存清除再进行查询发现是从二级缓存取出的学生信息但它又从数据库中查询数据。 ​ 可以得出结论在没有清除一级缓存时我们是从二级缓存中取得的数据。 mybatis 分页插件 一、什么是分页 ​ 分页是将所有数据分段展示各用户的技术用户所看到的数据只是一部分。若用户没有想要的内容可通过指定页面、翻页的方式转换内容。 二、分页的好处 1、提高性能 ​ 数据量很大若一次性查出浪费内存 降低了效率。 2、展现层面的考虑 ​ 不好排版不美观 三、分页插件的使用 1、引入依赖在pom.xml文件中 dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.1.10/version /dependency2、在mybatisConfig.xml配置文件中 配置分页 注意配置分页的位置在environments标签之前 pluginsplugin interceptorcom.github.pagehelper.PageInterceptor/plugin /plugins3、在接口 StudentMapper.java 中定义方法 package com.etime.mapper;import com.etime.pojo.Student;import java.util.List;public interface StudentMapper {ListStudent getAllStudent(); }4、 在映射文件 StudentMapper.xml 配置信息 ?xml version1.0 encodingUTF-8 ? !-- 引入dtd约束-- !DOCTYPE mapperPUBLIC -//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtd !--namespace 是当前mapper对应的接口-- mapper namespacecom.etime.mapper.StudentMappercache/cacheselect idgetAllStudent resultTypeStudent useCachetrueselect * from student/select /mapper5、测试 Test public void test02() {// 设置当前页码及每页显示条数 必须在获得sqlSession对象的前面设置PageHelper.startPage(1,2);SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper studentMapper sqlSession.getMapper(StudentMapper.class);ListStudent list studentMapper.getAllStudent();// 从查到的数据 取出当前页数据生成pageInfo对象PageInfoStudent pageInfo new PageInfo(list);// 从pageInfo对象中获取当页数据ListStudent pageList pageInfo.getList();System.out.println(当前页数据);pageList.forEach(System.out::println);// 获取总数据条数long total pageInfo.getTotal();System.out.println(总数据条数 total);// 获取总页数int pages pageInfo.getPages();System.out.println(总页数 pages);sqlSession.close(); }mybatis 注解开发 一、mybatis 注解开发概述 ​ 注解提供了一种简单的方式来实现 简单映射语句而不糊引入大量的开销。 ​ 能够读懂别人的代码特别是框架相关的代码。 ​ 本来是可能需要很多配置文件需要很多逻辑才能实现事务使用一个或多个注解来替代这样就使得编程更加简洁代码更加清晰。 二、mybatis 注解介绍 注解描述Insert新增Update更新Delete删除Select查询Result结果封装集Results与Result使用封装多个结果集ResultMap引用Results定义的封装One一对一结果封装集Many一对多结果哦封装集SelectProvider动态SQL映射CacheNamespace注解二级缓存的使用 三、注解实现基本增删改查 1、实体类 学生类 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Student {private int sid;private String sname;private int cid; }2、在接口 StudentMapper中定义方法并使用注解 mybatisConfig.xml 中映射文件的注册信息不变将resource资源包中的 映射文件给删除 package com.etime.mapper;import com.etime.pojo.Student; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update;import java.util.List;public interface StudentMapper {Select(select * from student)ListStudent getAllStudent();Insert(insert into student(sname,cid) values(#{sname},#{cid}))int addStudent(Student student);Update(update student set sname#{sname},cid#{cid} where sid#{sid})int updateStudent(Student student);Delete(delete from student where sid#{sid})int deleteStudentBySid(int sid); }3、测试 package com.etime.test;import com.etime.mapper.StudentMapper; import com.etime.pojo.Student; import com.etime.util.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class StudentTest {Testpublic void test01(){SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);ListStudent list mapper.getAllStudent();list.forEach(System.out::println);sqlSession.close();}Testpublic void test02() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);int res mapper.addStudent(new Student(0, 胡神哎, 1));System.out.println(res res);sqlSession.close();}Testpublic void test03() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);int res mapper.updateStudent(new Student(8, 胡-寂, 1));System.out.println(res res);sqlSession.close();}Testpublic void test04() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);int res mapper.deleteStudentBySid(8);System.out.println(res res);sqlSession.close();} }四、复杂关系的注解 1、注解介绍 1Results注解 代替标签使用示例Results{ResultResult}或者 ResultsResult使用说明该注解中可以使用单个 Result或 Result集合 2Result注解 代替标签、Result 属性介绍 id是否 是主键字段properties需要配置实体类的属性column数据库表的列名one需使用 One 注解 例ResultoneOne many需使用 Many 注解 例ResultmanyMany 3One注解 描述一对一,是多表插叙的关键用来指定子查询返回单一对象。代替标签One 属性介绍 select指定多表查询的 sqlMaper。使用完全限定名确定方法的位置。 示例Result(column “,property”“,oneOne(select”)) 4Many 注解 描述多对一是多表查询的关键指定子查询返回对象集合代替标签注意聚集元素用来处理“一对多”的关系。需要执行映射的java实体类的属性属性的javaType。示例Result(property“”,column“”,manyMany(select“”javaType“”)) 2、一对一关系注解 1实体类 以妻子表 和 丈夫表为例 妻子类 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;NoArgsConstructor AllArgsConstructor Data public class Wife {private int wid;private String wname; }丈夫类主体 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;NoArgsConstructor AllArgsConstructor Data public class Husband {private int hid;private String hname;private int wid;private Wife wife; }2在接口 HusbandMapper.java 中使用注解方法 package com.etime.mapper;import com.etime.pojo.Husband; import com.etime.pojo.Wife; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select;import java.util.List;public interface HusbandMapper {// 查询所有丈夫中对应一对一的妻子Select(select * from husband)Results({Result(property hid,column hid),Result(property hname,column hname),Result(property wid,column wid),/*javaType:指定类型column:指定传入那列 为参数one:一对一返回一个对象select:子查询的方法的位置*/Result(property wife,javaType Wife.class,column wid,one One(select com.etime.mapper.WifeMapper.getWifeByWid))})ListHusband getAllHusband(); }3在接口 WifeMapper.java 中使用注解方法定义子查询 package com.etime.mapper;import com.etime.pojo.Wife; import org.apache.ibatis.annotations.Select;public interface WifeMapper {Select(select * from wife where wid#{wid})Wife getWifeByWid(int wid); }4测试 package com.etime.test;import com.etime.mapper.HusbandMapper; import com.etime.pojo.Husband; import com.etime.util.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class HusbandTest {Testpublic void test01(){SqlSession sqlSession SqlSessionUtil.getSqlSession();HusbandMapper mapper sqlSession.getMapper(HusbandMapper.class);ListHusband list mapper.getAllHusband();list.forEach(System.out::println);sqlSession.close();} }3、多对一关系注解 以学生和班级为例 多对一 1 实体类 班级类 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Classes {private int cid;private String cname;}学生类主体 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Student {private int sid;private String sname;private int cid;private Classes classes; }2在接口StudentMapper.java中使用注解方法 Select(select * from student) Results({Result(property sid,column sid),Result(property sname,column sname),Result(propertycid,column cid),Result(property classes,javaType Classes.class,column cid,one One(select com.etime.mapper.ClassesMapper.getClassesByCid)) }) ListStudent getAllStudentAndClasses();3在接口ClassesMapper.java中使用注解方法 Select(select * from classes where cid#{cid}) Classes getClassesByCid(int cid);4测试 Test public void test05() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);ListStudent list mapper.getAllStudentAndClasses();list.forEach(System.out::println);sqlSession.close(); }一对多 1 实体类 学生类 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Student {private int sid;private String sname;private int cid; }班级类主体 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Classes {private int cid;private String cname;private ListStudent studentList; }2在接口ClassesMapper.java中使用注解方法 package com.etime.mapper;import com.etime.pojo.Classes; import org.apache.ibatis.annotations.Many; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select;import java.util.List;public interface ClassesMapper {Select(select * from classes where cid#{cid})Classes getClassesByCid(int cid);Select(select * from classes)Results({Result(property cid,column cid),Result(property cname,column cname),Result(property studentList,javaType List.class,column cid,many Many(select com.etime.mapper.StudentMapper.getStudentByCid))})ListClasses getAllClassesAndStudent(); }3在接口StudentMapper.java中使用注解方法 Select(select * from student where cid#{cid}) ListStudent getStudentByCid(int cid);4测试 package com.etime.test;import com.etime.mapper.ClassesMapper; import com.etime.pojo.Classes; import com.etime.util.SqlSessionUtil; import org.apache.ibatis.session.SqlSession; import org.junit.Test;import java.util.List;public class ClassesTest {Testpublic void test01(){SqlSession sqlSession SqlSessionUtil.getSqlSession();ClassesMapper mapper sqlSession.getMapper(ClassesMapper.class);ListClasses list mapper.getAllClassesAndStudent();list.forEach(System.out::println);sqlSession.close();} }4、多对多关系注解 1实体类 以 学生、课程、中间表为例 课程类 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;NoArgsConstructor AllArgsConstructor Data public class Course {private int courseid;private String coursename; }中间表类第二主体 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;NoArgsConstructor AllArgsConstructor Data public class StudentCourse {private int scid;private int sid;private int courseid;private Course course; }学生类第一主体 package com.etime.pojo;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.util.List;NoArgsConstructor AllArgsConstructor Data public class Student {private int sid;private String sname;private int cid;private ListStudentCourse studentCourseList; }2在接口 StudentMapper.java中 编写使用注解方法 Select(select * from student) Results({Result(property sid,column sid),Result(property sname,column sname),Result(property cid,column cid),Result(property studentCourseList,javaType List.class,column sid,many Many(select com.etime.mapper.StudentCourseMapper.getStudentCourseBySid)) }) ListStudent getStudentAndCourse();3在接口 StudentCourseMapper.java中 编写使用注解方法 package com.etime.mapper;import com.etime.pojo.Course; import com.etime.pojo.StudentCourse; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select;import java.util.List;public interface StudentCourseMapper {Select(select * from studentcourse where sid#{sid})Results({Result(property scid,column scid),Result(property sid,column sid),Result(property courseid,column courseid),Result(property course,javaType Course.class,column sid,one One(select com.etime.mapper.CourseMapper.getCourseByCid))})ListStudentCourse getStudentCourseBySid(int sid); }4在接口 CourseMapper.java中 编写使用注解方法 package com.etime.mapper;import com.etime.pojo.Course; import org.apache.ibatis.annotations.Select;public interface CourseMapper {Select(select * from course where cid#{cid})Course getCourseByCid(int cid); }5测试 Test public void test06() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);ListStudent list mapper.getAllStudentAndClasses();list.forEach(System.out::println);sqlSession.close(); }4在接口 CourseMapper.java中 编写使用注解方法 package com.etime.mapper;import com.etime.pojo.Course; import org.apache.ibatis.annotations.Select;public interface CourseMapper {Select(select * from course where cid#{cid})Course getCourseByCid(int cid); }5测试 Test public void test06() {SqlSession sqlSession SqlSessionUtil.getSqlSession();StudentMapper mapper sqlSession.getMapper(StudentMapper.class);ListStudent list mapper.getAllStudentAndClasses();list.forEach(System.out::println);sqlSession.close(); }
http://www.hkea.cn/news/14521638/

相关文章:

  • 哪些网站可以做推广网站推广的方法和渠道
  • 厦门网站建设价格建设官方网站企业官网
  • 网站建设 排名宝下拉合肥专业做淘宝网站推广
  • 绍兴房产网辽宁做网站和优化
  • 河南省建设集团惠州seo怎么做
  • 视频微网站开发wordpress注册修改密码
  • 上海网站建设服务器苏州手机网站建设费用
  • 自己的网站源代码一片空白100t空间 做网站
  • 网站建设与运营公司部门结构wordpress 验证百度网盟
  • 手机pc微信三合一网站浪琴手表网站
  • 宁波做简单网站的网站备案 信息查询
  • 个人签名设计网站长沙关键词优化平台
  • 做网站现在什么尺寸合适无锡网站建设软件开发
  • 学设计哪个网站好elision wordpress
  • 模具外贸网站建设wordpress虚拟主机如何安装
  • 只做鱼网站网络营销分类
  • 海口建站价格网站建设 部署与发布 答案
  • 二手商品网站制作网站不稳定
  • 大兴区制作网站的公司建设银行国际互联网网站
  • 怎么开发销售网站农家乐网站建设多少钱
  • 做网站需要会写代码吗wordpress过滤用户输入数据库
  • 网站建设公司怎么开php 网站伪静态
  • 永春建设局网站html网站开发流程
  • 建设公司设计公司网站十堰做网站公司
  • 简述新建站点的步骤长沙网站seo厂家
  • dede安装好后是模板怎么变成做好的网站企业门户网站建设行情
  • 西安建设主管部门官方网站天津手机网站建设
  • 高校网站建设及管理制度天津北辰做网站
  • 临安做企业网站网站在线咨询怎么做
  • 长春模板建站公司网站建设方案标准模板