`
xiaoyaocai
  • 浏览: 39575 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Jutil 测试

阅读更多

在Hibernate的映射文件的class tag使用dynamic-insert,dynamic-update,可以优化生成的SQL语句,提高SQL执行效率,最终可以提高系统性能。
如,有一个User类。
  1.   
  2. public class User {   
  3.       
  4.       
  5.     public User() {   
  6.     }   
  7.     private long id;   
  8.     private int age;   
  9.   
  10.     private String firstname;   
  11.     private String lastname;   
  12.     private Set emailAddresses;   
  13. //省略getter 和setter方法   
  14. }   

Hibernate映射文件(User.hbm.xml,省略了文件头声明)定义为:
  1. <hibernate-mapping>  
  2.     <class name="model.User" table="Users" >  
  3.         <id name="id" column="ID">  
  4.             <generator class="native"/>  
  5.         </id>  
  6.         <property name="age"/>  
  7.         <property name="firstname"/>  
  8.         <property name="lastname"/>  
  9.            
  10.         <set name="emailAddresses" table="PERSON_EMAIL_ADDR">  
  11.             <key column="PERSON_ID"/>  
  12.             <element type="string" column="EMAIL_ADDR"/>  
  13.         </set>  
  14.     </class>  
  15. </hibernate-mapping>  
我们写一个测试类进行测试UserTest。


  1. public class UserTest extends TestCase {   
  2.        
  3.     public UserTest(String testName) {   
  4.         super(testName);   
  5.     }   
  6.        
  7.     private Session session;   
  8.     private SessionFactory sessionFactory;   
  9.        
  10.     protected void setUp() throws Exception {   
  11.         sessionFactory=HibernateUtil.getSessionFactory();   
  12.         session=sessionFactory.openSession();   
  13.         session.getTransaction().begin();   
  14.     }   
  15.        
  16.     protected void tearDown() throws Exception {   
  17.         session.getTransaction().commit();   
  18.         session.close();   
  19.            
  20.     }   
  21.        
  22.       
  23.     public void testSaveUser() {   
  24.         System.out.println("================testSaveUser=================");   
  25.            
  26.         User user = new User();   
  27.         user.setAge(29);   
  28.         session.save(user);   
  29.         assertNotNull("id is assigned !",user.getId());   
  30.     }   
  31.     public void testUpdateUser() {   
  32.         System.out.println("================testUpdateUser=================");   
  33.            
  34.         User user = new User();   
  35.         user.setAge(29);   
  36.         session.save(user);   
  37.         assertNotNull("id is assigned !",user.getId());   
  38.            
  39.         User _user=(User) session.get(User.class, user.getId());   
  40.         _user.setFirstname("Array");   
  41.         session.update(_user);   
  42.            
  43.     }   
  44.        
  45.        
  46. }   
运行测试后,此时会生成完整的SQL语句(注意将hibernate属性show_sql设置成true)。

  1. ================testSaveUser=================   
  2. Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)   
  3. ================testUpdateUser=================   
  4. Hibernate: insert into Users (age, firstname, lastname) values (?, ?, ?)   
  5. Hibernate: update Users set age=?, firstname=?, lastname=? where ID=?  
如果我们在<class ...>中加上 dynamic-insert="true" dynamic-update="true",变成如下。

  1. <class name="model.User" table="Users" dynamic-insert="true" dynamic-update="true">  
再次运行测试类,就会发现生成的SQL中涉及的字段只包含User类中修改的属性所对应的表字段。

  1. ================testSaveUser=================   
  2. Hibernate: insert into Users (age) values (?)   
  3. ================testUpdateUser=================   
  4. Hibernate: insert into Users (age) values (?)   
  5. Hibernate: update Users set firstname=? where ID=?  
如果一个表的结构很复杂,字段很多的情况下,使用dynamic-insert,dynamic-update能够性能上的少许提
Hibernate SQL优化技巧dynamic-insert="true" dynamic-update="true"

分享到:
评论

相关推荐

    完整单元测测Jutil数据包

    【标题】"完整单元测测Jutil数据包"所指的是一个包含了Junit多个版本的集合,主要用于进行单元测试。Junit是Java编程语言中最广泛使用的单元测试框架之一,它允许开发者编写可重复运行的测试用例,以确保代码的功能...

    PyPI 官网下载 | django-jutil-3.7.13.tar.gz

    根据压缩包子文件的文件名称列表:`django-jutil-3.7.13`,我们可以推测这包含了这个库的源代码、文档、测试等相关文件。通常,解压这个文件后,我们会找到一个`setup.py`文件,它是Python项目用来安装和配置的入口...

    jutil:用于处理JSON的命令行实用程序

    从命令行对JSON API进行了大量测试吗? 对结构化数据不加思索地侮辱了? 手指因打字而疼痛| python -mjson.tool | python -mjson.tool吗? 希望C 0 L O,[R S' 好吧, jutil (可能)适合您! 它运行在,您可以...

    图形数据库Neo4j之Python API使用示例

    参考网上的文档,编写了使用 python API 接口实现的接口库:neo4jUtil.py。另外还写一个查询脚本:querySQL.py。 使用方法: 需要安装 neo4j for python 的库: pip install neo4j 修改配置文件:neo4jCfg.py ...

    图形数据库Neo4j之Java API使用示例

    最近研究图形数据库 Neo4j。需要使用 java API 编写查询接口,参考网上的示例自己写了一个接口类: Neo4jUtil.java。目前只完成了查询方法...测试环境信息: Neo4j Version: 3.5.13 jdk-1.8.0 eclipse jee oxygen 1a

    通过Dom4j创建和读取xml文件下载

    - **Dom4jTest.java**: 测试类,使用JUnit编写,用于验证DOM4JUtil的功能是否正常工作。 - **说明.txt**: 提供了关于如何使用这些文件的简短说明。 在实践中,`Dom4jUtil.java`会包含如`createXMLDocument()`, `...

    通过Dom4j创建和读取xml文件

    在`Dom4jUtil.java`中可能定义了一些通用的静态方法,用于创建、读取和修改XML文档;而在`Dom4jTest.java`中,可能会有测试用例来调用这些方法并验证其功能。 6. **Junit-4.4.jar**: - 这是JUnit 4.4版本的库,一...

    Modbus读取写入模拟量寄存器详细demo(modbus RTU 和 modbus TCP 都有)

    通过modbus协议读取和写入寄存器数据java详细demo,如果是modbus TCP只需要看com.rib.cdm.utils.ModbusTcpUtils这个类就行了,这个类是详细的读取以及写入demo。如果需要modbus RTU,那么只需要看...

    汉子转化拼音代码

    在实际应用中,可以根据需求替换测试字符串,实现对不同汉字或字符串的拼音转换。 #### 总结 通过以上分析,我们不仅了解了`Pinyin4j`库的基本使用方法,还掌握了一个实用的汉字转拼音的代码实现。这为处理中文...

    Pinyin4j简单使用教程.docx

    public class Pinyin4jUtil { /** * getFirstSpellPinYin: 获取第一个拼音(多音字时获取第一个)。 * @param src 传入的拼音字符串,以逗号隔开 * @param isFullSpell 是否全拼,true:全拼,false:第一个汉字...

    使用Pinyin4j进行拼音分词的方法

    String str = "测试"; String pinyin = Pinyin4jUtil.converterToSpell(str); System.out.println(str + " pin yin :" + pinyin); pinyin = Pinyin4jUtil.converterToFirstSpell(str); System.out.println(str...

Global site tag (gtag.js) - Google Analytics