Mybatis环境搭建(注解的方式)
1.创建一个连接数据库参数的配置文件 db.properties
jdbc.driver=com.mysql.jdbc.Driver # 本地数据库,端口3306 可以简写如下 完整写法:jdbc:mysql://localhost:3306/mybatisdb jdbc.url=jdbc:mysql:///mybatisdb jdbc.username=root jdbc.password=123456
2.创建mybatis主配置文件 SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--引入外部属性文件--> <properties resource="db.properties"></properties> <!--配置别名--> <typeAliases> <package name="com.study.domain"></package> </typeAliases> <!--配置环境--> <environments default="mysql"> <environment id="mysql"> <!--事务--> <transactionManager type="JDBC"></transactionManager> <!--POOLED连接池--> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"></property> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </dataSource> </environment> </environments> <!--带有注解的dao接口所在位置--> <mappers> <package name="com.study.dao"></package> </mappers> </configuration>
3.环境搭建完毕,先测试一下
package com.study.test; import com.study.dao.AccountDao; import com.study.domain.Account; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.List; public class MybatisTest { @Test public void test1() throws IOException { String resource = "SqlMapConfig.xml"; //获取字节输入流 InputStream is = Resources.getResourceAsStream(resource); //根据字节输入流构建SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); //使用SqlSessionFactory生产一个SqlSession SqlSession session = factory.openSession(); //获取到代理对象 AccountDao dao = session.getMapper(AccountDao.class); List<Account> list = dao.findAll(); for (Account a:list) { System.out.println("-------"+a); } //释放资源 session.close(); is.close(); } }
spring整合mybatis
整合的目的:把mybatis配置中使用的类交给spring管理,也就是数据源,SqlSessionFactory工厂
操作:直接把 SqlMapConfig.xml 中的配置都放到 applicationContext.xml 中,配置如下,然后直接把 SqlMapConfig.xml 删除就好了
<!--配置注解扫描--> <context:component-scan base-package="com.study"> <!--配置不扫描的注解--> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter> </context:component-scan> <!--整合mybatis框架的配置--> <!--读取参数配置文件db.properties--> <context:property-placeholder location="classpath:db.properties"/> <!--配置c3p0数据源--> <bean id="dataSource" class="com.mchange.v2.c3p0.DriverManagerDataSource"> <property name="driverClass" value="${jdbc.driver}"></property> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!--配置SqlSessionFactory工厂--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> </bean> <!--配置dao接口注解的位置--> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.study.dao"></property> </bean>
配置声明式事务
在spring的配置 -- applicationContext.xml中加入配置
<!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务的通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" read-only="false"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> <!-- 配置 aop --> <aop:config> <!-- 配置切入点表达式 --> <aop:pointcut expression="execution(* com.study.service.impl.*.*(..))" id="pt1"/> <!-- 建立通知和切入点表达式的关系 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/> </aop:config>