使用注解开发

文章介绍了在Mybatis中如何配置和使用日志,包括SLF4J和LOG4J的设置,并展示了通过配置文件选择日志实现。此外,文章还讲解了分页查询的基本操作,以及如何利用注解进行CRUD开发,简化数据库操作。最后提到了Lombok库,它可以自动为Java类生成getter、setter等方法,提高开发效率。
摘要由CSDN通过智能技术生成

使用注解开发

为了方便查看测试结果以及方便调试,先熟悉和配置日志。

日志

日志工厂

如果一个数据库操作出现了异常、需要进行排错,可以通过查看日志的方式实现。

Mybatis内置的日志工厂能够提供日志功能,具体的日志实现有以下几种:

SLF4J
LOG4J(3.5.9 起废弃)
LOG4J2 | JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING
NO_LOGGING

在Mybatis中具体使用哪个日志实现,可以通过配置文件进行配置。如:设置标准日志输出(STDOUT_LOGGING)

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

在这里插入图片描述

logImpl 可选的值有:SLF4JLOG4JLOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGINGNO_LOGGING,或者是实现了接口 org.apache.ibatis.logging.Log ,且构造方法是以字符串为参数的类的完全限定名。


LOG4J
  • 通过Log4j,可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等。
  • 可以控制每一条日志的输出格式。
  • 通过定义每一条日志信息的级别,能更加细致地控制日志生成过程。这些操作可以通过一个配置文件来灵活配置,而不需要修改应用的代码。
使用步骤

导入依赖

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

在CLASSPATH下建立log4j.properties

log4j.rootLogger=debug,stdout,D,E
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
#修改到自己的路径下
log4j.appender.D.File=coding\JAVAIDEA\log\log.log
log4j.appender.D.Append=true
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p %c\:%L - %m%n
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
#修改到自己的路径下
log4j.appender.E.File=coding\JAVAIDEA\log\error.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

配置log4j为日志实现

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

使用

(1)创建日志对象(Logger),参数为当前类的Class

static Logger logger = Logger.getLogger(TestUserDao.class);

(2)注意导入的包为下面这个

import org.apache.log4j.Logger;

(3)日志级别

   logger.info("info:进入了testLog4j");
   logger.debug("debug:进入了testLog4j");
   logger.error("error:进入了testLog4j");

在这里插入图片描述


分页

使用分页可以减少数据的处理量。在java层面可以使用RowBounds实现分页,市场上也有一些分页插件如:PageHelper

PageHelper:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

在数据库中我们通常使用Limit来处理分页

SELECT * FROM user LIMIT startIndex, pageSize;
SELECT * FROM user LIMIT 3; #[0,n]

使用Mybatis实现分页(核心是SQL)

(1)接口

//分页
List<User> getUserByLimit(Map<String, Integer> map);

(2)Mapper.xml

<!--分页-->
<select id="getUserByLimit" parameterType="map" resultType="com.louis.pojo.User">
    select * from mybatis.user limit #{startIndex}, #{pageSize}
</select>

(3)测试

@Test
public void getUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    HashMap<String, Integer> map = new HashMap<>();
    map.put("startIndex", 0);
    map.put("pageSize", 2);
    List<User> userByLimit = mapper.getUserByLimit(map);
    for (User user : userByLimit) {
        logger.info(user);
    }
}

使用注解开发

步骤

在接口上实现注解

@Select("select * from user")
List<User> getUsers();

在核心配置文件中绑定接口

<mappers>
	<mapper class="com.louis.dao.UserMapper"/>
</mappers>

使用注解方式完成CRUD

数据库的部分操作需要设置提交事务。在工具类中自动提交事务,这样就不用再次commit

public static SqlSession getSqlSession(){
    return sqlSessionFactory.openSession(true);
}

编写接口,添加注解

public interface UserMapper {
    @Select("select * from user")
    List<User> getUsers();

    //方法存在多个参数,所有的参数前面必须加上@Param注解
    @Select("select * from user where id = #{id}")
    User getById(@Param("id") int id);

    @Insert("insert into user(id, name, pwd) values (#{id}, #{name}, #{pwd})")
    int addUser(User user);

    @Update("update user set name = #{name}, pwd = #{pwd} where id = #{id}")
    int update(User user);

    @Delete("delete from user where id = #{id}")
    int delete(@Param("id") int id);
}

测试

@Test
public void getUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    User userById = mapper.getById(1);
    logger.info(userById);
    sqlSession.close();
}

@Test
public void addUser(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.addUser(new User(6, "露露", "cty345"));
    sqlSession.close();
}

@Test
public void update(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.update(new User(1, "Alex", "1234"));
    logger.info(mapper);
    sqlSession.close();
}

@Test
public void delete(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    mapper.delete(1);
    logger.info(mapper);
    sqlSession.close();
}

注意:在有多个实体类的接口时,我们必须要将接口注册绑定到我们的核心配置文件中。

@Param()注解

  • 基本类型的参数和String类型需要加上
  • 除了String类型以外的引用类型不需要添加注解
  • 如果只有一个基本类型,可以忽略,但建议加上

Lombok

Lombok项目是一个java库,它可以自动插入到编辑器和构建工具中,增强java的性能。不需要再写getter、setter或equals方法,只要有一个注解,就有一个功能齐全的构建器、自动记录变量等等。

使用步骤

在IDEA中安装Lombok插件

在这里插入图片描述

在项目中导入jar包

在这里插入图片描述

地址:https://mvnrepository.com

使用(标记表示常用)

@Getter and @Setter
@FieldNameConstants
@ToString
@EqualsAndHashCode
@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j, @CommonsLog, @JBossLog, @Flogger, @CustomLog
@Data
@Builder
@SuperBuilder
@Singular
@Delegate
@Value
@Accessors
@Wither
@With
@SneakyThrows
@StandardException
@val
@var
experimental @var
@UtilityClass

在这里插入图片描述

@Data:可以帮助我们生成get, set, tostring, hashcode, equals
@AllArgsConstructor:有参构造方法
@NoArgsConstructor:无参构造方法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值