??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区不卡在线,在线天堂av,黄色国产在线http://www.aygfsteel.com/liuwuping12064915/category/48784.html 坚持 随心而动zh-cnThu, 02 Jun 2011 14:07:13 GMTThu, 02 Jun 2011 14:07:13 GMT60MyBatis入门http://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351633.html天空布蓝天空布蓝Thu, 02 Jun 2011 14:05:00 GMThttp://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351633.htmlhttp://www.aygfsteel.com/liuwuping12064915/comments/351633.htmlhttp://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351633.html#Feedback0http://www.aygfsteel.com/liuwuping12064915/comments/commentRss/351633.htmlhttp://www.aygfsteel.com/liuwuping12064915/services/trackbacks/351633.html  然后自己写了个简单的。?br />  首先在mysql建名为mybatis的数据库   在数据库中徏一个user?里面?个字D?id  name
 
  下面是目录结?br />

  Configuration.xml
     <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC 
    "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <typeAlias alias="User" type="User" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="55" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="User.xml" />
    </mappers>
</configuration>

User.xml

public class User {
   private int id;
   private String name;
   
   
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
}


Test.java

import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class Test {
public static void main(String[] args) throws IOException {
String resource = "Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory  sqlMapper = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlMapper.openSession();
try {
User user = (User)session.selectOne("User.selectUser",2);
System.out.println("user name:"+user.getName());
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
}
}


天空布蓝 2011-06-02 22:05 发表评论
]]>
POJO ?PO?概念http://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351621.html天空布蓝天空布蓝Thu, 02 Jun 2011 10:14:00 GMThttp://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351621.htmlhttp://www.aygfsteel.com/liuwuping12064915/comments/351621.htmlhttp://www.aygfsteel.com/liuwuping12064915/archive/2011/06/02/351621.html#Feedback0http://www.aygfsteel.com/liuwuping12064915/comments/commentRss/351621.htmlhttp://www.aygfsteel.com/liuwuping12064915/services/trackbacks/351621.html
原文转蝲自:

POJO = pure old java object or plain ordinary java object or what ever. 

PO = persisent object 持久对象 

是说在一些Object/Relation Mapping工具中,能够做到l护数据库表记录的persisent object完全是一个符合Java Bean规范的纯Java对象Q没有增加别的属性和Ҏ。全都是q样子的Q?nbsp;


Java代码  收藏代码
  1. public class User {   
  2.   private long id;   
  3.   private String name;  
  4.   public void setId(long id); {  
  5.  this.id = id;  
  6. }    
  7. public void setName(String name); {  
  8. this.name=name;  
  9. }   
  10.  public long getId(); {  
  11.  return id;  
  12. }    
  13. public String getName(); {   
  14. return name;  
  15. }  
  16. }    


--------------------------------------------------------------------------- 
首先要区别持久对象和POJO?nbsp;

持久对象实际上必d应数据库中的entityQ所以和POJO有所区别。比如说POJO是由new创徏Q由GC回收。但是持久对象是insert数据库创建,由数据库delete删除的。基本上持久对象生命周期和数据库密切相关。另外持久对象往往只能存在一个数据库Connection之中QConnnection关闭以后Q持久对象就不存在了Q而POJO只要不被GC回收QL存在的?nbsp;

׃存在诸多差别Q因此持久对象PO(Persistent Object)在代码上肯定和POJO不同Qv码PO相对于POJO会增加一些用来管理数据库entity状态的属性和Ҏ。而ORMq求的目标就是要PO在用上量和POJO一_对于E序员来_他们可以把PO当做POJO来用Q而感觉不到PO的存在?nbsp;

JDO的实现方法是q样的: 
1、编写POJO 
2、编译POJO 
3、用JDO的一个专门工P叫做EnhancerQ一般是一个命令行E序Q手工运行,或者在ant脚本里面q行Q对POJO的class文g处理一下,把POJO替换成同名的PO?nbsp;
4、在q行期运行的实际上是POQ而不是POJO?nbsp;

该方法有点类gJSPQJSP也是在编译期被{换成Servlet来运行的Q在q行期实际上q行的是ServletQ而不是JSP?nbsp;

Hibernate的实现方法比较先q: 
1、编写POJO 
2、编译POJO 
3、直接运行,在运行期Q由Hibernate的CGLIB动态把POJO转换为PO?nbsp;

由此可以看出Hibernate是在q行期把POJO的字节码转换为PO?/span>Q而JDO是在~译期{换的。一般认为JDO的方式效率会E高Q毕竟是~译期{换嘛。但是Hibernate的作者Gavin King说CGLIB的效率非怹高,q行期的PO的字节码生成速度非常之快Q效率损失几乎可以忽略不计?nbsp;

实际上运行期生成PO的好处非常大Q这样对于程序员来说Q是无法接触到PO的,PO对他们来说完全透明。可以更加自q以POJO的概忉|UPO。另外由于是q行期生成POQ所以可以支持增量编译,增量调试。而JDO则无法做到这一炏V实际上已经有很多h在抱怨JDO的编译期Enhancer问题了,而据说JBossDO采用运行期生成PO字节码,而不采用~译期生成PO字节码?nbsp;

另外一个相关的问题是,不同的JDO产品的Enhancer生成的PO字节码可能会有所不同Q可能会影响在JDO产品之间的可UL性,q一Ҏ点类似EJB的可UL性难题?nbsp;

----------------------------------------------------------------------------------- 
p个问题另外引Z个JDO的缺陗?nbsp;

׃JDO的PO状态管理方式,所以当你在E序里面get/set的时候,实际上不是从PO的实例中取valuesQ而是从JDO StateManager中取出来Q所以一旦PM关闭QPO׃能进行存取了?nbsp;

在JDO中,也可以通过一些办法得PO可以在PM外面使用Q比如说定义PO是transient的,但是该PO在PM关闭后就没有PO identity了。无法进行跨PM的状态管理?nbsp;

而Hibernate是从PO实例中取values的,所以即使Session关闭Q也一样可以get/setQ可以进行跨Session的状态管理?nbsp;

在分多层的应用中Q由于持久层和业务层和web层都是分开的,此时Hibernate的PO完全可以当做一个POJO来用Q也是当做一个VOQ在各层间自׃递,而不用去Session是开q是兟뀂如果你把这个POJO序列化的话,甚至可以用在分布式环境中。(不适合lazy loading的情况) 

但是JDO的PO在PM关闭后就不能再用了,所以必dPM关闭前把PO拯一份VOQ把VO传递给业务层和web层用。在非分布式环境中,也可以用ThreadLocal模式保PM始终是打开状态,来避免每ơ必进行PO到VO的拷贝操作。但是不怎么_qL权宜之计Q不如Hibernate的功能强?/div>


天空布蓝 2011-06-02 18:14 发表评论
]]>
վ֩ģ壺 | | ɽ| | ƽ| | | | ϵ| Ƽ| ζ| ʡ| | | Ͽ| | | | Ȫ| ˳| | ɽ| Դ| | | | Ĭ| | | | | ͩ| | ͨ| | | ͨ| ¤| | ˳| |