1.6,编写测试类
为了方便测试类管理,我们一般会在项目中创建一个test文件夹,用来存放测试相关的代码。右击项目创建test文件夹,然后右击test文件夹创建test类。如图:
然后开始在这个测试类中编写代码:
package com.demo.test; import com.demo.bean.Student; import com.demo.dao.StudentMapper; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; import java.util.List; public class test { public static void main(String[] args) { // 加载mybatis.xml文件 String resource = "mybatis.xml"; InputStream inputStream = null; SqlSession sqlSession = null; StudentMapper studentMapper = null; try { inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); // 开启事务,自动提交事务(无参--手动提交) sqlSession = sqlSessionFactory.openSession(); studentMapper = sqlSession.getMapper(StudentMapper.class); List<Student> students = studentMapper.getlist(); for (Student student1 : students) { System.out.println(student1.getName() + student1.getAge()); } } catch (IOException e) { e.printStackTrace(); } finally { // 关闭sqlSession,从当前线程移除 sqlSession.close(); } } }
测试代码如下:
二,实现方式
2.1,SQL映射的xml文件
MyBatis真正的特色在于SQL映射语句,功能强大,使用简单
SQL映射文件的几个顶级元素
- mapper
- namespace属性,区别不同的mapper
- namespace和子元素的id联合保证唯一
- 绑定DAO接口
- namespace的命名必须跟某个接口同名
- 接口中的方法与映射文件中SQL语句id一一对应
<mapper namespace="com.demo.dao.StudentMapper"> <select id="getlist" .....> ....... </select> </mapper>
2.2,sleect标签
- select是MyBatis中最常用的元素之一
- select元素有很多属性,可以详细配置每一条查询语句
- id
- 命名空间中唯一的标识符
- 接口中的方法与映射文件中的SQL语句id一一对应
- parameterType
- 传入SQL语句的参数类型
- resultType
- SQL语句返回值类型的完整类名或别名
<mapper namespace="com.demo.dao.StudentMapper"> <select id="getlist" parameterType="int" resultType="com.demo.bean.Student"> select * from student </select> </mapper>
2.3,传递多个参数:
- 使用Map传递参数
- 使用注解传递参数
- 使用JavaBean传递参数
2.4,insert标签:
MyBatisinsert 标签用来定义插入语句,执行插入操作。当 MyBatis 执行完一条插入语句后,就会返回其影响数据库的行数。
在StudentMapper.xml映射文件中,增加节点,插入语句,代码如下
<insert id="addStudent" useGeneratedKeys="true" keyProperty="id" keyColumn="id" parameterType="com.xinxi2.bean.Route"> INSERT INTO route(`name`,`pwd`,`age`) values (#{name},#{pwd},#{age}) </insert>
在 StudentMapper接口中定义一个 addStudent() 方法,代码如下:
int addStudent(Student student );
三,动态SQL:
3.1,概述:
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种痛苦。
使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。
如果你之前用过 JSTL 或任何基于类 XML 语言的文本处理器,你对动态 SQL 元素可能会感觉似曾相识。在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类,现在要学习的元素种类比原来的一半还要少。
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
3.2,if:
if 语句使用方法简单,常常与 test 属性联合使用。语法如下:
<if test="判断条件"> SQL语句 </if>
3.3,choose标签:多重条件分支:
有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
MyBatis 中动态语句 、、 类似于 Java 中的 switch-case-default多重分支条件语句。由于 MyBatis 并没有为 if 提供对应的 else 标签,如果想要达到…… 的效果,可以借助 、、 来实现。
动态语句 、、 语法如下:
<choose> <when test="判断条件1"> SQL语句1 </when > <when test="判断条件2"> SQL语句2 </when > <when test="判断条件3"> SQL语句3 </when > <otherwise> SQL语句4 </otherwise> </choose>
标签按顺序判断其内部 标签中的判断条件是否成立,如果有一个成立,则执行相应的 SQL 语句, 执行结束;如果都不成立,则执行 中的 SQL 语句。这类似于 Java 的 switch 语句, 为 switch, 为 case, 则为 default。