目录
利用XML配置
需要导入Spring相关包和Mybatis相关包,然后就是下面这个整合包
<!--MyBatis和Spring的整合包 由MyBatis提供-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
实体类
(下面省略get set)
public class User {
int id;
String username;
double money;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", money=" + money +
'}';
}
}
Dao层接口
public interface UserDao {
List<User> getlist();
}
Dao.xml
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="zs.Dao.UserDao">
<select id="getlist" resultType="User">
select * from user;
</select>
</mapper>
Service层
public class UserServiceImp implements UserService {
UserDao userDao;
@Override
public List<User> getList() {
return userDao.getlist();
}
}
Spring配置文件
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--声明数据源-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<array>
<value>classpath:database.properties</value>
</array>
</property>
</bean>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<!--声明MyBatis中的核心对象-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!--类的别名-->
<property name="typeAliasesPackage" value="zs.table"></property>
<!--指向映射文件-->
<property name="mapperLocations" value="mapper/UserDao.xml"></property>
</bean>
<!--通过包扫描生成DAO接口的动态代理-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="zs.Dao"></property>
</bean>
<!--声明程序中的SERVICE对象-->
<bean id="service" class="zs.Service.impl.UserServiceImp" autowire="byType">
</bean>
<!--整合事务-->
<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="name*" isolation="READ_COMMITTED" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="execution(* zs.Service.*.*(..))"></aop:advisor>
</aop:config>
</beans>
测试
ApplicationContext app=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us=(UserService)app.getBean("service");
System.out.println(us.getList());
利用注解配置
实体类一样
Dao层
使用的是Mybatis注解,配置sql语句
public interface UserDao {
@Select("select * from user")
List<User> getlist();
}
Service层
把类转换成Bean,自动装配,设置事务
@Service
public class UserServiceImpl implements UserService {
@Autowired
UserDao userDao;
@Override
@Transactional(isolation=Isolation.READ_COMMITTED)
public List<User> getList() {
return userDao.getlist();
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
读取配置文件类
@Component
@PropertySource("classpath:database.properties")//指向属性文件地址
public class PropertyConfig {
@Value("${url}") //获取properties文件中的值。
private String url; //该变量不能为static的 且必须拥有get、set
@Value("${driver}")
private String driver;
@Value("${username}")
private String username;
@Value("${password}")
private String password;
}
配置类
@Configuration //核心配置注解
@ComponentScan(basePackages ="zs") //注解扫描器 <context:componetscan/>
@MapperScan(basePackages = {"zs.Dao"}) //MyBatis的注解 扫描dao接口生成动态代理类
//当心!两种扫描会冲突
@EnableTransactionManagement //开启事务自动配置
public class AppConfig {
//配置数据源
@Bean
public DataSource dataSource(){
DriverManagerDataSource ds=new DriverManagerDataSource();
ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/library?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true");
ds.setUsername("root");
ds.setPassword("123456");
return ds;
}
//数据库工厂
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean sfs=new SqlSessionFactoryBean();
sfs.setDataSource(dataSource);
return sfs;
}
//事务
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager dt=new DataSourceTransactionManager();
dt.setDataSource(dataSource);
return dt;
}
}
测试类
public class Test {
public static void main(String args[]){
ApplicationContext app=new AnnotationConfigApplicationContext(AppConfig.class);//必须用.class
UserService us=(UserService) app.getBean(UserService.class);//必须用接口
System.out.println(us.getList());
}
}