包功能分析:目前是猜的,如果错了以后会改的
- annotations: 注解配置的东西,只有标识作用
- binding:里面有个MapperProxy, 看着像是根据Mapper接口实现CRUD功能的。
- builder:里面的annotation和xml包下,会根据配置文件解析
- cache:里面有个decorators包,看样子是实现了装饰器模式,impl使用了Map实现缓存功能
- cursor:游标,不是很了解
- datasource:数据源
- executor:执行器,执行语句,并返回结果
- io:解析资源
- javassist:这貌似是一个JVM字节码库,不用管
- jdbc:生成JDBC能处理的语句
- lang:@UsesJava7和@UsesJava8
- logger:日志相关,不用管
- mapping:还不知道,生成结果的吗
- ognl:动态生成SQL语句
- reflection:反射工具包
- scripting:??
- session:用户主要打交道的类
- transaction:事务相关
type:SQL类型到Java类型的转换
框架
1.和数据库交互的第一种方式:直接使用SqlSession的方法。会将具体的实现,委托到Executor来实现
2.使用SqlSession.getMapper()来生成一个Mapper。
数据处理
1.解析#{……}里面的参数,使用JDBC的PreparedStatement.setXXX()来设置参数。
2.根据JDBC的返回结果ResultSet,来自动转换为Java数据类型,也有可能转换为List的列表,或一对多等的装换。
框架支持
1.事务管理:transaction包
2.数据源连接池:datasource包
3.缓存:cache包
4.SQL的配置
最简单的使用
public class SelectDemo {
public static void main(String[] args) throws Exception {
/*
* 1.加载mybatis的配置文件,初始化mybatis,创建出SqlSessionFactory,是创建SqlSession的工厂
* 这里只是为了演示的需要,SqlSessionFactory临时创建出来,在实际的使用中,SqlSessionFactory只需要创建一次,当作单例来使用
*/
InputStream inputStream = Resources.getResourceAsStream("mybatisConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
//2. 从SqlSession工厂 SqlSessionFactory中创建一个SqlSession,进行数据库操作
SqlSession sqlSession = factory.openSession();
//3.使用SqlSession查询
Map<String,Object> params = new HashMap<String,Object>();
params.put("min_salary",10000);
//a.查询工资低于10000的员工
List<Employee> result = sqlSession.selectList("com.louis.mybatis.dao.EmployeesMapper.selectByMinSalary",params);
//b.未传最低工资,查所有员工
List<Employee> result1 = sqlSession.selectList("com.louis.mybatis.dao.EmployeesMapper.selectByMinSalary");
System.out.println("薪资低于10000的员工数:"+result.size());
//~output : 查询到的数据总数:5
System.out.println("所有员工数: "+result1.size());
//~output : 所有员工数: 8
}
}