参考:配置MyBatis时报错信息的解决方案
SQLSession方法说明 方法名 说明insert 插入
delete 删除
update 更新
selectOne 查找单行结果,返回一个Object
selectList 查找多行结果,返回一个List
使用和之前一样,第一个参数传入一个namespce+id,就可以找到指定的mapper文件里面的sql语句,并执行
CRUD 查询Employee中,属性名和表的列名对应
<select resultType="Employee"> select * from employee </select>如果属性和表的列名不一致,可以使用列名映射resultMap标签,(也就是自动转为别名)
<!--type也是需要全包名,由于之前定义的别名,所以就可以不写--> <resultMap type="Employee"> <!--使用映射,把对应的列名映射为对应的属性 --> <id property="empno" column="EMPNO" /> <result property="ename" column="ENAME"/> <result property="job" column="JOB"/> <result property="mgr" column="MGR"/> <result property="hiredate" column="HIREDATE"/> <result property="sal" column="SAL"/> <result property="comm" column="COMM"/> <result property="deptno" column="DEPTNO"/> </resultMap> <!--引用上面定义的resultMap--> <select resultMap="baseResultMap"> select * from employee </select>带条件查询
<select parameterType="int" resultMap="baseResultMap"> <!-- 如果参数类型是简单的基本或者包装类型,#{} 里面的可以任取,都是可以获得参数 --> select * from EMPLOYEE where EMPNO=#{id} </select> //使用 Employee e = sqlsession.selectOne("employeeMapper.selectById",7369);上面的select语句相当于一个预编译语句
String s = "SELECT * FROM employee WHERE empno=?"; PreparedStatement ps = conn.prepareStatement(s); ps.setInt(1,empno);多条件查询
可以使用where标签,当然,之前的单条件也可以使用where标签,where标签好处是会自动删除多余的and
<select parameterType="Employee" resultMap="baseResultMap"> select * from EMPLOYEE <where> <!--自动删除多余的and --> <!--#相当于从传入的bean对象(Employee)中通过getDeptno方法获得属性值 --> and deptno=#{deptno} and sal>=2000 </where> </select>大小比较条件
条件中有大小比较,<号得通过CDATA存放条件
<select parameterType="Employee" resultMap="baseResultMap"> select * from EMPLOYEE <where> <!--loSal为Employee的一个属性,#{loSal}相当于是通过Employee对象的get方法来获得loSal的属性值 --> and SAL>=#{loSal} <!--CDATA中的数据不会被解析器解析 --> <![CDATA[ and SAL<=#{hiSal} ]]> </where> </select>#与$区别:
${}用在我们能够确定值的地方,也就是我们程序员自己赋值的地方。
而#{}一般用在用户输入值的地方!!
参考:
MyBatis中#{}和${}的不同和${}的妙用
模糊查询:
模糊查询中需要使用%等通配符,我们可以在xml中定义好,自动拼接通配符
<select parameterType="Employee" resultMap="baseResultMap"> select * from EMPLOYEE <where> <if test="ename != null"> <!--使用bind标签,设置格式,自动拼接通配符 --> <bind value="'%' + ename + '%'"/> and ENAME like #{pattern} </if> </where> </select>动态查询
Mybatis中提供了if标签用来实现动态查询,和JSTL标签库使用类似
<select parameterType="Employee" resultMap="baseResultMap"> select * from EMPLOYEE <where> <!--#{ename}其实是通过Employee类中的get方法来获得对象的ename属性值 --> <if test="ename != null"> and ename=#{ename} </if> <if test="job != null and job.trim().length>0"> and JOB=#{job} </if> <if test="deptno != null"> and DEPTNO=#{deptno} </if> </where> </select> 插入主键为序列