- 别名(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属性
看着是不是有点眼熟,上面返回结果我们用的是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。
键值对的大小写一定要正确
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
配置后运行是这样的
接下来就是我们的老朋友了,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”)用于标识参数,单个参数方法可以不写。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)