半自动化ORM框架mybatis

原创
2014/07/27 22:47
阅读数 665

ORM架构的通用方式:

1:从配置文件中读取定义的sessionfactory。

2:用sessionfactory生成session

3:利用session做增删改查

4:commit sql语句操作。

5:关闭session。



半自动化ORM框架mybatis

mybatis学习 :

       新增Configuration.xml。所有配置在configuration中配置,

配置typealias别名     

配置environment 在environment中配置transactionManager,type="jdbc",其中的dataSource设置type="POOLED"或者type="SAMPLE"

配置mappers,设置实体与数据库映射的xml

定义一个interface,里面定义所有的抽象方法都是正删改查的抽象方法。例如IUserOperation

设置model,model里都是实体类。get和sset方法。和数据库一一对应。例如User类。  //必须要有无参构造方法,不然根据UserMapper.xml中的配置,在查询数据库时,将不能反射构造出User实例    (JAVA默认会给个无参构造)

User类定义一个同名的xml文档,在xml文档中指定namespace.指向interface:IUserOperation

定义一些增删改查的语句。

  <!-- 这里namespace必须是interface:IUserOperation  接口的路径,不然要运行的时候要报错 “is not known to the MapperRegistry”-->  

例如:

<select id="selectUserByID" parameterType="int" resultType="User">

        select * from `user` where id = #{id}
    </select>

--------------------------------------------------------------------------------

<!-- 为了返回list 类型而定义的returnMap -->  
    <resultMap type="User" id="resultListUser">  
        <id column="id" property="id" />  
        <result column="userName" property="userName" />  
        <result column="userAge" property="userAge" />  
        <result column="userAddress" property="userAddress" />  
    </resultMap>

--------------------------------------------------------------------------------

 <!--执行增加操作的SQL语句。id和parameterType   
       分别与IUserOperation接口中的addUser方法的名字和   
       参数类型一致。以#{name}的形式引用Student参数   
       的name属性,MyBatis将使用反射读取Student参数   
       的此属性。#{name}中name大小写敏感。引用其他   
       的gender等属性与此一致。seGeneratedKeys设置   
       为"true"表明要MyBatis获取由数据库自动生成的主   
       键;keyProperty="id"指定把获取到的主键值注入   
       到Student的id属性-->  
    <insert id="addUser" parameterType="User"  
        useGeneratedKeys="true" keyProperty="id">  
        insert into user(userName,userAge,userAddress)   
             values(#{userName},#{userAge},#{userAddress})   
    </insert>


-------------------------------------------------------------

 <!-- User 联合文章进行查询 方法之一的配置 (多对一的方式)  -->     
    <resultMap id="resultUserArticleList" type="Article">  
        <id property="id" column="aid" />  
        <result property="title" column="title" />  
        <result property="content" column="content" />  
         
        <association property="user" javaType="User">  
            <id property="id" column="id" />  
            <result property="userName" column="userName" />  
            <result property="userAddress" column="userAddress" />             
        </association>         
    </resultMap>



定义测试方法/DAO

引用import org.apache.ibatis.session.SqlSessionFactory;

private static SqlSessionFactory sqlSessionFactory;  
    private static Reader reader;  
    static{  
        try{  
            reader    = Resources.getResourceAsReader("Configuration.xml");  
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);  
        }catch(Exception e){  
            e.printStackTrace();  
        }  
    }

    public static SqlSessionFactory getSession(){  
        return sqlSessionFactory;  
    }


 SqlSession session = sqlSessionFactory.openSession();  
             try {  
                 IUserOperation userOperation=session.getMapper(IUserOperation.class); //拿到所有的增删改查抽象方法。  
                 User user = userOperation.selectUserByID(1);  
                 System.out.println(user.getUserAddress());  
                 System.out.println(user.getUserName());  
             } finally {  
                 session.close();  
             }  
     }






引用ApplicationContext  (import org.springframework.context.ApplicationContext;)

 得到配置和数据源 ctx = new ClassPathXmlApplicationContext("applicationContext.xml");  

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部