事务添加类位置
package domain;
import dao.UserDao;
import entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
/**
* 表示额外功能 事务添加的位置。
*/
@Service
@Transactional
public class UserServiceImpl implements UserService {
// spring在工厂中自动寻找该类型,为其注入
@Autowired
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
System.out.println("set userdao");
this.userDao = userDao;
}
@Override
public void register(Integer id,String name) {
System.out.println("userService register...");
User u = new User();
u.setId(id);
u.setName(name);
userDao.save(u);
}
@Override
public void login(Integer id, String name) {
User u = new User();
u.setId(id);
u.setName(name);
userDao.save(u);
userDao.findByIdAndName(u);
System.out.println("search...");
}
}
配置bean
@Configuration
/**
* 此注解会在此配置bean中扫描SqlSessionFactoryBeanName。
* 此注解指定的是dao接口的位置
*/
@MapperScan(basePackages = {"dao"})
@ComponentScan(basePackages = {"pro"})//扫描多个包
@Import(App2.class)
public class AppConfig {
@Autowired
private MapperProperties properties;
// 配置数据源,无源码
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(properties.getDriverName());
dataSource.setUrl(properties.getUrl());
dataSource.setUsername(properties.getUsername());
dataSource.setPassword(properties.getPassword());
return dataSource;
}
// sqlsessionfactory 配置
// @Autowired
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) throws IOException {
SqlSessionFactoryBean sql = new SqlSessionFactoryBean();
// 设置数据源
sql.setDataSource(dataSource);
// 设置别名包
sql.setTypeAliasesPackage(properties.getTypeAliases());
// 在XML中配置的是一个list,所以需要变化。
// ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// Resource[] resources = resolver.getResources(properties.getMapperLocations());
//// 设置Mapper位置
// sql.setMapperLocations(resources);
// 因为使用的是全注解,所以Mapper文件的位置。并不用指定
return sql;
}
}
@Configuration
/**
* 表示额外功能 事务添加的位置。
* 代替 <tx:annotation-driven transaction-managerManager=dataSource proxy-target-class></>
*/
@EnableTransactionManagement
public class App2 {
@Autowired
private DataSource dataSource;
@Bean
public DataSourceTransactionManager dataSourceTransactionManager(){
DataSourceTransactionManager manager = new DataSourceTransactionManager();
manager.setDataSource(dataSource);
return manager;
}
}
配置类:
@Component
@PropertySource("classpath:init.properties")
public class MapperProperties {
@Value("${jdbc.driverName}")
private String driverName;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Value("${mybaatis.typeAliases}")
private String typeAliases;
public String getTypeAliases() {
return typeAliases;
}
public void setTypeAliases(String typeAliases) {
this.typeAliases = typeAliases;
}
public String getDriverName() {
return driverName;
}
public void setDriverName(String driverName) {
this.driverName = driverName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
// public String getMapperLocations() {
// return mapperLocations;
// }
//
// public void setMapperLocations(String mapperLocations) {
// this.mapperLocations = mapperLocations;
// }
}
反思:
当一个问题,你肯定你的代码没错的时候,就想想你的jar包版本的问题。