笔记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("\t" + 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     }

猜你喜欢

转载自www.cnblogs.com/lyj-gyq/p/9242308.html
55
今日推荐