初学mybatis的理解

1、mybatis是对持久层的封装;

2、 核心对象:sqlsessionFactory sqlsession ,由工厂类得到session对象,再由session对象通过持久层接口的class文件得到接口对象,最后由接口对象调用接口中的方法,实现持久层的功能,然后关闭session。

3、测试采用的是测试类,用@注解的方式标记方法作用,引入了事务管理的概念。(个人理解事务类似于并发中同步锁的概念。)事务管理用来确保一组操作的时候       数据的完整性和一致性。

一个完整的事物需要满足以下的特性
 原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用
 一致性(consistency):一旦所有事务动作完成,事务就被提交。也就是说要么都成功,要么都不成功
 隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏
 持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响。应该被持久化到数据库中

这就是事务的四个关键属性(ACID)

又引入了断言的概念,即判断真假。

代码如下:

public class DBTools {


private static SqlSessionFactory sessionFactory;

static{
Reader reader = null;
try {
//读取配置文件,并将配置信息丢入资源中
reader = Resources.getResourceAsReader("mybatis.cfg.xml");
sessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

public static SqlSession getSession(){
return sessionFactory.openSession();
}



}

测试类:

public class TestUserMapper {
private SqlSession session = null;
@Before
public void beforeTestSaveUserBean(){
session = DBTools.getSession();
}








@Test
public void queryPageUserBean(){
IUserMapper um = session.getMapper(IUserMapper.class);
Map params = new HashMap();
params.put("userName", "量");
params.put("sex", "男");
//拼装分页对象
PageBean page = new PageBean();
page.setPage(1);
page.setRows(10);

params.put("index", (page.getPage()-1)* page.getRows());
params.put("rows",page.getRows());
int count = um.selectCountUserBeanByCondition(params);
List users = um.selectUserBeanByCondition(params);


page.setList(users);
page.setTotalRows(count);


System.out.println(page);
}



@Ignore
public void testBatchDeleteUserBean(){
IUserMapper um = session.getMapper(IUserMapper.class);
List ids = Arrays.asList(14,15,16,17);
int rows = 0;
try {
rows = um.batchDeleteUserBean(ids);
session.commit();
System.out.println(rows);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}





}





@Ignore
public void testSelectUserBeanByInfo(){
IUserMapper um = session.getMapper(IUserMapper.class);
UserBean user = um.getUserBeanByNameAndPassword("小黑", "654321");
System.out.println(user);
}


@Ignore
public void testDeleteUserBeanById(){
IUserMapper um = session.getMapper(IUserMapper.class);
int rows = 0;
try {
rows = um.deleteUserBean(2);
session.commit();
} catch (Exception e) {
// TODO: handle exception
session.rollback();
}
Assert.assertEquals(rows,1);
}

@Ignore
public void testUpdateUserBean(){
IUserMapper um = session.getMapper(IUserMapper.class);
int rows = 0;
try {
UserBean user = new UserBean("小黑","654321","女",6000.0);
//执行修改,并返回影响的行数
rows = um.updateUserBean(user, 1);
session.commit();//事务提交
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}
Assert.assertEquals(rows, 1);
}

@Ignore
public void testSaveUserBean(){

IUserMapper um = session.getMapper(IUserMapper.class);
UserBean user = new UserBean("小方","123456","男",6000.0);
int rows = 0;
try {
rows = um.saveUserBean(user);
//事务提交
session.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
session.rollback();
}

Assert.assertEquals(rows, 1);

}

@After
public void afterTestSaveUserBean(){
session.close();
}
}

其中持久层接口的实现类在mybatis中写成了XML文件,我想这就是和不用框架时的最大不同吧,当然也是主要要学习的东西

你可能感兴趣的:(初学mybatis的理解)