• 笔记55 Mybatis快速入门(六)


    相关概念介绍(一)

    1.日志

      有时候需要打印日志,知道mybatis执行了什么样的SQL语句,以便进行调试。这时,就需要开启日志,而mybatis自身是没有带日志的,使用的都是第三方日志,这里介绍如何开启log4j日志功能。

      在src目录下,新建文件log4j.properties,其作用是输出mybatis包下参与Mybatis的类的SQL语句输出:

    1 # Global logging configuration
    2 log4j.rootLogger=ERROR, stdout
    3 # MyBatis logging configuration...
    4 log4j.logger.mybatis=TRACE
    5 # Console output...
    6 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    7 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    8 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    2.事务管理

    在一个事务中,只要有一个操作发生错误,那么其他的操作也无效。在Mysql中,只有当表的类型是INNODB的时候,才支持事务。

    3.延迟加载

    基于注解方式的一对多来了解延迟加载的配置办法。

    <1>测试代码,一种分类对应多个产品。但是当只获取分类,不获取产品名字的时候,通过执行日志的输出可以发现,获取产品的sql语句也执行了。

     1 package mybatis.annotation;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.List;
     6 
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 import mybatis.mapper.CategoryMapper;
    12 import mybatis.pojo.Category;
    13 
    14 public class testOneToMany {
    15 
    16     public static void main(String[] args) throws IOException {
    17         // TODO Auto-generated method stub
    18         String resource = "mybatis-config.xml";
    19         InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(resource);
    20         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    21         SqlSession session = sqlSessionFactory.openSession();
    22         CategoryMapper categoryMapper = session.getMapper(CategoryMapper.class);
    23 
    24         listAll(categoryMapper);
    25 
    26         session.commit();
    27         session.close();
    28     }
    29 
    30     private static void listAll(CategoryMapper mapper) {
    31         List<Category> categories = mapper.list2();
    32         for (Category c : categories) {
    33             System.out.println(c.getName());
    34             // List<Product> products = c.getProducts();
    35             // if (products.size() != 0) {
    36             // for (Product product : products) {
    37             // System.out.println("	" + product.getName());
    38             // }
    39             // }
    40         }
    41     }
    42 
    43 }

    执行结果:

    <2>在mybatis-config.xml中添加延迟加载配置。

    1     <settings>
    2         <!-- 打开延迟加载的开关 -->
    3         <setting name="lazyLoadingEnabled" value="true"/>
    4         <!-- 将积极加载改为消息加载,即按需加载 -->
    5         <setting name="aggressiveLazyLoading" value="false"/>
    6     </settings>

    <3>执行相同的操作,可以看到,当只查询category中的数据时,并没有查询product表中的数据。

    <4>只有在查询产品的时候,才会看到相应的SQL语句。(把代码中的注释去掉,输出产品名称)

    4.分页

    <1>增加100条记录

    1     public static void add(CategoryMapper categoryMapper) {
    2         for (int i = 0; i < 100; i++) {
    3             Category category = new Category();
    4             category.setName("category name " + i);
    5             categoryMapper.add(category);
    6         }
    7     }

    <2>进行分页查询

    ①xml方式

    在Category.xml下添加如下代码:

    1     <select id="listByPage" resultType="Category">
    2         select * from category
    3             <if test="start!=null and count!=null">
    4                 limit #{start},#{count}
    5             </if>
    6     </select>

    ②注解方式

    在CategoryMapper.java中添加如下代码:

    1 @Select("select * from category limit #{start},#{count}")
    2 public List<Category> listByPage(@Param("start") int start, @Param("count") int count);

    <3>测试

     1 package mybatis.annotation;
     2 
     3 import java.io.IOException;
     4 import java.io.InputStream;
     5 import java.util.HashMap;
     6 import java.util.List;
     7 import java.util.Map;
     8 
     9 import org.apache.ibatis.session.SqlSession;
    10 import org.apache.ibatis.session.SqlSessionFactory;
    11 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    12 
    13 import mybatis.mapper.CategoryMapper;
    14 import mybatis.pojo.Category;
    15 
    16 public class testPaging {
    17 
    18     public static void main(String[] args) throws IOException {
    19         // TODO Auto-generated method stub
    20         String resource = "mybatis-config.xml";
    21         InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(resource);
    22         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    23         SqlSession session = sqlSessionFactory.openSession();
    24         CategoryMapper categoryMapper = session.getMapper(CategoryMapper.class);
    25 
    26         // add(categoryMapper);
    27         // xmlPage(session);
    28         annotationPage(categoryMapper);
    29         session.commit();
    30         session.close();
    31     }
    32 
    33     public static void list(CategoryMapper categoryMapper) {
    34         List<Category> categories = categoryMapper.list();
    35         for (Category category : categories) {
    36             System.out.println(category);
    37         }
    38     }
    39 
    40     public static void add(CategoryMapper categoryMapper) {
    41         for (int i = 0; i < 100; i++) {
    42             Category category = new Category();
    43             category.setName("category name " + i);
    44             categoryMapper.add(category);
    45         }
    46     }
    47 
    48     public static void xmlPage(SqlSession session) {
    49         Map<String, Integer> params = new HashMap<String, Integer>();
    50         params.put("start", 0);
    51         params.put("count", 5);
    52         List<Category> categories = session.selectList("listByPageXML", params);
    53         for (Category category : categories) {
    54             System.out.println(category);
    55         }
    56     }
    57 
    58     public static void annotationPage(CategoryMapper categoryMapper) {
    59         List<Category> categories = categoryMapper.listByPage(1, 1);
    60         for (Category category : categories) {
    61             System.out.println(category);
    62         }
    63     }
    64 
    65 }

    5.PageHelper

    <1>使用第三方分页工具,先导入jar包:jsqlparser-1.0.jar、pagehelper-5.1.0-beta2.jar

    <2>在mybatis-config.xml中配置插件。

    1     <plugins>
    2         <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    3     </plugins>

    <3>在Category.xml中添加新的查询语句

    1     <select id="listByPageHelper" resultType="Category">
    2         select * from category
    3     </select>

    <4>测试,在testPaging.java中添加新方法

    1     public static void pageHelper(SqlSession session) {
    2         PageHelper.offsetPage(0, 5);
    3         List<Category> categories = session.selectList("listByPageHelper");
    4         for (Category category : categories) {
    5             System.out.println(category);
    6         }
    7     }
  • 相关阅读:
    1084: 计算两点间的距离(多实例测试)
    1083: 数值统计(多实例测试)
    回文数的判断
    1082: 敲7(多实例测试)
    BZOJ 1303 [CQOI2009]中位数图
    计蒜客 Yingchuan Online F题 (Floyd 变形)
    并查集入门题
    常见错点
    单调队列入门题
    线段树入门题
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/9242308.html
Copyright © 2020-2023  润新知