Mybatis使用入门,这一篇就够了 (2)

参考:配置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> 插入

主键为序列

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zypgwj.html