读取Mybatis核心配置文件 获取SqlSessionFactory工厂对象 获取Sqlsesssion对象(true表示自动提交事物,false表示手动提交事务) 执行sql语句(EmpMapper.xml), 返回处理结果(参数: namespace.id) 输出控制台
JDBC:
使用JDBC访问数据库有大量重复代码(比如注册驱动、获取连接、获取传输器、释放资源等);JDBC自身没有连接池,会频繁的创建连接和关闭连接,效率低;SQL是写死在程序中,一旦修改SQL,需要对类重新编译;对查询SQL执行后返回的ResultSet对象,需要手动处理,有时会特别麻烦;MyBatis:
Mybatis对JDBC对了封装,可以简化JDBC代码;Mybatis自身支持连接池(也可以配置其他的连接池),因此可以提高程序的效率;Mybatis是将SQL配置在mapper文件中,修改SQL只是修改配置文件,类不需要重新编译。对查询SQL执行后返回的ResultSet对象,Mybatis会帮我们处理,转换成Java对象。总之,Mybatis框架大于JDBC
#{}占位符
增删改查操作中,SQL语句中的值是写死在SQL语句中的,而在实际开发中,此处的值往往是用户提交过来的值,因此这里我们需要将SQL中写死的值替换为占位符。
${}占位符
那么如果我们在传递的时候不是一个参数值,而是一个SQL片段呢?
在项目中加入log4j的配置文件,用于打印日志信息,便于开发调试。
在src(或相似的目录)下创建log4j.properties如下:
# Global logging configuration log4j.rootLogger=DEBUG, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%nmybatis默认使用log4j作为输出日志信息。
动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦。利用动态 SQL,可以彻底摆脱这种痛苦。
想从所有条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。
<select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author_name like #{author.name} </when> <otherwise> AND featured = 1 </otherwise> </choose> </select>动态 SQL 的另一个常见使用场景是对集合进行遍历
<select id="selectPostIn" resultType="domain.blog.Post"> SELECT * FROM POST P WHERE ID in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select>带注解的映射器接口类中使用动态 SQL,可以使用 script 元素
@Update({"<script>", "update Author", " <set>", " <if test='username != null'>username=#{username},</if>", " <if test='password != null'>password=#{password},</if>", " <if test='email != null'>email=#{email},</if>", " <if test='bio != null'>bio=#{bio}</if>", " </set>", "where id=#{id}", "</script>"}) void updateAuthorValues(Author author);