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 }
前者再用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);*/
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 }
主要是前代码与后代码。