MyBatis之sql映射文件
MyBatis的强大之处就在于它的sql映射文件,下面介绍sql映射文件的几个顶级元素配置
1)mapper:映射文件的根元素节点,只有一个namespace(命名空间)
* 用于区分不同的mapper,全局唯一
* 绑定dao接口,即面向接口编程, 当,namespace绑定某一接口之后,可以不用写该接口的实现类,MyBatis会通过接口的完整的限定名查找到对应的mapper配置来执行sql语句,应此namespace的命名必须要跟接口同名。
2)cache:配置给定的命名空间的缓存
3)cache——ref:从其他冥冥空间的引用缓存配置
4)resultMap:用来描述数据库结果集和对象的对应关系
5) sql : 可以重用的sql块,也可以被其他语句引用
6) insert:映射插入语句
7) update :映射更新语句
8) delete :映射删除语句
9)select :映射查询语句
1.使用select完成单条件查询
1〉dao曾方法
public List<User> findAll();
2〉xml文件
<select id="findAll" resultType="User"> SELECT * FROM user </select>
3〉测试方法
public void findAll(){ Logger logger = Logger.getLogger(UserTest.class); SqlSession sqlSession = null; try { //3.创建sqlSession sqlSession = MyBatisUtil.createSqlSession(); List<User> list = sqlSession.getMapper(IUserDao.class).findAll(); for (User user : list){ logger.debug("list---------->"+user.getUserName()+"\t"+user.getUserCode()); } } catch (Exception e) { e.printStackTrace(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }
2.使用select完成多条件查询
1〉dao层方法
//多条件查询 public List<User> findListByManneyContent(Map<String, Object> map);
2〉xml文件的sql语句
<!--多条件查询--> <select id="findListByManneyContentIndex" resultType="User"> SELECT * FROM user where userName LIKE CONCAT('%',#{0},'%') AND id>=#{1} </select>
3〉测试方法
//多条件查询,查询id〉2的员工姓名 @Test public void findListByManneyContentIndex(){ SqlSession sqlSession = null; try { sqlSession = MyBatisUtil.createSqlSession(); List<User> list = sqlSession.getMapper(IUserDao.class).findListByManneyContentIndex("测",2); for (User user : list) { System.out.println("user-------->"+user.getUserCode()+"\t" +user.getUserName()); } } catch (Exception e) { e.printStackTrace(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }
3.使用insert完成增加功能
1〉dao层方法
//增加的方法
public void add(Role role);
2〉xml配置的sql语句
<insert id="add" parameterType="Role">
INSERT INTO role(roleCode,roleName) VALUES (#{roleCode},#{roleName})
</insert>
3〉测试方法
//增加的方法 @Test public void addTest(){ SqlSession sqlSession = null; Role role = new Role(); role.setRoleCode("SALE"); role.setRoleName("销售"); try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(RoleMapper.class).add(role); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }
4.使用update完成修改功能
1〉dao层方法
//修改的方法 public int update(User user);
2〉xml配置文件的sql语句
<update id="update" parameterType="User"> UPDATE user SET userCode=#{userCode},userName=#{userName} WHERE id=#{id} </update>
3〉测试方法
@Test public void update(){ Logger logger = Logger.getLogger(UserTest.class); SqlSession sqlSession = null; User user = new User(); user.setId(6); user.setUserCode("test06"); user.setUserName("张三"); try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(IUserDao.class).update(user); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }
5.使用delete完成删除功能
1〉dao层方法
//删除的方法 public void delete(Role role);
2〉xml配置文件的sql语句
<delete id="delete" parameterType="Role"> DELETE from role WHERE id=#{id} </delete>
3〉测试方法
//删除的方法 @Test public void deleteTest(){ Role role = new Role(); role.setId(5); SqlSession sqlSession = null; try { sqlSession = MyBatisUtil.createSqlSession(); sqlSession.getMapper(RoleMapper.class).delete(role); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); sqlSession.rollback(); }finally { MyBatisUtil.closeSqlSession(sqlSession); } }