转载

Maven搭建Mybatis+Spring+ehcache细节

1、创建Maven工程

1.1、Fill-->New Maven Project-->Next-->maven-archetype-webapp-->Next-->输入group id和artiface id点击finish完成,这里group id和artiface id就是标识项目唯一坐标的作用,这里不做介绍,然后把工程目录调整下,这样就是个标准的maven工程了。

Maven搭建Mybatis+Spring+ehcache细节

1.2、编写pom文件,有了maven真的极大的方便了我们构建项目,这里maven帮我们把编写在pom文件中的jar包加入工程中。

1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   2   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">   3   <modelVersion>4.0.0</modelVersion>   4   <groupId>com.deng.mybatis</groupId>   5   <artifactId>test1118</artifactId>   6   <packaging>war</packaging>   7   <version>0.0.1-SNAPSHOT</version>   8      9   <properties>  10       <spring-version>3.2.0.RELEASE</spring-version>  11   </properties>  12     13   <dependencies>  14     <dependency>  15       <groupId>junit</groupId>  16       <artifactId>junit</artifactId>  17       <version>4.12</version>  18       <scope>test</scope>  19     </dependency>  20       21     <dependency>  22         <groupId>org.mybatis</groupId>  23         <artifactId>mybatis</artifactId>  24         <version>3.3.0</version>  25     </dependency>  26   27     <dependency>  28         <groupId>mysql</groupId>  29         <artifactId>mysql-connector-java</artifactId>  30         <version>5.1.37</version>  31     </dependency>  32       33     <dependency>  34         <groupId>log4j</groupId>  35         <artifactId>log4j</artifactId>  36         <version>1.2.17</version>  37     </dependency>  38       39     <dependency>  40         <groupId>org.springframework</groupId>  41         <artifactId>spring-core</artifactId>  42         <version>${spring-version}</version>  43     </dependency>  44     <dependency>  45         <groupId>org.springframework</groupId>  46         <artifactId>spring-context</artifactId>  47         <version>${spring-version}</version>  48     </dependency>  49     <dependency>  50         <groupId>org.springframework</groupId>  51         <artifactId>spring-jdbc</artifactId>  52         <version>${spring-version}</version>  53     </dependency>  54     <dependency>  55         <groupId>org.springframework</groupId>  56         <artifactId>spring-orm</artifactId>  57         <version>${spring-version}</version>  58     </dependency>  59     <dependency>  60         <groupId>org.springframework</groupId>  61         <artifactId>spring-web</artifactId>  62         <version>${spring-version}</version>  63     </dependency>  64     <dependency>  65         <groupId>org.springframework</groupId>  66         <artifactId>spring-tx</artifactId>  67         <version>${spring-version}</version>  68     </dependency>  69     <dependency>  70         <groupId>org.springframework</groupId>  71         <artifactId>spring-webmvc</artifactId>  72         <version>${spring-version}</version>  73     </dependency>  74     <dependency>  75         <groupId>org.springframework</groupId>  76         <artifactId>spring-test</artifactId>  77         <version>${spring-version}</version>  78     </dependency>  79     <dependency>  80         <groupId>org.springframework</groupId>  81         <artifactId>spring-expression</artifactId>  82         <version>${spring-version}</version>  83     </dependency>  84     <dependency>  85         <groupId>org.springframework</groupId>  86         <artifactId>spring-context-support</artifactId>  87         <version>${spring-version}</version>  88     </dependency>  89     <dependency>  90         <groupId>org.springframework</groupId>  91         <artifactId>spring-beans</artifactId>  92         <version>${spring-version}</version>  93     </dependency>  94     <dependency>  95         <groupId>org.springframework</groupId>  96         <artifactId>spring-aspects</artifactId>  97         <version>${spring-version}</version>  98     </dependency>  99     <dependency> 100         <groupId>org.springframework</groupId> 101         <artifactId>spring-aop</artifactId> 102         <version>${spring-version}</version> 103     </dependency> 104     <dependency> 105         <groupId>org.mybatis</groupId> 106         <artifactId>mybatis-spring</artifactId> 107         <version>1.2.2</version> 108     </dependency> 109      110     <dependency> 111         <groupId>commons-dbcp</groupId> 112         <artifactId>commons-dbcp</artifactId> 113         <version>1.4</version> 114     </dependency> 115      116     <dependency> 117         <groupId>net.sf.ehcache</groupId> 118         <artifactId>ehcache-core</artifactId> 119         <version>2.6.6</version> 120     </dependency> 121      122     <dependency> 123         <groupId>org.mybatis</groupId> 124         <artifactId>mybatis-ehcache</artifactId> 125         <version>1.0.0</version> 126     </dependency> 127      128   </dependencies> 129   <build> 130     <finalName>test1118</finalName> 131   </build> 132 </project>  View Code

2、开始整合mybatis和spring

2.1、创建个log4j的配置文件,配置信息直接从mybatis官方文档中拷贝过来

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

2.2、新建保存数据库连接的配置文件

1 driverClassName=com.mysql.jdbc.Driver 2 url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8 3 user=root 4 password=123456

2.3、新建applicationContext.xml文件,这个是spring的配置文件,数据库的连接、mapper接口的代理实现类等都交由spring管理。

1 <?xml version="1.0" encoding="UTF-8"?>  2 <beans xmlns="http://www.springframework.org/schema/beans"  3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  4  xmlns:aop="http://www.springframework.org/schema/aop"  5  xmlns:tx="http://www.springframework.org/schema/tx"  6  xsi:schemaLocation="http://www.springframework.org/schema/beans   7  http://www.springframework.org/schema/beans/spring-beans-3.2.xsd   8  http://www.springframework.org/schema/tx   9  http://www.springframework.org/schema/tx/spring-tx-3.2.xsd  10  http://www.springframework.org/schema/aop  11  http://www.springframework.org/schema/aop/spring-aop-3.2.xsd "> 12       13      <!-- 加载properties属性文件 --> 14     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 15          <property name="location" value="classpath:osConfig.properties" /> 16     </bean> 17       18     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 19         <property name="driverClassName" value="${driverClassName}"/> 20         <property name="url" value="${url}"/> 21         <property name="username" value="${user}"/> 22         <property name="password" value="${password}"/> 23     </bean> 24       25     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 26         <property name="configLocation" value="mybatis/SqlMapper.xml" /> 27         <property name="dataSource" ref="dataSource" /> 28     </bean> 29           30     <!-- <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"> 31       <property name="mapperInterface" value="dao.UserMapper" /> 32       <property name="sqlSessionFactory" ref="sqlSessionFactory" /> 33     </bean> --> 34          35     <!-- 配置spring自动扫描Mapper接口 --> 36     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 37       <property name="basePackage" value="dao" /> 38       <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> 39     </bean> 40   41 </beans>  View Code

2.4、加上SqlMapper.xml,里面只是给所有的entity包下的实体加了别名。

1 <?xml version="1.0" encoding="UTF-8" ?>  2 <!DOCTYPE configuration  3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  4   "http://mybatis.org/dtd/mybatis-3-config.dtd">  5 <configuration>  6     <!-- <settings>  7         <setting name="cacheEnabled" value="true"/>  8     </settings> -->  9     <typeAliases> 10         <package name="entity"/> 11     </typeAliases> 12 </configuration>

2.5、创建Mapper的映射文件

1 <?xml version="1.0" encoding="UTF-8" ?>  2 <!DOCTYPE mapper  3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  4   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  5 <!-- xml方式 -->  6   7 <mapper namespace="dao.UserMapper">  8   <!-- <cache /> -->  9   <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/> 10    11   <sql id="userInfo">id, username, sex, birthday</sql> 12    13   <resultMap type="item" id="itemOrdersMap"> 14       <id property="id" column="id" /> 15       <result property="itemname" column="itemsname" /> 16       <result property="price" column="price" /> 17       <result property="detail" column="detail" /> 18       <result property="pic" column="pic" /> 19       <result property="createTime" column="createtime" /> 20       <collection property="orderdetails" ofType="Orderdetail"> 21           <id property="id" column="detail_id"/> 22           <result property="orderId" column="orders_id" /> 23           <result property="itemId" column="items_id" /> 24           <result property="itemNum" column="items_num" /> 25       </collection> 26   </resultMap> 27    28   <resultMap type="orderdetail" id="orderItemMap"> 29        30   </resultMap> 31    32   <select id="queryUserById" resultType="user" parameterType="int"> 33       select  34           <include refid="userInfo"></include> 35            from user where id = #{id} 36   </select> 37    38   <select id="queryOrderItem" resultType="orderItem" parameterType="int"> 39       select  40           item.id, 41           item.itemsname as itemname,  42           item.price as price,  43           item.detail as detail, 44           detail.id as orderdetailId,  45           detail.orders_id as orderId, 46           detail.items_num as itemNum  47       from items item  48        inner join  49            orderdetail detail  50        on detail.items_id = item.id  51        where item.id = #{id} 52   </select> 53    54   <select id="queryItemOrders" resultMap="itemOrdersMap" parameterType="int" useCache="true"> 55       select  56           item.*, 57           detail.id as detail_id, 58           detail.orders_id, 59           items_num  60       from items item  61        left join  62            orderdetail detail  63        on detail.items_id = item.id  64        where item.id = #{id} 65   </select> 66    67 </mapper>  View Code

2.6、创建实体bean,orderdetail对item表这里是一对一的关系,反之是一对多的关系。

1 package entity;  2   3 import java.util.Date;  4 import java.util.List;  5   6 public class Item{  7     private int id;  8     private String itemname;  9     private Float price; 10     private String detail; 11     private String pic; 12     private Date createTime; 13     private List<Orderdetail> orderdetails; 14     public int getId() { 15         return id; 16     } 17     public void setId(int id) { 18         this.id = id; 19     } 20     public String getItemname() { 21         return itemname; 22     } 23     public void setItemname(String itemname) { 24         this.itemname = itemname; 25     } 26     public Float getPrice() { 27         return price; 28     } 29     public void setPrice(Float price) { 30         this.price = price; 31     } 32     public String getDetail() { 33         return detail; 34     } 35     public void setDetail(String detail) { 36         this.detail = detail; 37     } 38     public String getPic() { 39         return pic; 40     } 41     public void setPic(String pic) { 42         this.pic = pic; 43     } 44     public Date getCreateTime() { 45         return createTime; 46     } 47     public void setCreateTime(Date createTime) { 48         this.createTime = createTime; 49     } 50     public List<Orderdetail> getOrderdetails() { 51         return orderdetails; 52     } 53     public void setOrderdetails(List<Orderdetail> orderdetails) { 54         this.orderdetails = orderdetails; 55     } 56     @Override 57     public String toString() { 58         return "Item [id=" + id + ", itemname=" + itemname + ", price=" + price 59                 + ", detail=" + detail + ", pic=" + pic + ", createTime=" 60                 + createTime + ", orderdetails=" + orderdetails + "]"; 61     } 62 }  View Code
1 package entity;  2   3 public class Orderdetail{  4     private int id;  5     private int orderId;  6     private int itemId;  7     private int itemNum;  8     private Item item;  9      10     public int getId() { 11         return id; 12     } 13     public void setId(int id) { 14         this.id = id; 15     } 16     public int getOrderId() { 17         return orderId; 18     } 19     public void setOrderId(int orderId) { 20         this.orderId = orderId; 21     } 22     public int getItemId() { 23         return itemId; 24     } 25     public void setItemId(int itemId) { 26         this.itemId = itemId; 27     } 28     public int getItemNum() { 29         return itemNum; 30     } 31     public void setItemNum(int itemNum) { 32         this.itemNum = itemNum; 33     } 34     public Item getItem() { 35         return item; 36     } 37     public void setItem(Item item) { 38         this.item = item; 39     } 40     @Override 41     public String toString() { 42         return "Orderdetail [id=" + id + ", orderId=" + orderId + ", itemId=" 43                 + itemId + ", itemNum=" + itemNum + ", item=" + item + "]"; 44     } 45 }  View Code
1 package entity;  2   3 public class OrderItem{  4     private int id;  5     private String itemname;  6     private Float price;  7     private String detail;  8     private int orderdetailId;  9     private int orderId; 10     private int itemNum; 11      12     public int getOrderdetailId() { 13         return orderdetailId; 14     } 15     public void setOrderdetailId(int orderdetailId) { 16         this.orderdetailId = orderdetailId; 17     } 18     public int getOrderId() { 19         return orderId; 20     } 21     public void setOrderId(int orderId) { 22         this.orderId = orderId; 23     } 24     public int getId() { 25         return id; 26     } 27     public void setId(int id) { 28         this.id = id; 29     } 30     public int getItemNum() { 31         return itemNum; 32     } 33     public void setItemNum(int itemNum) { 34         this.itemNum = itemNum; 35     } 36     public String getItemname() { 37         return itemname; 38     } 39     public void setItemname(String itemname) { 40         this.itemname = itemname; 41     } 42     public Float getPrice() { 43         return price; 44     } 45     public void setPrice(Float price) { 46         this.price = price; 47     } 48     public String getDetail() { 49         return detail; 50     } 51     public void setDetail(String detail) { 52         this.detail = detail; 53     } 54     @Override 55     public String toString() { 56         return "OrderItem [id=" + id + ", itemname=" + itemname + ", price=" 57                 + price + ", detail=" + detail + ", orderdetailId=" 58                 + orderdetailId + ", orderId=" + orderId + ", itemNum=" 59                 + itemNum + "]"; 60     } 61      62 }  View Code

2.7、创建Mapper接口

1 package dao;  2   3 import java.util.List;  4   5 import entity.Item;  6 import entity.OrderItem;  7 import entity.User;  8   9 public interface UserMapper { 10     public User queryUserById(int userid); 11      12     public List<OrderItem> queryOrderItem(int orderDetailId); 13      14     public Item queryItemOrders(int itemId); 15 }  View Code

2.8、加上ehcache的配置文件,在UserMapper中加上这行代码可以选择使用哪种缓存<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>,使用ehcache如果要输出日志可能要用到sl4j,用ehcache不知道为什么执行测试方法就不会打印出sql的log信息

1 <?xml version="1.0" encoding="UTF-8"?>  2 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">    3     <diskStore path="java.io.tmpdir"/>     4        5     <defaultCache        6         maxElementsInMemory="3000"        7         eternal="false"        8         timeToIdleSeconds="3600"        9         timeToLiveSeconds="3600"       10         overflowToDisk="true"       11         diskPersistent="false"       12         diskExpiryThreadIntervalSeconds="100"       13         memoryStoreEvictionPolicy="LRU"       14     /> 15 </ehcache>  View Code

2.9测试

1 package test1118.dao;  2   3 import java.util.List;  4   5 import org.junit.Before;  6 import org.junit.Test;  7 import org.springframework.context.ApplicationContext;  8 import org.springframework.context.support.ClassPathXmlApplicationContext;  9  10 import dao.UserMapper; 11 import entity.Item; 12 import entity.OrderItem; 13 import entity.User; 14  15 public class UserDaoTest { 16     private ApplicationContext context; 17     private UserMapper userMapper; 18  19     @Before 20     public void before() { 21         context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml"); 22         userMapper = (UserMapper)context.getBean("userMapper"); 23     } 24      25     @Test 26     public void testQueryUserById() { 27         User user = userMapper.queryUserById(2); 28         System.out.println(user); 29         User user2 = userMapper.queryUserById(1); 30         System.out.println(user2); 31     } 32      33     @Test 34     public void testQueryOrderItem() { 35         List<OrderItem> orderItems = userMapper.queryOrderItem(1); 36         for (OrderItem orderItem2 : orderItems) { 37             System.out.println(orderItem2); 38         } 39     } 40      41     @Test 42     public void testQueryItemOrders() { 43         Item itemOrders = userMapper.queryItemOrders(2); 44         System.out.println(itemOrders); 45         Item itemOrders2 = userMapper.queryItemOrders(2); 46         System.out.println(itemOrders2); 47     } 48      49 }  View Code
正文到此结束
Loading...