1.什么是mybatis?
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及对结果集的检索。 MyBatis 可以使用简单的XML 或注解用于配置和原始映射,将接口和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
1)MyBATIS 目前提供了三种语言实现的版本,包括:Java、.NET以及Ruby。(我主要学习java,就讲java的使用)
2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
3)mybatis与hibernate的对比?
mybatis提供一种“半自动化”的ORM实现。
这里的“半自动化”,是相对Hibernate等提供了全面的数据库封装机制的“全自动化”ORM实现而言,“全自动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的自动生成和执行。
而mybatis的着力点,则在于POJO与SQL之间的映射关系
2.结构目录详情:
3.设置配置文件如下:
/p>
"http://mybatis.org/dtd/mybatis-3-config.dtd">
4.建立对应的实体类:
packagemybatis;public classCity {public intID;publicString Name;publicString CountryCode;publicString District;public intPopulation;public intgetID() {returnID;
}public void setID(intiD) {
ID=iD;
}publicString getName() {returnName;
}public voidsetName(String name) {
Name=name;
}publicString getCountryCode() {returnCountryCode;
}public voidsetCountryCode(String countryCode) {
CountryCode=countryCode;
}publicString getDistrict() {returnDistrict;
}public voidsetDistrict(String district) {
District=district;
}public intgetPopulation() {returnPopulation;
}public void setPopulation(intpopulation) {
Population=population;
}
@OverridepublicString toString() {return "World [ID=" + ID + ", Name=" + Name + ", CountryCode="
+ CountryCode + ", District=" + District + ", Population="
+ Population + "]";
}
}
5.配置CityMapper.xml:
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from city where CountryCode = #{CountryCode}
6.测试类进行测试:
packagemybatis;importjava.io.IOException;importjava.io.Reader;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;public classMybatisDemo {public static void main(String[] args) throwsIOException {//mybatis的配置文件
String resource = "mybatis/Configuration.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf =Resources.getResourceAsReader(resource);//构建sqlSession的工厂
SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(conf);//创建能执行映射文件中sql的sqlSession
SqlSession session =sessionFactory.openSession();/*** 映射sql的标识字符串,
* mybatis.CityMapper是CityMapper.xml文件中mapper标签的namespace属性的值,
* selectCityByCountryCode是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL*/String statement= "mybatis.CityMapper.selectCityByCountryCode";//映射sql的标识字符串//执行查询返回一个唯一City对象的sql
City wo = session.selectOne(statement, "ANT");
System.out.println(wo);
}
}
=====================================================================================================
使用接口:
新建一个接口类,CityInterface
packageinter;importmybatis.City;public interfaceCityInterface {public abstractCity selectCityByCountryCode(String CountryCode);
}
此时需要修改CityMapper.xml中的namespace的值,namespace的值必须为对应的接口类的全路径
select * from city where CountryCode = #{CountryCode}
修改测试类:
packagemybatis;importinter.CityInterface;importjava.io.IOException;importjava.io.Reader;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;public classMybatisDemo {public static void main(String[] args) throwsIOException {//mybatis的配置文件
String resource = "mybatis/Configuration.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf =Resources.getResourceAsReader(resource);//构建sqlSession的工厂
SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(conf);//创建能执行映射文件中sql的sqlSession
SqlSession session =sessionFactory.openSession();
CityInterface cityInter= session.getMapper(CityInterface.class);
City city= cityInter.selectCityByCountryCode("ANT");
System.out.println(city);
}
}
========================================================================================
实现数据的增删改查:
前面已经讲到用接口的方式编程。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:
1. 用 mybatis 查询数据,包括列表
2. 用 mybatis 增加数据
3. 用 mybatis 更新数据.
4. 用 mybatis 删除数据.
查询数据,前面已经讲过简单的,主要看查询出列表,也就是返回list, 在我们这个例子中也就是 List , 这种方式返回数据,需要在CityMapper.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的:
/p>
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
select * from city where CountryCode = #{CountryCode}
接口中增加方法返回类型是List的方法:
packageinter;importjava.util.List;importmybatis.City;public interfaceCityInterface {public abstract ListselectCityByCountryCode(String CountryCode);
}
修改测试类如下:
packagemybatis;importinter.CityInterface;importjava.io.IOException;importjava.io.Reader;importjava.util.List;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;public classMybatisDemo {public static void main(String[] args) throwsIOException {//mybatis的配置文件
String resource = "mybatis/Configuration.xml";//使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
Reader conf =Resources.getResourceAsReader(resource);//构建sqlSession的工厂
SqlSessionFactory sessionFactory = newSqlSessionFactoryBuilder().build(conf);//创建能执行映射文件中sql的sqlSession
SqlSession session =sessionFactory.openSession();
CityInterface cityInter= session.getMapper(CityInterface.class);
List city = cityInter.selectCityByCountryCode("AFG");//System.out.println(city.get(0));//System.out.println(city.get(1));//System.out.println(city.get(2));
for(City c : city){
System.out.println(c);
}
}
}