第六作业 持久层框架mybatis小记

1.mybatis和Hibernate的比较

   首先Mybatis和Hibernate相比的优点是动态SQL,轻量级的框架。在整合其他框架的时候可以省去Dao的实现。轻量级,动态SQL,省去Dao层的实现,使Mybatis比较受欢迎。

2.Myeclipse使用数据库表生成实体类和映射文件需要应如相关的jar包,配置Mybatis启动的时候加载相应的jar包路径。

   a.首先下载相应的jar包到本地放到Myeclipse的安装目录下

   

   新建一个文件放Myeclipse启动时加载的路径

  

    打开添加加载的路径

新建配置文件将配置文件名为generatorConfig.xml

相应的配置文件代码如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE generatorConfiguration
 3   PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
 4   "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
 5 
 6 <generatorConfiguration>
 7        <!--
 8     <properties resource="conn.properties" />
 9       -->
10       <!-- 处理1,连接数据库的jar包的位置 -->
11      <classPathEntry location="E:myeclipselibmysql-connector-java-5.1.26-bin.jar"/>
12     <!-- 指定运行环境是mybatis3的版本 -->
13     <context id="testTables" targetRuntime="MyBatis3">
14 
15         <commentGenerator>
16         <!-- 是否取消注释 -->
17             <property name="suppressAllComments" value="true" />
18              <!-- 是否生成注释代时间戳 -->
19             <property name="suppressDate" value="true" />
20         </commentGenerator>
21         <!--处理2 jdbc 连接信息 -->
22         <jdbcConnection driverClass="com.mysql.jdbc.Driver"
23             connectionURL="jdbc:mysql://localhost:3306/scm32?useUnicode=true&amp;characterEncoding=UTF-8" userId="scott" password="orcl">
24         </jdbcConnection>
25         
26         <!-- 处理3 -->
27         <!-- targetPackage指定模型在生成在哪个包 ,targetProject指定项目的src,-->        
28         <javaModelGenerator targetPackage="cn.hp.scm.entity"
29             targetProject="scm32/src">
30             <!-- 去除字段前后空格 -->
31             <property name="trimStrings" value="false" />
32         </javaModelGenerator>
33         <!--处理4   配置SQL映射文件生成信息 -->
34         <sqlMapGenerator targetPackage="cn.hp.scm.dao"
35             targetProject="scm32/src" />
36         <!--配置dao接口生成信息-->
37         <javaClientGenerator type="XMLMAPPER" targetPackage="cn.hp.scm.dao" targetProject="scm32/src" />
38         
39         <!-- 指明那些表要生成相应的实体,不能生成表多次,会追加在原来额上面去。 -->
40         <!-- <table tableName="account" domainObjectName="Account"/>
41             
42         <table tableName="supplier" domainObjectName="Supplier"/> -->
43         
44         <table tableName="goods" domainObjectName="Goods"/> 
45         
46     </context>
47 </generatorConfiguration>
View Code

右键如下

点击生成配置文件和相应的实体类。但这里对生成的实体类和映射文件做相应的处理

一个小的单元测试:

 1 package cn.hp.scm.test;
 2 
 3 import org.junit.AfterClass;
 4 import org.junit.BeforeClass;
 5 import org.junit.Test;
 6 import org.springframework.context.ApplicationContext;
 7 import org.springframework.context.support.ClassPathXmlApplicationContext;
 8 
 9 import cn.hp.scm.dao.impl.DeptDaoImpl;
10 import cn.hp.scm.entity.Dept;
11 
12 
13 public class TestDeptDao {
14 
15     //@Resource //这里没法使用,后继版本有其它方式可以注入
16     static private DeptDaoImpl deptDao;
17     @BeforeClass
18     public static void setUpBeforeClass() throws Exception {
19         ApplicationContext context =new ClassPathXmlApplicationContext("applicationContext.xml");
20         deptDao=(DeptDaoImpl) context.getBean("deptDao");
21     }
22 
23     @AfterClass
24     public static void tearDownAfterClass() throws Exception {
25     }
26 
27     @Test
28     public void testSelectDept() {
29         System.out.println(deptDao.selectDept(1));
30     }
31 
32     @Test
33     public void testInsertDept() {
34         Dept dept=new Dept();
35         //dept.setDeptId(117);
36         dept.setDeptName("name117");
37         dept.setDeptAddress("address117");
38         System.out.println("受影响行数:"+deptDao.insertDept(dept));
39     }
40 }
View Code

首先应该加入相应的配置文件,及时数据库连接文件。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3     xmlns="http://www.springframework.org/schema/beans"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xmlns:tx="http://www.springframework.org/schema/tx"
 6     xmlns:aop="http://www.springframework.org/schema/aop"
 7     xmlns:context="http://www.springframework.org/schema/context"
 8     xmlns:p="http://www.springframework.org/schema/p"
 9     xsi:schemaLocation="http://www.springframework.org/schema/beans 
10     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
11     http://www.springframework.org/schema/context 
12     http://www.springframework.org/schema/context/spring-context-3.2.xsd
13     http://www.springframework.org/schema/tx 
14     http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
15     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
16 
17     
18     <!-- 配置数据源,记得去掉myBatis-config.xml的数据源相关配置 -->
19     <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">            
20         <property name="driverClass" value="com.mysql.jdbc.Driver" />
21         <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/scm32?useUnicode=true&amp;characterEncoding=UTF-8" />
22         <property name="user" value="scott" />
23         <property name="password" value="orcl" />    
24     </bean>
25     
26     <!-- 配置session工厂,mybatis喜欢在前面加上sql因为他是基于Sql的映射框架,配置数据源读取xml文件 -->
27     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
28         <property name="dataSource" ref="dataSource" />
29         <property name="configLocation" value="classpath:myBatis-config.xml" />
30         <property name="mapperLocations" value="classpath:cn/hp/scm/dao/*.xml"/>
31     </bean>
32     
33     <!-- 配置SessionTemplate,已封装了繁琐的数据操作-->
34     <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
35         <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>        
36     </bean>
37     
38     <!-- 配置事务管理器,管理数据源事务处理-->
39     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
40         <property name="dataSource" ref="dataSource" />
41     </bean>
42     
43     <!-- 配置事务通知 -->
44     <tx:advice id="advice" transaction-manager="transactionManager">
45         <tx:attributes>
46 <!-- 默认只处理运行时异常,可加rollback-for="Exception/Throwable"等处理所有异常或包括错误 -->
47             <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
48             <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
49             <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
50             <tx:method name="*" propagation="SUPPORTS"/>
51         </tx:attributes>
52     </tx:advice>
53     
54     <!-- 配置切面织入的范围,后边要把事务边界定在service层 -->
55     <aop:config>
56         <aop:advisor advice-ref="advice" pointcut="execution(* cn.hp.scm.dao.impl.*.*(..))"/>
57     </aop:config>
58     
59     <!-- <context:component-scan base-package="*"/> -->
60     <!-- 扫描的相应的包 -->
61     <context:component-scan base-package="cn.hp">
62         <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
63     </context:component-scan>    
64     
65     <!-- 配置 转换器,对于在basePackage设置的包(包括子包)下的接口类,如果在Mapper.xml文件中定义过,
66     将被转换成spring的BEAN,在调用 的地方通过@Autowired方式将可以注入接口实例
67     限定性类名,全路径名,非限定性类名不是全类名的名称-,相当于他的类名-->
68     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
69         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
70         <property name="basePackage" value="cn.hp.scm.dao"/>
71     </bean>
72         
73 </beans>
View Code
原文地址:https://www.cnblogs.com/he-123/p/5372708.html