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:\myeclipse\lib\mysql-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&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>
右键如下
点击生成配置文件和相应的实体类。但这里对生成的实体类和映射文件做相应的处理
一个小的单元测试:
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 }
首先应该加入相应的配置文件,及时数据库连接文件。
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&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>
原文:http://www.cnblogs.com/he-123/p/5372708.html