MyBatis 中 <if> 判断字符串是否相等失效
本文将解决在 MyBatis 的 Mapper.xml 文件中使用 <if> 标签的 test 属性测试字符串是否相等,但是测试未通过,也不存在语法问题。
本文将解决在 MyBatis 的 Mapper.xml 文件中使用 <if> 标签的 test 属性测试字符串是否相等,但是测试未通过,也不存在语法问题。
本文将解决 org.apache.ibatis.binding.BindingException: Type interface com.hxstrive.mybatis.*.UserMapper is not known to the MapperRegistry 错误。
解决 org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.net.MalformedURLException: no protocol: com.hxstrive.mybatis.simple.UserMapper 错误信息
本文将介绍在MyBatis的Mapper中,怎样编写if-else的条件判断语句。
使用MyBatis根据用户名称查询Oracle数据库中User表,抛出“MyBatisSystemException异常,但是不带参数查询正常。
在使用MyBatis3的时候,我们经常需要处理一对多和多对一这种方式,通常情况下我们可以通过代码请求两次数据库将数据获取到JavaBean中;那么,MyBatis3是否支持查询映射呢?答案是肯定的。在MyBatis3中我们可以在<resultMap>使用<collection>实现一对多,<association>实现一对一或多对一映射。
在使用MyBatis进行开发时,我们面临一个问题。怎样在insert的时候获取数据库自动生成的ID值呢?在不同的数据库中生成ID值的方式不一致,也就导致我们处理这一问题也不一致。在Oracle中是通过调用一个序列的nextval来获取一个唯一的ID,在MySQL和SQL Server中存在一个自增长列。因此,二者的处理方式不一致,下面我们通过实例来讲解Oracle和MySQL中怎样获取Insert后的ID值。
MyBatis的Sqlsession对应着一次数据库会话(即一次数据库连接)。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的。相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sqlsession就需要重新创建它)。创建Sqlsession的地方只有一个,那就是SqlsessionFactory的openSession方法。
Spring3的DAO框架没有抛出与特定技术相关的异常,例如SQLException或HibernateException,抛出的异常都是与特定技术无关的org.springframework.dao.DataAccessException类的子类,避免系统与某种特殊的持久层实现耦合在一起。DataAccessException是RuntimeException的子类,即是一个无检测的异常,不要求代码去处理这类异常,遵循了Spring的一般理念:异常检测会使代码到处是不相关的catch或throws语句,使代码杂乱无章;
当我们使用MyBatis3查询数据库时,如果你将resultType设置为基本数据类型(如:resultType=int),但是数据查询没有返回结果,此时将NULL赋值给int类型的变量就会抛出BindingException异常信息。
Mybatis的应用是围绕着一个SqlSessionFactory实例(即SqlSession工厂,从中可以获取到SqlSession对象,所有的数据库操作都是通过SqlSession类进行的)展开的。SqlSessionFactoryBuilder根据XML映射文件创建SqlSessionFactory。下面是一段创建SqlSession的代码:
MyBatis在默认情况下,使用#{}语法,MyBatis会产生PreparedStatement语句中,并且安全的设置PreparedStatement参数,这个过程中MyBatis会进行必要的安全检查和转义。因此,在Mapper文件中使用#{}语法来获取Java代码传递过来的变量更为安全,也推荐你这么做。
MyBatis Mapper.xml的choose标签的作用类似于java中的switch语句,使用choose标签时为了避免使用大量的if元素。choose元素包含了when元素(对应于java中的case语句),otherwise元素则对应java中的default语句。
MyBatis Mapper文件的trim元素用来替换已经拼凑好的字符串开始或者结束的字符串。如:"AND C_NAME LIKE '%ZhangSan%' AND N_AGE=25"可以使用trim元素将字符串开始的AND元素替换成WHERE。
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。