MyBatis-搭建MyBatis开发环境二(MyEclipse版)
2016-05-30 12:58
459 查看
上一篇文章讲了如何搭建MyBatis开发环境,这篇主要补充下相关代码优化。
上一篇:MyBatis-搭建MyBatis开发环境一(MyEclipse版)
1、使用别名简化类路径配置
上一篇文章里这里我们使用的是类的完全包路径+类名类指定实体类类型,我们可以在mybatis-config.xml中配置别名来简化配置。
在mybatis-config.xml文件中添加如上配置,配置方式有俩种:
1、
2、
这样在EmpMapper.xml文件中,如下配置就可以使用别名来简化代码编写
2、SqlSessionFactory相关代码提取
如上代码所示,在上一篇文章中,我们每次写一个方法都要重复写入以上红框框内内容来获取SqlSession,实际上,对于SqlSessionFactory在程序中我们只需要创建一次,创建一个实例就够了,此时我们可以创建一个类将这些代码提取出来
这样我们测试类代码就可以改为
3、使用接口和getMapper简化调用方法代码
从以上代码的红红框处可以看到我们之前调用方法是从Mapper配置文件中调用,这种写法容易写错,我们可以使用接口的方式来优化这段代码。
如上图所示,我们新建一个接口,接口取名与xml保持一致,接口内方法名与xml内配置的方法名保持一致。
这样我们就配置好了接口,接下来我们就可以在代码中使用getMapper方法来调用我们配置好的方法。
测试类代码
上一篇: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 oracle BLOB类型字段保存与读取
- MyBatis MapperProvider MessageFormat拼接批量SQL语句执行报错的原因分析及解决办法
- SpringMVC整合mybatis实例代码
- oracle+mybatis 使用动态Sql当插入字段不确定的情况下实现批量insert
- MyBatis学习笔记(二)之关联关系
- 浅析Mybatis 在CS程序中的应用
- Java Mybatis框架入门基础教程
- Windows下Java+MyBatis框架+MySQL的开发环境搭建教程
- Mybatis与Ibatis的区别
- MyBatis学习教程(二)―如何使用MyBatis对users表执行CRUD操作
- MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题
- Java简单实现SpringMVC+MyBatis分页插件
- MyBatis批量添加、修改和删除
- MyBatis与Hibernate的比较
- 浅析mybatis和spring整合的实现过程
- 在Java的MyBatis框架中建立接口进行CRUD操作的方法
- 整理Java的MyBatis框架中一些重要的功能及基本使用示例
- mybatis的动态sql详解(精)
- MyBatis实践之动态SQL及关联查询
- 详解Mybatis动态sql