一.MyBatis
一.MyBatis框架
mybatis框架
一个框架,早期叫做ibatis,代码在gi thub
mybatis是MyBatis sQL Mapper Framework for Java ( sql映射框架)
1) sql mapper. : sql映射
可以把数据库表中的一行数据映射为一个java对象.
一行数据可以看做是一个java对象。操作这个对象,就相当于操作表中的数据
2)DataAccessobjects(DAOs):数据访问,对数据库执行增删改查.\
mybatis提供了哪些功能:
1.提供了创建Connection , statement, Resultset的能力,不用开发人员创建这些对象了
2.提供了执行sq1语句的能力, 不用你执行sql
3.提供了循环sql,把sql 的结果转为java对象,List集合 的能力
while (rs.next()) {
Student stu = new student() ;
stu. setId(rs .getInt("id")) ;
stu . setName (rs . getstring ("name")) ;
stu. setAge (rs .getInt("age")) ;
//从数据库取出数据转为student 对象,封装到List 集合
stulist. add(stu) ;
}
4.提供了关闭资源的能力,不用你关闭Connection, statement, Resultset
开发人员做的是: 提供sql语句
最后是: 开发人员提供 sql 语句---mybatis处理sql---开发人员得到List集合或者java对象(表中的数据)
总结:
mubatis是一个sql映射框架,提供的数据库的操作能力.(增强的JDBC)
使用mybatis让开发人员集中精神写sql就可以了,不必关心connection,statement,resultset的创建,销毁,sql的执行
二.主要类的介绍
1. Resources : mybatis中的一个类,负责读取主配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
2. SqlSessionFactoryBuilder : 创建sqlSessionFactory对象,
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder()
//创建SqlSessionFactory对象
SqlSessionFactory factory = builder.build(in);
3. SqlSessionFactory : 重量级对象,程序创建一个对象耗时较长,使用资源较多.在整个项目中,有一个就够用了.
SqlSessionFactory(接口) : 接口实现类 : DefaultSqlSessionFactory
SqlSessionFactory作业: 获取SqlSession对象.
SqlSession SqlSession = factory.openSession();
openSession()方法说明: 无参时,表示非自动提交事务,
带参数(true)时,表示获取自动提交事务
带参数(false)时,表示非自动提交事务,
4. SqlSession
SqlSession接口:定义了操作数据的方法
例如: selectOne() , selectList() , insert() , update() , delete()已经控制事务的方法.
SqlSession接口的实现类DefaultSqlSession
作用要求:
SqlSession对象不是线程安全的,需要在方法内部使用,
在执行sql语句之前,使用openSession()获取SqlSession,
在执行完sql语句后,需要执行SqlSession.close()方法关闭它,
这样才能保证他的使用是线程安全的.
MyBatis工具类
public class MyBatisUtils {
private static SqlSession sqlSession;
static {
try {
InputStream in = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
sqlSession = factory.openSession(true);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取sqlSession对象
public static SqlSession getSqlSession(){
return sqlSession;
}
//关闭sqlSession对象
public static void closeSqlSession(SqlSession sqlSession){
sqlSession.close();
}
}
使用 MyBatis 动态代理简化执行操作
/*
* 使用mybatis的动态代理机制 , 使用SqlSession.getMapper(dao接口)
* getMapper能获取dao接口对应的实现类对象.
*
* */
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserDao dao = sqlSession.getMapper(UserDao.class);
// dao 是JDK的动态代理
// 输出dao
System.out.println(dao.getClass().getName());
//调用dao的方法,执行数据库操作
List<User> users = dao.selectUser();
//关闭资源
MyBatisUtils.closeSqlSession(sqlSession);
for (User user : users) {
System.out.println(user);
}
/*
* List<User> users = dao.selectUser();
* 1.dao对象,类型是StudentDao , 全限定名称是: com.dsm.dao.UserDao
* 全限定名称和 namespace 是一致的
*
* 2.方法名称 , selectStudents , 这个方法就是mapper文件中的id值 selectStudents
*
* 3.通过dao中方法的返回值也可以确定MyBatis要调用的方法
* 如果返回值是List , 调用的是 SqlSession.selectList方法.
* 如果返回值是 int , 或者是非list , 看 mapper 文件中的标签是<insert> , <update>等
* 就会调用SqlSession的insert update等方法
*
* mybatis的动态代理: mybatis根据 dao的方法调用, 获取执行sql语句的信息.
* mybatis根据你的dao接口, 创建出一个dao接口的实现类, 并创建这个类的对象.完成SqlSession调用方法, 访问数据库
* */
版权声明:本文为DSM781314056原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。