精华内容
下载资源
问答
  • 查询缓存的使用,主要是为了提高查询访问速度。这篇文章主要介绍了MyBatis查询缓存,需要的朋友可以参考下查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询...

    查询缓存的使用,主要是为了提高查询访问速度。这篇文章主要介绍了MyBatis查询缓存,需要的朋友可以参考下

    查询缓存的使用,主要是为了提高查询访问速度。将用户对同一数据的重复查询过程简化,不再每次均从数据库查询获取结果数据,从而提高访问速度。

    MyBatis的查询缓存机制,根据缓存区的作用域(生命周期)可划分为两种:一级缓存与二级缓存

    一、一级查询缓存

    MyBatis一级缓存是基于org.apache.ibatis.cache.impl.PerpetualCache类的HashMap本地缓存,其作用域是Sqlsession。在同一个Sqlsession中两次执行相同的sql语句,第一次执行完毕后,会将查询结果写入到缓存中,第二次会从缓存中直接获取数据,而不再到数据库中进行查询,从而提高查询效率。

    当一个Sqlsession结束后,该Sqlsession中的一级缓存也就不存在了。MyBatis默认一级缓存是开启状态,且不能关闭。

    c60c71644e1f032c97370304671f7a69.png

    1.一级缓存的存在性证明

    测试类:

    //证明一级缓存的存在

    @Test

    public void test01(){

    //第一次查询

    Student student = dao.selectStudentById(2);

    System.out.println(student);

    //第二次查询

    Student student2 = dao.selectStudentById(2);

    System.out.println(student2);

    }

    mapper:

    select * from student where id=#{id}

    控制台:

    执行完后,发现只执行了一次从DB中的查询,第二次的结果是直接输出的。说明,第二次是从Sqlsession缓存中读取的。

    b027a1ebcbd5c3aaeea2246c971e13dd.png

    2.从缓存读取数据的依据是sql的id

    一级缓存缓存的是相同sql映射id的查询结果,而非相同sql语句的查询结果。因为MyBatis内部对于查询缓存,无论是一级查询还是二级查询,其底层均使用一个hashmap实现:key为sql的id相关内容,value为从数据库中查询出的结果。

    mapper:

    select * from student where id=#{id}

    select id,name,age,score,birthday from student where id=#{id}

    dao接口:

    public interface IStudentDao {

    Student selectStudentById(int id);

    Student selectStudentById2(int id);

    }

    测试类:

    //证明从一级缓存中读取数据的依据:

    //MyBatis:sql的id+sql语句

    //hibernate:查询结果对象的id

    @Test

    public void test02(){

    Student student = dao.selectStudentById(2);

    System.out.println(student);

    Student student2 = dao.selectStudentById2(2);

    System.out.println(student2);

    }

    控制台:

    查看控制台,发现第二次查询结果与第一次的完全相同,但第二次查询并没有从缓存中读取数据,而是直接从DB中进行的查询。这是因为从缓存读取数据的依据是查询sql的映射id,而非查询结果。

    53a001c846f892f20b5cfa352a428988.png

    3.增删改对一级查询缓存的影响

    增删改操作,无论是否进行提交Sqlsession.commit(),均会清空一级查询缓存,使查询再次从DB中select。

    测试类:

    @Test

    public void test03(){

    Student student = dao.selectStudentById(2);

    System.out.println(student);

    //增删改操作都会清空一级缓存,无论是否提交

    dao.insertStudent(new Student("赵六",26,96.6));

    Student student2 = dao.selectStudentById(2);

    System.out.println(student2);

    }

    控制台:

    3ce5ea4277a1e4ff7943665502b516c9.png

    二、内置二级查询缓存

    MyBatis查询缓存的作用域是根据映射文件mapper的namespace划分的,相同namespace的mapper查询数据存放在同一个缓存区域。不同namespace下的数据互不干扰。

    无论是一级缓存还是二级缓存,都是按照namespace进行分别存放的。但一、二级缓存的不同之处在于,Sqlsession一旦关闭,则Sqlsession中的数据将不存在,即一级缓存就不复存在。而二级缓存的生命周期会与整个应用同步,与Sqlsession是否关闭无关。

    使用二级缓存的目的,不是共享数据,因为MyBatis从缓存中读取数据的依据是sql的id,而非查询出的对象。所以,二级缓存中的数据不是为了在多个查询之间共享(所有查询中只要查询结果中存在该对象的,就直接从缓存中读取,这是对数据的共享,hibernate中的缓存就是为了共享,但MyBatis不是),而是为了延长该查询结果的保存时间,提高系统性能。

    1.二级缓存用法

    二级缓存的使用只需要完成两步:

    序列化实体

    在mapper映射文件中添加标签

    1.实体序列化

    要求查询结果所涉及到的实体类要实现java.io.Serializable接口。若该实体类存在父类,或其具有域属性,则父类与域属性类也要实现序列化接口。

    public class Student implements Serializable{

    private Integer id;

    private String name;

    private int age;

    private double score;

    }

    2.mapper映射文件中添加标签

    在mapper映射文件中的标签中添加子标签

    select * from student where id=#{id}

    3.二级缓存的配置

    为标签添加一些相关属性设置,可以对二级缓存的运行性能进行控制。若不指定设置,则均保持默认值。

    readOnly="true" size="512"/>

    eviction:逐出策略。当二级缓存中的对象达到最大值时,就需要通过逐出策略将缓存中的对象移出缓存。默认为LRU。常用的策略有FIFO和LRU

    flushInterval:刷新缓存的时间间隔,单位毫秒。这里的刷新缓存即清空缓存。一般不指定,即当执行增删改时刷新缓存。

    readOnly:设置缓存中数据是否只读。只读的缓存会给所有调用者返回缓存对象的相同实例,因此这些对象不能被修改,这提供了很重要的性能优势。但读写的缓存会返回缓存对象的拷贝。这会慢一些,但是安全,因此默认是false。

    size:二级缓存中可以存放的最多对象个数。默认为1024个。

    2.二级缓存的存在性证明

    对于映射文件中的同一个查询,肯定是同一个namespace中的查询。在一次查询后,将Sqlsession关闭,再进行一次相同查询,发现并没有到DB中进行select查询,说明二级缓存是存在的。

    //证明二级缓存的存在

    @Test

    public void test01(){

    //第一次查询

    Student student = dao.selectStudentById(2);

    System.out.println(student);

    sqlSession.close();

    sqlSession = MyBatisUtils.getSqlSession();

    dao = sqlSession.getMapper(IStudentDao.class);

    //第二次查询

    Student student2 = dao.selectStudentById(2);

    System.out.println(student2);

    }

    查看控制台:

    Cache Hit Ratio表示缓存命中率。开启二级缓存后,每执行一次查询,系统都会计算一次二级缓存的命中率。第一次查询也是先从缓存中查询,只不过缓存中一定是没有的。所以会再从DB中查询。由于二级缓存中不存在该数据,所以命中率为0.但第二次查询是从二级缓存中读取的,所以这一次的命中率为1/2=0.5。当然,若有第三次查询,则命中率为1/3=0.66

    4f4c2cc29a7d1cc155be4ba429e59bcc.png

    3.增删改对二级缓存的影响

    增删改操作,无论是否进行提交sqlSession.commit(),均会清空一级、二级缓存,使查询再次从DB中select。

    测试类:

    @Testpublic void test02(){

    //第一次查询

    Student student = dao.selectStudentById(2);

    System.out.println(student);

    sqlSession.close();

    sqlSession = MyBatisUtils.getSqlSession();

    dao = sqlSession.getMapper(IStudentDao.class);

    //插入

    dao.insertStudent(new Student("",0,0));

    //第二次查询

    Student student2 = dao.selectStudentById(2);

    System.out.println(student2);

    }

    控制台:

    注意,在第二次查询时的缓存命中率为0.5,但还是从DB中查询了。说明在缓存中与该查询相对应的key是存在的,但其value被清空。而value被清空的原因是前面执行了对DB的增删改操作,所以不会从缓存中直接将null值返回,而是从DB中进行查询。

    9d0af0840c3aae08b59ec75c17e92d9d.png

    说明:

    二级缓存的清空,实质上是对所查找key对应的value置为null,而非将对,即entry对象删除。

    从DB中进行select查询的条件是:缓存中根本不存在这个key或者缓存中存在该key所对应的entry对象,但value为null。

    设置增删改操作不刷新二级缓存:

    若要使某个增、删或改操作不清空二级缓存,则需要在其或或中添加属性flushCache="false",默认为true。

    insert into student(name,age,score) values(#{name},#{age},#{score})

    4.二级缓存的关闭

    二级缓存默认为开启状态。若要将其关闭,则需要进行相关设置。

    根据关闭的范围大小,可以分为全局关闭和局部关闭

    1.全局关闭(在配置文件中设置)

    全局关闭是指整个应用的二级缓存全部关闭,所有查询均不使用二级缓存。全局开关设置在主配置文件的全局设置中,该属性为cacheEnabled,设置为false,则关闭;设置为true,则开启,默认值为true。即二级缓存默认是开启的。

    2.局部关闭(在映射文件的每个select中设置)

    局部关闭指整个应用的二级缓存是开启的,但只是针对某个查询,不使用二级缓存。此时可以单独只关闭该标签的二级缓存。

    在该要关闭二级缓存的标签中,将其属性useCache设置为false,即可关闭该查询的二级缓存。该属性默认为true,即每个查询的二级缓存默认是开启的。

    select * from student where id=#{id}

    5.二级缓存的使用原则

    1.只能在一个命名空间下使用二级缓存

    由于二级缓存中的数据是基于namespace的,即不同namespace中的数据互不干扰。在多个namespace中若均存在对同一个表的操作,那么这多个namespace中的数据可能就会出现不一致现象。

    2.在单表上使用二级缓存

    如果一个表与其它表有关联关系,那么久非常有可能存在多个namespace对同一数据的操作。而不同namespace中的数据互补干扰,所以就有可能出现多个namespace中的数据不一致现象。

    3.查询多于修改时使用二级缓存

    在查询操作远远多于增删改操作的情况下可以使用二级缓存。因为任何增删改操作都将刷新二级缓存,对二级缓存的频繁刷新将降低系统性能。

    三、ehcache二级查询缓存

    MyBatis允许使用第三方缓存产品。ehCache就是其中一种。

    注意:使用ehcache二级缓存,实体类无需实现序列化接口。

    1.导入jar包

    3f1bf4e905f0b25f3a30fec173c908ee.png

    2.添加ehcache.xml

    解压ehcache的核心jar包ehcache-core-2.6.8.jar,将其中的一个配置文件ehcache-failsafe.xml直接放到项目的src目录下,并更名为ehcache.xml

    (1)标签

    指定一个文件目录,当内存空间不够,需要将二级缓存中数据写到硬盘上时,会写到这个指定目录中。其值一般为java.io.tmpdir,表示当前系统的默认文件临时目录。

    b6d8f3cbccb41d3d862b25f548587004.png

    当前文件系统的默认文件临时目录,可以通过System.property()方法查看:

    @Test

    public void test(){

    String path = System.getProperty("java.io.tmpdir");

    System.out.println(path);

    }

    (2)标签

    5fe72b80648eaa6ba840a6eccc50394d.png

    ef778db473894844e011953962d6d1a5.png

    3.启用ehcache缓存机制

    在映射文件的mapper中的中通过type指定缓存机制为Ehcache缓存。默认为MyBatis内置的二级缓存org.apache.ibatis.cache.impl.PerpetualCache。

    select * from student where id=#{id}

    4.ehcache在不同mapper中的个性化设置

    在ehcache.xml中设置的属性值,会对该项目中所有使用ehcache缓存机制的缓存区域起作用。一个项目中可以有多个mapper,不同的mapper有不同的缓存区域。对于不同缓存区域也可进行专门针对于当前区域的个性设置,可通过指定不同mapper的属性值来设置。

    属性值的优先级高于ehcache.xml中的属性值。

    展开全文
  • 在 WEB-INF 下新建 Directory 命名为 lib 并放入 mysql 驱动的jar包 加载外部库 在 web目录下新建(需要跳转到的)用于展示数据的 jsp 页面 [jsp 页面其实和 html 页面差不多,但是其中可以写 Java 代码] 新建 ...

    进行WebProject相关配置 (已提前准备好tomcat放于某处)

    在这里插入图片描述
    在这里插入图片描述
    执行完以上步骤会出现:
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在 WEB-INF 下新建 Directory 命名为 lib 并放入 mysql 驱动的jar包

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/8b0782aa481d404ca758689893537082.png

    加载外部库

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在 web目录下新建(需要跳转到的)用于展示数据的 jsp 页面 [jsp 页面其实和 html 页面差不多,但是其中可以写 Java 代码]

    在这里插入图片描述

    新建 servlet 并放在 src 目录的对应 package 下(此处建议把类似 entity(实体类)、servlet、util(一些工具)的代码分别放在不同的 package 下,便于管理且结构比较清晰)

    在这里插入图片描述

    在新建好的 servlet 代码中先让该 servlet 继承 HttpServlet

    在这里插入图片描述

    重写 service 方法(因为访问 servlet 默认访问 service 方法)

    在这里插入图片描述

    重写 service 方法的具体步骤

    其实就是jdbc的具体操作(注意此处已经封装好了实体类Student与一个工具类JDBCUtil)

    import study.web.entity.Student;
    import study.web.util.JDBCUtil;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    
    // http://localhost:8080/JavaWeb/hello
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
    
        // 访问Servlet默认访问service方法
        @Override
        protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("HelloServlet.service");
    
            Connection connection = null;
            PreparedStatement statement = null;
            ResultSet resultSet = null;
            ArrayList<Student> list = new ArrayList<>();
            try {
                connection = JDBCUtil.getConnection();
                String sql = "select id,name,age,gender from student";
                statement = connection.prepareStatement(sql);
                resultSet = statement.executeQuery();
                while (resultSet.next()) {
                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("name");
                    int age = resultSet.getInt("age");
                    String gender = resultSet.getString("gender");
                    Student student = new Student(id, name, age, gender);
                    list.add(student);
                }
                for (Student student : list) {
                    System.out.println(student);
                }
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            } finally {
                JDBCUtil.close(connection, statement, resultSet);
            }
    
            // 把list数据放到一块内存区域里面
            req.setAttribute("list", list);
            // 跳转到student_list.jsp展示数据
            // dispatch: 分发
            req.getRequestDispatcher("/student_list.jsp").forward(req, resp);
        }
    }
    
    

    写 jsp 页面代码对数据进行展示(以用表格展示数据为例)

    相当于先写 html 中表格的相关代码,然后在其中加入 Java 代码来实现遍历数据和展示数据

        <table border="1" cellspacing="0">
            <tr>
                <td>ID</td>
                <td>姓名</td>
                <td>年龄</td>
                <td>性别</td>
            </tr>
            <%
                // 里面可以写任意的java代码--jsp脚本
              ArrayList<Student> list = (ArrayList<Student>) request.getAttribute("list");
                for (Student student : list) {
            %>
                    <tr>
                        <td><%=student.getId()%></td>
                        <td><%=student.getName()%>></td>
                        <td><%=student.getAge()%></td>
                        <td><%=student.getGender()%></td>
                    </tr>
            <%
                }
            %>
        </table>
    
    展开全文
  • 手把手教你用Java设计并实现一个城市公交查询系统

    千次阅读 多人点赞 2020-12-19 10:11:33
    为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。 该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作...

    背景:近年来, Internet推动了以互联网技术为核心的各项工作蓬勃展开,互联网的强大也大大的促进了社会的发展,整个社会信息化进程逐步加快,网络也变成了我们日常活动中越来越重要的组成成分。为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。

    该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作人员如何倒车,便可到达目的地。其次,乘客在网上就可以查询到公交公司发布的路况信息,以便提早做好换乘准备节约出行时间。最后,本系统可以节约人力资源,以往的站牌附近要安排公交公司的工作人员来帮助不熟悉的乘客,有了公交查询系统提前上网查询便可知道。

    项目已经上传CODECHINA:https://codechina.csdn.net/weixin_41937552/bus

    目录

     

    1  绪论

    展开全文
  • java中mybatis的分页要借助map的原理,在下文中会展开详细的叙述。同时也可以了解LIMIT关键字的分页方法。1.map集合我们的分页是需要多个参数的,并不是只有一个参数。当需要接收多个参数的时候,我们使用Map集合来...

    2cce71305a392a3af21a3037d52ec5f0.png

    我们都知道mybatis框架,对于数据方面的应用更为出色。就数据的找寻方面,我们有时会涉及到分页搜索的操作,相信这点也是很多人迫切需要学习的知识点。java中mybatis的分页要借助map的原理,在下文中会展开详细的叙述。同时也可以了解LIMIT关键字的分页方法。

    1.map集合

    我们的分页是需要多个参数的,并不是只有一个参数。当需要接收多个参数的时候,我们使用Map集合来装载。public List  pagination(int start ,int end) throws Exception {

    //得到连接对象

    SqlSession sqlSession = MybatisUtil.getSqlSession();

    try{

    //映射文件的命名空间.SQL片段的ID,就可以调用对应的映射文件中的SQL

    /**

    * 由于我们的参数超过了两个,而方法中只有一个Object参数收集

    * 因此我们使用Map集合来装载我们的参数

    */

    Map map = new HashMap();

    map.put("start", start);

    map.put("end", end);

    return sqlSession.selectList("StudentID.pagination", map);

    }catch(Exception e){

    e.printStackTrace();

    sqlSession.rollback();

    throw e;

    }finally{

    MybatisUtil.closeSqlSession();

    }

    }

    public static void main(String[] args) throws Exception {

    StudentDao studentDao = new StudentDao();

    List students = studentDao.pagination(0, 3);

    for (Student student : students) {

    System.out.println(student.getId());

    }

    }

    2.LIMIT关键字

    (1)mapper代码:利用limit关键字实现分页

    select * from tb_user limit #{pageNo}, #{pageSize}

    (2)业务层直接调用public List findByPageInfo(PageInfo info) {

    return userMapper.selectByPageInfo(info);

    }

    (3)控制层直接调用

    以上就是mybatis在java中分页查询的方法,因为参数的不固定,所以我们要借助map进行处理。对于另一种关键字的分页方法,大家也可以做一个知识的了解。更多基础知识指路:

    展开全文
  • 0)Service/DAO层方法命名规约 1)获取单个对象的方法用get做前缀。 2)获取多个对象的方法用list做前缀。 3)获取统计值的方法用count做前缀。 4)插入的方法用save(推荐)或insert做前缀。 5)删除的方法用remove...
  • java web 日志详细

    2021-02-12 21:45:25
    第一步:首先建立一个WEB工程,去log4j官网下log4j的JAR包导入到工程的lib目录下第二步:在src目录下建一个log4j.properties文件,文件命名可以由自己,只是记加载时候和这里名字一致就行;log4j.properties 里边的...
  • 查询学号为”95001”的学生详细情况 sele * from student where sno=95001 9:查询所有姓刘的学生的姓名,学号和性别(where namelike ‘刘%’) sele sname,sno,ssex from student where sname like '刘%' 10:查询姓”...
  • java链接MySQL数据库,采用JDBC 连接MySQL 数据库并查询数据一、下载二、MySQL安装三、数据库中的操作:创建数据表四、JDBC 连接MySQL 数据库并查询数据五、运行输出小小的总结参考文献 一、下载 下载jar库文件 ...
  • 1、创建一个Java Project(Java项目); 1.1、在src下面创建一个package(包); 1.2、在包下创建一个class(类) 2、导入ojdbc.jar 2.1、右键项目–新建–folder(命名为lib,名字随意) 2.2、官网下载数据库对应的...
  • 楠哥Java SE总结详细笔记

    千次阅读 多人点赞 2021-02-19 17:26:30
    Java SE总结 一、Java体系 1、Java 基础 1、跨平台 2、面向对象编程语言 3、分布式计算 2、Java 的运行机制 编程 Java 程序 编译 Java 文件 JVM 读取字节码文件运行程序 3、Java的三大体系 Java SE(J2SE) ...
  • 前面介绍了通过JDBC如何管理数据库,当时提到Statement专门提供了executeQuery方法用于查询操作,为什么查询操作这么特殊呢?这是因为其它语句跑完一次就了事了,顶多像insert、update、delete再返回受影响的记录...
  • 一门永不过时的编程语言——Java 软件开发。 Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以1000万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员...
  • 第01章 java语言面试题 项目经理(作者):张明星 JAVA 官网 JAVA8 官网 JVM 运行时数据区是什么? 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干不同的数据区,这些区域有各自的用途、创建和销毁...
  • 一门永不过时的编程语言——Java 编程开发。 Java编程语言占比: 据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以900万的程序员数量位居首位。 而且很多软件的开发都离不开Java编程,因此其程序员...
  • Java API

    2021-02-12 18:01:55
    标签:Java语言的强大功能主要体现在Java语言完备丰富、功能强大的Java API上。本章介绍Java API的基本结构以及语言包和实用包中的常用类。1、Java API 综述Java语言的内核非常小,Java语言的强大功能主要体现在Java...
  • 这篇文章主要介绍了Java连接Mysql数据库详细代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下隔了一段时间没连过数据库,代码都忘记了,网上看了下挺乱...
  • Java语言的发展历史 Java开发环境搭建 编写HelloWorld程序 常量和变量 教学目标 能够计算二进制和十进制数之间的互转 能够使用常见的DOS命令 理解Java语言的跨平台实现原理 理解JDK和JRE的组成和作用 能够配置环境...
  • 复制代码 关于Mockito更多详细的用法,大家可以直接参考官方文档,因为各种“奇技淫巧”确实比较多,后面也更新对 java 8 lambda的支持,很多功能还是期待大家去挖掘~ 更多详细用法可直接参考官方文档: 相信当你...
  • 工具:eclipse、MySQL、MySQL连接驱动:mysql-connector-java-5.1.45.jar这是MySQL官方提供的连接方式(即MySQL连接驱动),解压后得到jar库文件,需要在工程中导入该库文件。这是解压后的文件:1、新建java项目 然后...
  • 学习目标 * 能够说出JDK,JRE,JVM各自的作用和关系...Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级的编程语言。所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让
  • 1.什么是IOJava中I/O操作主要是指使用Java进行输入,输出操作.Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列。Java的I/O流提供了读写数据的标准方法。任何Java中表示...
  • 该模块对 Java 原生的反射进行了良好的封装,提供了更加简洁易用的 API ,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。 类型转换模块 类型转换模块提供了两个...
  • java反射机制(1)

    2021-03-10 00:25:01
    反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较...反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间...
  • 1、首先建立一个web project ,我起的名字:weatherInf 【我用的编译器是MyEclipse】2、在src下新建一个file 起名:WeatherWebService.wsdl,将该链接中的代码...从3、正常情况下粘贴完都会出...
  • 命名空间一般在建模阶段通过命令行创建,在 java 代码中通过 admin.createNamespace(NamespaceDescriptor.create(“my_ns”).build()) 创建的机会不多; 创建 HBaseAdmin 对象时就已经建立了客户端程序与 HBase ...
  • java基础(二)

    2021-03-06 16:09:41
    一、前言因为工作有点忙,个人...二、Java应用程序这里主要描述Java应用程序中的一些注意事项:1.Java区分大小写。2.根据Java语言规范,main方法必须声明为public。3.Java使用的通用语法是:object.method(paramete...
  • 刚开始学习java的时候,可能是一头雾水,不知道从何学起,这里跟大家分享一下!(仅仅只供初级学者学习,大佬勿喷) 需要资料的,加我企微,备注888(记得备注不然好友不通过) 或者加QQ交流学习群:443217042 免费...
  • 方法命名规则查询 按照 JPA 定义的规则,查询方法以 find|read|get 开头(比如 find、findBy、read、readBy、get、getBy),涉及条件查询时,条件的属性用条件关键字连接, 注意:条件属性首字母需大写。 JPA 框架...
  • GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 60,156
精华内容 24,062
关键字:

java查询详细如何命名

java 订阅