Mybatis拾遗(一)

Mybatis拾遗(一),第1张

Mybatis拾遗
  • 别名(TypeAliases)
    • 在mybatis-config.xml中增加TypeAliases标签
      • typealiase属性
      • package属性
    • 使用注解配置别名
  • resultMap
    • 当实体类和数据库字段不对应时,可以使用这个字段。
    • 对于复杂的查询,用于描述个字段间的关系
  • 日志的记录
    • STDOUT_LOGGING
    • LOG4J
      • 引入依赖
      • 配置文件
      • 用法
  • lombock
    • 添加依赖
    • 实体类中使用
  • 注解开发
    • 主要配置文件的更改
    • 注解式开发
      • UserMapper.java

之前已经搭建好了一个简单的Mybatis工程----创建第一个Myabtis工程

别名(TypeAliases)

我们在之前的里面UserMapper.xml中,对于resultType使用的是全限定名。

<select id="getListUser" resultType="com.test.pojo.User">
  select * from user
select>

那我们可不可以直接写一个User呢?自然是可以的。不过在此之前我们需要增加一下配置信息。

在mybatis-config.xml中增加TypeAliases标签 typealiase属性

可以放在环境environments标签上面, 放在下面就会出错

    
    <typeAliases>
        
        <typeAlias type="com.test.pojo.User" alias="User"/>
    typeAliases>

此时上面的代码可以简化成以下这样

<select id="getListUser" resultType="User">
  select * from user
select>

对于各个标签的顺序大家可参考顺序错误的报错信息。从以下信息中可以看到类型别名在第三。

properties?,
settings?,
typeAliases?,
typeHandlers?,
objectFactory?,
objectWrapperFactory?,
reflectorFactory?,
plugins?,
environments?,
databaseIdProvider?,
mappers?
package属性
    
    <typeAliases>
        
        <package name="com.test.pojo"/>
    typeAliases>
使用注解配置别名

当然也可以在实体类的前面增加注解,添加别名标识

@Alias("User")
public class User {
	//这里就省略了
}

稍微测试了下先后顺序是:
配置文件的typealiase属性 > 注解 > 配置文件的package属性

resultMap

看着是不是有点眼熟,上面返回结果我们用的是resultType,而这个参数是另一种返回的结果集。

当实体类和数据库字段不对应时,可以使用这个字段。

假如数据库中的字段为username, 而实体类中的字段为name。那么我们可以使用resultMap标签实现 username----name 的对应关系。

在UserMapper.xml中配置

    
    <resultMap id="UserMap" type="User">
        
        <result column="username"  property="name"/>
    resultMap>

    
    <select id="getListUser" resultMap="UserMap">
        select * from user
    select>
对于复杂的查询,用于描述个字段间的关系

对于联表查询,嵌套子查询等,诸如此类的复杂查询,我们返回的字段往往会与实体类中字段有出入。

日志的记录

官方给的文档里支持的日志有,SLF4J (Spring里面用的就是这个),LOG4J , LOG4J2 ,JDK_LOGGING ,COMMONS_LOGGING, STDOUT_LOGGING ,NO_LOGGING。
这里呢我只记录log4j和STDOUT_LOGGING

STDOUT_LOGGING

键值对的大小写一定要正确

    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    settings>

配置后运行是这样的

LOG4J

接下来就是我们的老朋友了,log4j

引入依赖
        <dependency>
            <groupId>log4jgroupId>
            <artifactId>log4jartifactId>
            <version>1.2.17version>
        dependency>
配置文件

在resources目录下新建一个log4j.properties文件,其中的配置信息大家可以网上找找,都是比较详细的。
log4j.properties

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/mytest.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
用法

一般是在类的开始,创建一个静态的Logger对象(导包记得导入log4j的包,不要导入其他的日志记录包)。

import org.apache.log4j.Logger;
public class Test {
	static Logger logger = Logger.getLogger(Test.class);
}

在方法体内部一般使用info的方法记录信息,当然根据不同的情况可以使用debug、error等方法记录。

    @Test
    public void testForLog() {
        logger.info("log4j的测试");
        int a = 0;
        int b = 1;
        try{
            int c = b/a;
        }catch (Exception ex) {
        	logger.debug(ex);
            logger.error(ex);//记录错误信息 并且输出到文件
        }
    }
lombock

用于简化实体类的开发。

添加依赖
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>1.18.22version>
        dependency>
实体类中使用
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class User {
    private int id;
    private String name;
    private String pw;
}

各个注解的包含的方法
@Data – setter/getter方法 无参构造 equals和hashcode toString()

@AllArgsConstructor – 所有参数构造方法
@NoArgsConstructor – 无参构造方法
@ToString – toString()方法
@EqualsAndHashCode – equals和hashcode方法

注解开发 主要配置文件的更改

这里的属性标签使用package, name 是接口所在的全限定包名

    <mappers>
        <package name="com.test.dao">package>
    mappers>
注解式开发 UserMapper.java

只用@Select() 查询语句作为示范,其他的注解关(删除、插入、更新)键字与非注解开发一致。

    @Select("select * from user where id = #{id}")
    public User getUserById(@Param("id") int id);

@Param(“xxx”)用于标识参数,单个参数方法可以不写。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/790827.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存