1、局部 SQL 配置文件重要标签说明:
作用:把sql语句保存在Mybatis的局部配置文件中,给某个数据访问类使用; 根节点为<mapper>… </mapper>; namespace:命名空间,其值为某一个dao层实现类的具体路径,表示这个类要使用相应的SQL语句。这个具体路径不要自己写,可以选中该类,右键,选择“copy Reference”,然后粘贴即可。 select标签存放查询语句,insert标签存放insert语句,update标签存放update语句, delete标签存放delete语句; id:在整个配置文件中id值必须唯一,一般情况下,其值与dao层类中使用该SQL语句的方法名保持一致; resultType:指定当前sql查询语句返回的数据类型。类型不是sql语句的最终类型,而是某一条数据的类型,一般用实体类表示,即用该实体类的“全路径”来表示。简化使用时,也可以用MAP数据类型; parameterType:指定SQL语句接收的参数类型 一对mapper里,可以编写多条sql语句。 2、不带参数的简单查询: (1)select语句返回User实体对象: resultType="cn.java.entity.User" 表示返回多条User实体类,如: <select id="getAllUser" resultType="cn.java.entity.User"> SELECT * FROM users </select> (2) select 语句不使用实体类,直接用 Map 数据类型,返回 List<Map<String,Object>,更加简单,简化程序,如: <select id="getAllUserMap" resultType="Map"> SELECT * FROM users </select> 3、带参数的简单查询: (1)带一个参数简单查询: parameterType:指定SQL语句接收的参数类型 <select id="getUserById" resultType="map" parameterType="Long"> SELECT * FROM users WHERE id=#{0} </select> 实现类中的调用方法的代码如下: Long id = 1L; Map<String, Object> userMap = session.selectOne("cn.java.dao.impl.UserDaoImpl.getUserById", id); (2)带多个参数简单查询: 用Map封装,parameterType=Map: <select id="getUserByMulCondition" resultType="map" parameterType="Map"> SELECT * FROM users WHERE username='${username}' AND PASSWORD='${pwd}' </select> 实现类中的调用方法的代码如下: Map<String, Object> paramMap = new HashMap<String, Object>(); // 封装参数 paramMap.put("username", "admin"); paramMap.put("pwd", "123"); // 传递参数 Map<String, Object> userMap = session.selectOne("cn.java.dao.impl.UserDaoImpl.getUserByMulCondition", paramMap); (4)简单的更新数据: 注意: insert,delete,update操作没有resultType属性,默认返回int类型的值; 不同的更新操作,使用不同的标签; parameterType=”Map”,表示参数类型为Map,用Map封装参数; 为了防止SQL注入攻击,SQL语句中使用#表示参数化SQL语句; 更新操作一定要提交事务, 执行命令: session.commit(); (1)插入一条记录时,代码如下: <insert id="addUser" parameterType="Map"> INSERT INTO users SET username=#{username},PASSWORD=#{password} </insert> 实现类中的调用方法的代码如下: Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("username", "Rose"); paramMap.put("password", "1234"); int resultInt = session.insert("cn.java.dao.impl.UserDaoImpl.addUser", paramMap); session.commit(); // 更新操作一定要提交事务 (2)插入多条记录时,使用foreach标签,代码如下: <insert id="addUserBatch" parameterType="cn.java.entity.User"> insert into users(username,PASSWORD) values <foreach collection="list" item="user" separator=","> (#{user.username},#{user.password}) </foreach> </insert> 实现类中的调用方法的代码如下: List<User> list = new ArrayList<>(); User user; for (int i = 0; i < 10; i++) { user = new User(); user.setUsername("test" + i); user.setPassword("666"); list.add(user); } int resultInt = session.insert("cn.java.dao.impl.UserDaoImpl.addUserBatch",list); (5)动态查询数据: 注意: 实现动态查询; where 标签:当有查询条件时,就使用 where 命令,当没有查询条件时,就不用 where 命令 if test:判断是否对某个字段进行查询,为空值就不查询该字段 代码如下: <select id="getCourseByDynam" resultType="Map" parameterType="Map"> SELECT * FROM course <where> <if test="cname!=null"> cname=#{cname} </if> <if test="credit!=null"> and credit=#{credit} </if> <if test="department!=null"> and department=#{department} </if> </where> </select> 实现类中的调用方法的代码如下: Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("cname", "数据结构"); //paramMap.put("credit", 4); //paramMap.put("department", "软件工程"); List<Map<String, Object>> courseList = session.selectList("cn.java.dao.impl.UserDaoImpl.getCourseByDynam", paramMap); for (Map<String, Object> map : courseList) { System.out.println(map); (6)动态更新数据: 注意: 实现动态更新; set标签:当有更新字段时,就使用set命令,当没有更新字段时, 语句为 UPDATE course SET id=NULL WHERE id=NULL 代码如下: <update id="updateCourseByDynam" parameterType="Map"> update course <set> <if test="cname!=null"> cname=#{cname}, </if> <if test="credit!=null"> credit=#{credit}, </if> <if test="department!=null"> department=#{department}, </if> id=#{id} </set> where id=#{id} </update> 实现类中的调用方法的代码如下: Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("cname", "数据库原理"); paramMap.put("credit", 4); // paramMap.put("department", "软工 1"); paramMap.put("id", 1); int resultInt = session.update("cn.java.dao.impl.UserDaoImpl.updateCourseByDynam", paramMap); 标签:语句,Map,框架,CRUD,查询,put,paramMap,MyBatis,id From: https://www.cnblogs.com/qiqi-yi/p/17276023.html