[数据库 06] Mybatis 配置优化 字段名不对应 日志 分页

Mybais 优化使用


1. 配置优化

mybatis-config.xml文件配置标签:

  • properties 属性
  • settings 设置
  • typeAliases 类型别名
  • environments 环境配置
  • mappers 映射器

配置xml文件中,configure的顺序:

"configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"的顺序

1. environments 环境变量

默认事务管理器JDBC,默认数据源是 pooled


结构:

<environments default="">//用于切换默认的环境,选择id值
    <environment id="">//一般有两套,一套开发,一套测试
        <transactionManager type="JDBC|MANAGED"></transactionManager></transactionManager>
    				//事务管理器有两种类型, JDBC和managed
        <dataSource type="UNPOOLED|POOLED|JNDI"> //用于选择数据源,连接池(DBCP, C3P0, Druid, Hikari(Spring默认)
            // 默认时pooled,连接之后回收,可以多个连接
            <property></property>
            <property></property>
        </dataSource>
    </environment>
</environments>

2. 属性(properties):

  1. 可以用过db.properties文件来动态配置,降低配置文件的耦合性,方便维护。
drive=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&useSSL=false
username=root
password=123456
  1. xml配置中引入外部配置文件:
<properties resource="db.properties"></properties>

properties中可以继续定义name,value键值对,但优先走外部配置文件中的键值对。

3. typeAliases 类型别名

用来减少完全限定名(全路径名)的冗余设置,如返回值resultType参数后的类型不用写全部包名.实体类名。

有两种方式:

  1. 在typeAlias标签中定义 别名:类型
<typeAliases>
    <typeAlias alias="user" type="com.roy.pojo.User"/> 
</typeAliases>
  1. 指定pachage标签,在标签中写入实体类的包名,则可以直接使用
<typeAliases>
    <package name="com.roy.pojo"/> // 只指定到实体类的包名
</typeAliases>

在实体类比较少,使用第一种:属性alias中直接指定别名

实体类比较多,使用第二种:使用注解,在实体类添加 @Alias("another_name"),则可以在UserMapper.xml中使用返回值对象为resultType = another_name

4. settings 设置

暂时不用

5. mappers 映射器 映射方法

  1. 使用完全限定名加载UserMapper.xml文件

    <mappers>
        <mapper resource="com/roy/dao/UserMapper.xml"/>
    </mappers>
    
  2. 使用class文件去加载(加载的是接口)

    两个问题:接口和Mapper.xml必须同名, 以及两个文件必须在同一个包下

    <mappers>
        <mapper class="com.roy.dao.UserMapper"/>
    </mappers>
    
  3. 使用package将接口都注册为映射器,条件同上2点。

    <mappers>
        <package name="com.roy.dao"/>
    </mappers>
    

6. 生命周期和作用域

  1. mybatis的流程:

SqlSessionFactoryBuilder: 一旦创建出SqlSessionFactory, 就不需要了,局部变量

SqlSessionFactory: 相当于连接池,一旦被创建,就一直存在于运行期间,最好使用单例模式

SqlSession: 连接池的一个连接,不是线程安全的,用完之后需要尽快关闭

  1. SqlSessionFactory和SqlSession 的关系:

SqlSessionFactory 相当于web中的ServletContext, 每一个SqlSession相当于一个个Servlet, Mapper则执行每一个业务

2. 解决属性名和字段名不一致问题

1. 原始方法:

修改sql语句,修改为select 字段名 as 属性名

2. 结果集映射

在UserMapper.xml文件中添加结果映射:

<resultMap id="UserMap" type="User">  // id为返回结果map标签所定义的
    <result column="数据库中的字段" property="实体类中的属性"/>
    <result column="" property=""/>
    <result column="" property=""/>
</resultMap>

<select id="getUserList" resultMap="UserMap"> // 修改返回标签为resultMap,定义一个名称
    select * from mybatis.user
</select>

3. 日志

1. 日志工厂

之前用sout和debug

Setting标签中,使用logImpl标签

2. STDOUT_LOGGING 标准日志输出

在setting中添加

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

3. Log4j 日志

不是标准的包,需要导入。

  • 可以控制日志信息输送的目的地,
  • 可以控制输出格式,
  • 可以定义日志信息的级别,
  • 可以使用配置文件灵活配置,不需要修改应用代码。

  1. 导入maven依赖,选2012May版本 1. 2

  2. resources文件夹下添加log4j.properties文件,配置日志输出设置

    #将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
    log4j.rootLogger=DEBUG,console,file
    
    #控制台输出的相关设置
    log4j.appender.console = org.apache.log4j.ConsoleAppender
    log4j.appender.console.Target = System.olog4j.appender.console.Threshold=DEBUG
    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/roy.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
    
  3. mybatis-config.xml 文件中的setting标签中设置日志类型

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

4. 简单使用

在要输出日志的类中定义属性:(导入的包一定是import org.apache.log4j.Logger;)

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

在@Test的方法中输出日志:可以设置不同的等级。

logger.info("info进入");
logger.debug("debug入");
logger.error("error进入");

4. 分页实现

1. Limit

sql中:

select *from User 
limit 0,2

UserMapper.java接口:

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

UserMapper.xml接口实现类:

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

测试:

@Test
public void testGetUserByLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("startIndex", 0);
    map.put("pageSize", 3);
    List<User> userList = userMapper.getUserByLimit(map);
    for(User user: userList){
        System.out.println(user);
    }
    sqlSession.close();
}

2. RowBounds(了解)

3. PageHelper插件

自己下载导入maven配置,导入plugin配置

posted @ 2021-12-08 09:13  Roy2048  阅读(45)  评论(0)    收藏  举报