当前位置:编程学习 > C#/ASP.NET >>

关于ibatis的配置文件

错误信息
The error occurred while configure DaoSessionHandler.
- The error occurred in <property name="resource" value="SqlMap.config" xmlns="http://ibatis.apache.org/dataAccess" />.  
- Check the IBatisNet.DataAccess.DaoSessionHandlers.SqlMapDaoSessionHandler.


 <alias>
    <typeAlias alias="Users" assembly="IBatis.Domain.dll" type="IBatis.Domain.Catalog.Users" />
    <typeAlias alias="Name" assembly="IBatis.Domain.dll" type="IBatis.Domain.Catalog.Name"/>
  </alias>

把第2段注掉就好了,猜测是这个引起的问题! 但另外一段代码中同样引用了2个实体类缺没有问题。很是困惑!

小弟主要是为了作一个多表查询,要是哪位有现成的例子也多谢了~ 

附dao.config(报错信息提到了其中一行) 

<?xml version="1.0" encoding="utf-8"?>

<daoConfig xmlns="http://ibatis.apache.org/dataAccess"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >

  <!--<providers resource="providers.config"/>-->
  
  <context id="SqlMapDao" default="true">

    <database>
      <provider name="oracleClient1.0"/>
      <!--<dataSource name="Oracle" connectionString="Data Source=vegasdb;user=slw;password=yugengyuan;Pooling=true"/>-->
      <dataSource name="Oracle" connectionString="Data Source=orcl;user=juwenchao;password=juwenchao;Pooling=true"/>
    </database>
    
    <daoSessionHandler id="SqlMap">
      
      <property name="resource" value="SqlMap.config"/>

    </daoSessionHandler>

    <daoFactory>
      <dao inte易做图ce="IBatis.Persistence.Inte易做图ces.Catalog.IGame_def, IBatis.Persistence"
        implementation="IBatis.Persistence.Mapper.Catalog.GameDefSqlMap, IBatis.Persistence"/>
      <dao inte易做图ce="IBatis.Persistence.Inte易做图ces.Catalog.IShop, IBatis.Persistence"
           implementation="IBatis.Persistence.Mapper.Catalog.ShopSqlMap, IBatis.Persistence"/>
      <dao inte易做图ce="IBatis.Persistence.Inte易做图ces.Catalog.IUsers, IBatis.Persistence"
           implementation="IBatis.Persistence.Mapper.Catalog.UserSqlMap, IBatis.Persistence"/>
    </daoFactory>

  </context>

</daoConfig>

--------------------编程问答-------------------- ding --------------------编程问答-------------------- <sqlMap namespace="user"><--命名空间,好像2.0默认是开通的-->

       <cacheModel type="LRU" id="oneDayCategory"><!--缓存配置,详细的资料请察看官方提供的用户手册,好像有中文版本的了 -->

              <flushInterval hours="24" />

       </cacheModel>


 

 

 

       <typeAlias type="com.infodeliver.pigeon.bean.User" alias="userbean" /><!--定义本地变量,为了方便使用 -->

       <typeAlias type="com.infodeliver.pigeon.util.Condition"

              alias="condition" />

       <typeAlias type="com.infodeliver.pigeon.bean.Role" alias="rolebean"/>

       

       <resultMap id="get_group_result"

              class="com.infodeliver.pigeon.bean.Group"><!-- 这就是不定义本地变量的结果-->

              <result property="groupid" column="group_id" />

              <result property="groupname" column="group_name" />

       </resultMap>

       

       <resultMap id="get_role_result" 

       class="rolebean">

       <result property="role_id" column="role_id"/>

       <result property="role_name" column="role_name"/>

       </resultMap>

       

       <resultMap id="get_user_result"

              class="userbean">

              <result property="user_id" column="user_id" />

              <result property="username" column="username" />

              <!--为user的group信息(属性groupid,groupname)配置 -->

              <result property="group.groupid" column="group_id"  />

              <result property="group.groupname" column="group_name" />

       <!—这里的property="group.groupid"的含义已经很对象化了,group指的User对象里的数据类型-Group的别名;这里的column=”group_id”为group表里的PK:group_id而非user表的FK:group_id,不要弄混淆了!-->

              <!--为user的role信息(属性roleid,rolename)配置,这里同样是User中的子对象,采取的处理却是不同的,通过group来避免使用子查询带来的性能问题,大家可以看到

第一个配置的粒度比较细微,配置子对象的属性,而role只是到对象一级,group中没有使用select="XXX"这样的子查询,从而避免了因为数据量大而引起二次查询带来的性能问题,而采用了一个role作为一个反面教材,大家比较一下可以发现其中的不同!-->

              <result property="role" column="role_id" select="get_role"/>

<!—这里采用了子查询(两次查询),注意这里的role_id是role表的PK:role_id,而非user表的FK:role_id,大家不要搞错了>

       </resultMap>

       

       <select id="get_role" parameterClass="int" resultMap="get_role_result"><!--这里的parameterClass="int"因为父查询传过来的role_id为int型的-->

       select * from sew_role where role_id=#value#

       </select>

       

       <select id="get_user" parameterClass="userbean"

              resultMap="get_user_result">

              select * from sew_user u,sew_group g<!--因为这里的group没有子查询,所以要使用嵌套!这样在执行的效率上比子查询有优势哦,大家应该很熟悉吧!-->

              where u.group_id=g.group_id 

              and  u.user_id=#user_id#

       </select>

       <select id="checkuser" parameterClass="userbean"

              resultMap="get_user_result">

              select * from sew_user u,sew_group g

              where u.group_id=g.group_id 

              and  u.username=#username#

              and u.password=#password#

       </select>

       <select id="get_group" resultMap="get_group_result"

              parameterClass="int">

              select * from sew_group where group_id=#value#

       </select> 

       <insert id="insertuser" parameterClass="userbean">

       insert into sew_user

       values(sew_user_id_seq.nextval,<!—因为数据库里用了序列-->

       #username#,#password#,#email#,#group.groupid#,#role.role_id#,#nationality#,

              #tel#,#address#,#language#,#isEvectioner#,#realname#)

       </insert>


 

 

 

 

 

 

 
 

<!—这里红色标注的:group.groupid同样的意思是User对象的数据成员:group,而groupid为子对象Group的数据成员(在UML里把带有setter和getter的数据成员称为属性。) -->

业务逻辑:

Public class UserService{      

public User getUser(User user){

              User user1=null;

              try {

                     System.out.println(user.getUser_id());

                     user1 =(User)getSqlMapExecutor().queryForObject("getuser",user);

              } catch (SQLException e) {         

                     e.printStackTrace();

                     return null;

              }

              return user1;

       }

}
 


 

 

 

请看操作部分的代码:

实现效果:察看user_id为2的用户在那个组。

              UserService us=new UserService();

              User ub=new User();     

              ub.setUser_id(2);

              ub =(User)us.getUser_Group(ub);

              System.out.println("ok"+"\n"+ub.getUsername()+"\n"+ub.getGroup().getGroupname()+"\n"+ub.getRole().getRole_name());

              System.out.println(ub.getGroup().getGroupname());
 

增加用户:

User user=new User();

              user.setUser_id(27);

              user.setUsername("##梁静茹!!");

              user.setPassword("1111");

              user.setEmail("ljr@sohu.com");

              user.setLanguage("CN");

              user.setAddress("无锡.江苏");

              user.setNationality("中国");

              user.setTel("1390000000");

              user.setRealname("欧阳静茹");

              Group g=new Group();

              g.setGroupid(1);

              Role r =new Role();

              r.setRole_id(1);

              user.setGroup(g);

              user.setRole(r);

              user=us.saveUser(user);

              if(user!=null)

                     System.out.println(user.getGroup().getGroupid());
 
--------------------编程问答-------------------- 不知道~ --------------------编程问答-------------------- 我调试两天终于好了,看了我眼睛都花了!我可以肯定是源参考代码中的配置文件似乎格式有问题,还是里面可能有些很奇妙的空格等等!导致文档解析一直失败,建议楼主新建个项目,将配置一步步导入 到新的项目,不要一下子拷贝很多,你就会发现你的程序本来可以运行!还有一个问题是版本问题,建议去参考官方网站上的文档,相当有用! --------------------编程问答-------------------- IBaitsNet可以参考FortuneBase中的应用

参考地址www.cnblogs.com/mail-ricklee --------------------编程问答-------------------- 个
--------------------编程问答-------------------- jf
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,