MyBtais动态拼接sql的功能大大减少了我们在进行开发的时候被繁琐的JDBC代码困扰,但这也造成了一定的问题,当我们进行动态拼接sql的语句很多的时候,我们难以从mapper.xml文件中找到对应的完整sql,这对于代码的维护非常不利,因此我们经常需要把组合好的完整sql打印出来,让我们时刻把握代码的问题所在。
MyBatis内置的日志工厂提供了日志功能可以很好的帮我们解决这个问题,具体的日志实现由以下几种方式:SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING,具体选择哪个日志实现由MyBatis的内置工厂确定。
1.在pom.xml文件中导入log4j的日志组件
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
2.在MyBatis全局配置文件(MyBtaisConfig.xml)中配置
<settings>
<setting name="logImpl" value="LOG4J"/>
settings>
3.测试
我们在Mapper.xml文件中配置操作数据库的sql语句时,如果传入的参数是对象,总是需要在parameterType中对参数进行类型定义,例如parameterType=“com.cwd.mybatis.bean.User”,这样的传入的参数是以全类名的形式存在,比较繁琐,因此我们可以通过设置对象别名来传递参数。
在MyBatis全局配置文件中使用typeAliases标签设置对象类型别名。
<typeAliases>
<typeAlias type="com.cwd.mybatis.bean.User" alias="User">typeAlias>
typeAliases>
1.在新建的对象类中使用注解标签@Alias设置别名
import org.apache.ibatis.type.Alias;
@Alias("User")
public class User {
}
2.在MyBatis全局配置文件中的typeAliases标签中使用package标签设置对象类型别名。
<typeAliases>
<package name="com.cwd.mybatis.bean"/>
typeAliases>
简单的参数传递不需要使用parameterType参数定义,例如:
在接口中的方法是:
void updateUser(int id);
在mapper.xml文件中的配置就是:
<update id="updateUser">
UPDATE t_user SET NAME='张三',age='18' where id = #{id}
update>
多个参数使用注解标签@param绑定传递,例如:
在接口中的方法是:
void updatePart(@Param("Id") int id, @Param("Name") String name);
在mapper.xml文件中的配置就是:
<update id="updatePart" >
update t_user set name=#{Name} where id=#{Id}
update>
如果我们传入的参数是一个复杂的对象,就需要使用parameterType参数进行类型定义,这里可以设置别名,例如:
在接口中的方法是:
void saveUser(User user);
在mapper.xml文件中的配置就是:
<insert id="saveUser" parameterType="com.cwd.mybatis.bean.User">
insert into t_user(name,age,birthday) values(#{name},#{age},#{birthday});
insert>
在接口中的方法是:
void updateContent(Map<String, Object> map);
在mapper.xml文件中可以使用表达式获取map的键即可。
MyBatis注解标签也是MyBtais的特色之一,可以使我们简化工作流程,减少mapper.xml文件中的配置。
常用的注解标签如下:
@Insert:插入sql,语法和mapper.xml文件的insert标签一致;
@Select:查询sql,语法和mapper.xml文件的select标签一致;
@Update:更新sql,语法和mapper.xml文件的update标签一致;
@Delete:删除sql,语法和mapper.xml文件的delete标签一致;
@Param:绑定参数进行入参;
@Result:设置结果,参数column为数据库表的列,参数property表示对象类的变量,参数id=true表示主键;
@Results:设置结果集合,参数id设置结果类型,参数@Result设置结果