您的位置:首页 > 编程语言 > Java开发

MyBatis-搭建MyBatis开发环境二(MyEclipse版)

2016-05-30 12:58 459 查看
上一篇文章讲了如何搭建MyBatis开发环境,这篇主要补充下相关代码优化。

上一篇:MyBatis-搭建MyBatis开发环境一(MyEclipse版)

1、使用别名简化类路径配置



上一篇文章里这里我们使用的是类的完全包路径+类名类指定实体类类型,我们可以在mybatis-config.xml中配置别名来简化配置。



在mybatis-config.xml文件中添加如上配置,配置方式有俩种:

1、
<typeAlias alias="Emp" type="com.bc.pojo.Emp"/>
表示给指定类配置别名,别名为Emp。


2、
<package name="com.bc.pojo"/>
表示给指定包下所有类配置别名,别名为类名,比如在com.bc.pojo包下有Emp和Dept俩个实体类,那么别名就分别为Emp和Dept。


这样在EmpMapper.xml文件中,如下配置就可以使用别名来简化代码编写



2、SqlSessionFactory相关代码提取



如上代码所示,在上一篇文章中,我们每次写一个方法都要重复写入以上红框框内内容来获取SqlSession,实际上,对于SqlSessionFactory在程序中我们只需要创建一次,创建一个实例就够了,此时我们可以创建一个类将这些代码提取出来

public class MyBatisUtil {
/**静态SqlSessionFactory对象,表示只有一个*/
private static SqlSessionFactory factory;

/**使用静态代码块初始化SqlSessionFactory*/
static {
try {
InputStream is = Resources
.getResourceAsStream("mybatis-config.xml");
factory = new SqlSessionFactoryBuilder().build(is);
} catch (Exception e) {
e.printStackTrace();
}
}

/**创建会话SqlSession*/
public static SqlSession createSqlSession() {
return factory.openSession();
}

/**关闭指定SqlSession会话*/
public static void closeSqlSession(SqlSession sqlSession) {
if(sqlSession != null)
sqlSession.close();
}
}


这样我们测试类代码就可以改为

public class EmpTest {

private Logger logger = Logger.getLogger(OldEmpTest.class);

@Test
/**添加Emp测试*/
public void addEmpTest() {
SqlSession sqlSession = null;
//要插入的Emp对象
Emp emp = new Emp();
emp.setEname("测试");
emp.setDeptno(1);

try {
sqlSession = MyBatisUtil.createSqlSession();
sqlSession.insert("com.bc.dao.EmpMapper.addEmp", emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}

/**更新Emp测试*/
public void updateEmpTest() {
SqlSession sqlSession = null;
//要更新的Emp对象
Emp emp = new Emp();
emp.setEmpno(65);
emp.setEname("更新测试");

try {
sqlSession = MyBatisUtil.createSqlSession();
sqlSession.update("com.bc.dao.EmpMapper.updateEmp", emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}

/**查询Emp测试*/
public void getEmpListTest() {
SqlSession sqlSession = null;
//查询结果集
List<Emp> empList = new  ArrayList<>();

try {
sqlSession = MyBatisUtil.createSqlSession();
empList = sqlSession.selectList("com.bc.dao.EmpMapper.getEmpList");
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}

//遍历数据
for (Emp emp : empList) {
logger.debug(emp.getEname());
}
}

/**删除Emp测试*/
public void deleteEmpTest() {
SqlSession sqlSession = null;
//要删除的Emp对象
Emp emp = new Emp();
emp.setEmpno(65);

try {
sqlSession = MyBatisUtil.createSqlSession();
sqlSession.delete("com.bc.dao.EmpMapper.deleteEmp", emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}
}


3、使用接口和getMapper简化调用方法代码



从以上代码的红红框处可以看到我们之前调用方法是从Mapper配置文件中调用,这种写法容易写错,我们可以使用接口的方式来优化这段代码。



如上图所示,我们新建一个接口,接口取名与xml保持一致,接口内方法名与xml内配置的方法名保持一致。



这样我们就配置好了接口,接下来我们就可以在代码中使用getMapper方法来调用我们配置好的方法。

测试类代码

public class EmpTest {

private Logger logger = Logger.getLogger(OldEmpTest1.class);

@Test
/**添加Emp测试*/
public void addEmpTest() {
SqlSession sqlSession = null;
//要插入的Emp对象
Emp emp = new Emp();
emp.setEname("测试");
emp.setDeptno(1);

try {
sqlSession = MyBatisUtil.createSqlSession();
//调用getMapper传入接口类型获取接口内方法
sqlSession.getMapper(EmpMapper.class).addEmp(emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}

/**更新Emp测试*/
public void updateEmpTest() {
SqlSession sqlSession = null;
//要更新的Emp对象
Emp emp = new Emp();
emp.setEmpno(65);
emp.setEname("更新测试");

try {
sqlSession = MyBatisUtil.createSqlSession();
sqlSession.getMapper(EmpMapper.class).updateEmp(emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}

/**查询Emp测试*/
public void getEmpListTest() {
SqlSession sqlSession = null;
//查询结果集
List<Emp> empList = new  ArrayList<>();

try {
sqlSession = MyBatisUtil.createSqlSession();
empList = sqlSession.getMapper(EmpMapper.class).getEmpList();
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}

//遍历数据
for (Emp emp : empList) {
logger.debug(emp.getEname());
}
}

/**删除Emp测试*/
public void deleteEmpTest() {
SqlSession sqlSession = null;
//要删除的Emp对象
Emp emp = new Emp();
emp.setEmpno(65);

try {
sqlSession = MyBatisUtil.createSqlSession();
sqlSession.getMapper(EmpMapper.class).deleteEmp(emp);
//5 提交事务
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
//出现异常回滚事务
sqlSession.rollback();
} finally {
//关闭会话
MyBatisUtil.closeSqlSession(sqlSession);
}
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis