mybatis讲解以及示例程序

我对MyBatis的理解仅仅是:它以前叫IBtais,现在投到谷歌帐下,改名MyBatis,这个框架把JDBC中的重复代码封装起来,减少代码量。仅仅知道这些而已,慢慢学习吧,从网上找了一个最简单的例子。

MyBatis+MySQL的,记录如下:

数据库

在MySQL中,test数据库下,简历user表,一共两个字段id和name,建表语句略。

②需导入的包

只有两个:

mybatis-3.0.3.jar

mysql-connector-Java-5.1.9-bin.jar(JDBC包)

③目录结构

采用最简单的结构,domain包下有且仅有四个文件

configuration.xml

User.xml

User.java

Test.java

④实体类javabean,总共两个变量

[java]  view plain  copy
  1. package domain;  
  2.   
  3. public class User {  
  4.     private int id;  
  5.     private String name = null;  
  6.     public User() {  
  7.     }  
  8.     public User(int id, String name) {  
  9.         this.id = id;  
  10.         this.name = name;  
  11.     }  
  12.     public int getId() {  
  13.         return id;  
  14.     }  
  15.     public void setId(int id) {  
  16.         this.id = id;  
  17.     }  
  18.     public String getName() {  
  19.         return name;  
  20.     }  
  21.     public void setName(String name) {  
  22.         this.name = name;  
  23.     }  
  24.     @Override  
  25.     public String toString() {  
  26.         return "User [id=" + id + ", name=" + name + "]";  
  27.     }  
  28. }  

 

⑤MyBatis总配置文件configuration.xml

 

[java]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC   
  3.     "-//mybatis.org//DTD Config 3.0//EN"  
  4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  5. <configuration>  
  6.     <typeAliases>  
  7.         <typeAlias alias="User" type="domain.User" />  
  8.     </typeAliases>  
  9.     <environments default="development">  
  10.         <environment id="development">  
  11.             <transactionManager type="JDBC" />  
  12.             <dataSource type="POOLED">  
  13.                 <property name="driver" value="com.mysql.jdbc.Driver" />  
  14.                 <property name="url" value="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8" />  
  15.                 <property name="username" value="root" />  
  16.                 <property name="password" value="" />  
  17.             </dataSource>  
  18.         </environment>  
  19.     </environments>  
  20.     <mappers>  
  21.         <mapper resource="domain/User.xml" />  
  22.     </mappers>  
  23. </configuration>  

⑥User类的配置文件User.xml

[java]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE mapper PUBLIC   
  3.     "-//mybatis.org//DTD Mapper 3.0//EN"  
  4.     "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  5. <mapper namespace="User">  
  6.     <select id="selectUser" parameterType="int" resultType="User"><!--[CDATA[  
  7.         select * from user where id = #{id}  
  8.     ]]--></select>  
  9. </mapper>  

测试用例

[java]  view plain  copy
  1. package domain;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Reader;  
  5. import org.apache.ibatis.io.Resources;  
  6. import org.apache.ibatis.session.SqlSession;  
  7. import org.apache.ibatis.session.SqlSessionFactory;  
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  9. import domain.User;  
  10.   
  11. public class Test {  
  12.     public static void main(String[] args) throws IOException {  
  13.         String resource = "domain/configuration.xml";  
  14.         Reader reader = Resources.getResourceAsReader(resource);  
  15.         SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);  
  16.         SqlSession session = ssf.openSession();  
  17.         try {  
  18.             User user = (User) session.selectOne("selectUser""1");  
  19.             System.out.println(user);  
  20.         } catch (Exception e) {  
  21.             e.printStackTrace();  
  22.         } finally {  
  23.             session.close();  
  24.         }  
  25.     }  
  26. }  

  1. 下面一句一句的分析一下。

    String resource = "domain/configuration.xml";

    第一句代码用路径名和文件名做了一个字符串,没什么好说的。

    Reader reader = Resources.getResourceAsReader(resource);

    第二句使用一个Java.io中的reader字符流,读取了什么,肯定是读取了配置信息吧,通过字面意思也可以推测出来Resources.getResourceAsReader。

    那么这时候reader这个对象就就把总配置文件configuration.xml加载到内存中了,接下来想必是要解析这个.xml总配置文件了。

    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);

    首先是什么,查看源码,这是一个直接继承自object的类,其中只有4个重载的build方法,

    返回值是SqlSessionFactory,接下来的很复杂我看不懂;

    整理一下思路,在这一句中new了一个SqlSessionFactoryBuilder对象,这个对象用参数reader,建立了一个SqlSessionFactory对象,那我暂时这样理解,这是一个MyBatis专用的解析总配置文件的类,这个类最终构建了一个SqlSessionFactory对象。

    下一句:

    SqlSession session = ssf.openSession();

    既然是个Factory,那么想必是个工厂类,用工厂方法生成了一个SqlSession,这个SqlSession后面我一直在用,那么好,虽然没搞明白全部,我总算的到可用的对象了。

     

    下面是增删改查了,先不看,回头研究刚才一直在用的configuration.xml总配置文件

    configuration够难的,是配置的意思,根标签也是configuration。

    先看能看懂的property,有键值对key&value两个字符串,这四个学过JDBC的都知道,

    再看其上层标签,<dataSource type="POOLED">

    有POOLED和UNPOOLED两种type,UNPOOLED只能有上面的四个子标签,而POOLED可以配置JDBC连接池,详细的配置以后再说。

     

    在看上面的Alias,明显是在给实体类起别名可以理解

    <transactionManager type="JDBC" />

    是说事务由JDBC控制也可以理解

    <environments default="development">
             <environment id="development">

    环境是开发环境,据说还有测试,发布等等的环境










  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值