mybatis与ibatis--个人总结。

简要说明:前面是ibatis,后面是mybatis。

1.SqlMapConfig.properties与mybatis-config.properties是一样的,这里是数据库连接的参数设置。

2.SqlMapConfig.xml与mybatis-config.xml

头文件不同,因为前才是2.0版本,后者是3.0版本。

里面的具体支点的格式的写法也有所不同。

前者dataSource type="SIMPLE"则用

<dataSource type="SIMPLE">
   <property name="JDBC.Driver" value="${driver}" />
   <property name="JDBC.ConnectionURL" value="${url}" />
   <property name="JDBC.Username" value="${username}" />
   <property name="JDBC.Password" value="${password}" />
  </dataSource>

后者用pooled则用

<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
   </dataSource>

3.map.xml与mapper.xml

头文件不同。

支点的格式:前者是<sqlMap> 后者是<mapper>

里面的属性也不太一样:

前者可以用别名,但后者可能没有别名这个属性

前者是parameterClass resultClass 后者是parameterType resultType

前者用id=#id#及 #id   后者用id=#{id}

前者: <!-- 相等查询:可以用sname=#sname# 模糊查询:'%$sname$%'-->

后者用注解时就不用mapper.xml而是DAO中加入注解:

 @Insert("insert into student(id,sname,birth,score) values(#{id},#{sname},#{birth},#{score})")
     public void insert(Student student); //插入 

4.都有DAO类与实体类。

5.前者用DAOImpl类:

 1 private static SqlMapClient sqlMapClient=null;
 2     static{
 3         try {
 4             Reader reader=Resources.getResourceAsReader("com/com/SqlMapConfig.xml");
 5             sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
 6             reader.close();
 7         } catch (IOException e) {
 8             // TODO Auto-generated catch block
 9             e.printStackTrace();
10         }
11         
12     }
13 
14 
15 
16     public void addStudent(Student student) {
17         try {
18             sqlMapClient.insert("addStudent", student);
19         } catch (SQLException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23     }
24 
25     public void deleteStudent(int id) {
26         // TODO Auto-generated method stub
27         try {
28             sqlMapClient.delete("deleteStudent", id);
29         } catch (SQLException e) {
30             // TODO Auto-generated catch block
31             e.printStackTrace();
32         }
33     }
DAOImpl

前者再用Test:

 1 IStudentDAO iStudentDAO=new IStudentDAOImpl();
 2         //1.查询所有
 3         /*System.out.println("测试查询所有:");
 4         List<Student> students=iStudentDAO.selectAllStudent();
 5         for(Student student:students)
 6             System.out.println(student.toString());*/
 7         //2.插入
 8         /*Student student=new Student();
 9         student.setId(311);
10         student.setSname("依依");
11         student.setBirth(Date.valueOf("2013-5-5"));
12         student.setScore(100);
13         iStudentDAO.addStudent(student);*/
test代码

6.后者没有实现类,而是用直接的Test:

 1 @Test
 2     public void IStudentDAOTest()throws Exception
 3     {
 4         String resource = "com/com/mybatis-config.xml";
 5         Reader reader = Resources.getResourceAsReader(resource);
 6         SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
 7         SqlSessionFactory factory = builder.build(reader);
 8         
 9         factory.getConfiguration().addMapper(IStudentDAO.class);//利用注解要加上这句是注册,否则不用加
10         SqlSession session = factory.openSession();
11         IStudentDAO iStudentDAO = session.getMapper(IStudentDAO.class);
12         
13         //1.insert:
14         //(错)不可为何不能让接口函数是public int insert(Student student);会出现如下
15         //(错)org.apache.ibatis.binding.BindingException:
16         //(错)映射法'com.com.IStudentDAO.insert试图从一种原始的返回类型(int)方法返回null。
17         //(错)只能用void类型
18         //上面的说法是错的,是我在mapper.xml中写错了,本来是<insert>,让我写成了<selcet>
19         //经我验证可以用int也可以void。
20         
21         //但也可以知道用<select>来插入,那样就把接口中的函数定义为void型
22         Student student=new Student();
23         student.setId(17);
24         student.setSname("xiaoming");
25         student.setBirth(java.sql.Date.valueOf("2012-9-8"));
26         student.setScore(89);
27         iStudentDAO.insert(student);
28         
29         //2.update
30         /*Student dStudent=new Student();
31         dStudent.setSname("dada2");
32         dStudent.setId(16);
33         dStudent.setBirth(java.sql.Date.valueOf("2013-7-1"));
34         dStudent.setScore(48);
35         iStudentDAO.update(dStudent);*/
36         
37         //3.delete
38         /*iStudentDAO.delete("dada2");*/
39         
40         //1.记录的条数:
41         /*iStudentDAO.countAll();
42         System.out.println("记录条数:"+iStudentDAO.countAll()); */  
43         //2.所有记录的列举:
44         /*List<Student> students=iStudentDAO.selectAll();
45         Iterator<Student> iter=students.iterator();
46         while(iter.hasNext())
47         {
48             Student st=iter.next();
49             //编号与数据库中的id不一样就会全为0,而不是具体的数字。
50             System.out.println("编号:"+st.getId()+"  学生名:"+st.getSname()+"出生日期:"+st.getBirth()+"成绩:"+st.getScore());
51         }*/
52       //4.findBySname
53        /* Student findStudent=iStudentDAO.findBySname("caocao");
54         System.out.println(findStudent.getBirth());*/
55         
56         
57         session.commit();
58         session.close();
59         
60     }
61     
62 
63 }
seesion代码

主要是前代码与后代码。

原文地址:https://www.cnblogs.com/yyy88168/p/3202642.html