spring整合mybatis純註解編碼
阿新 • • 發佈:2021-02-07
目錄
1,匯入依賴
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.6</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <!-- https://mvnrepository.com/artifact/org.logback-extensions/logback-ext-spring --> <dependency> <groupId>org.logback-extensions</groupId> <artifactId>logback-ext-spring</artifactId> <version>0.1.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- spring管理事務--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>5.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.2.0.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.23</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency>
2,配置bean
package anno; import com.alibaba.druid.pool.DruidDataSource; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.*; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import pro.MapperProperties; import javax.sql.DataSource; import java.io.IOException; @Configuration /** * 此註解會在此配置bean中掃描SqlSessionFactoryBeanName。 * 此註解指定的是dao介面的位置 */ @MapperScan(basePackages = {"dao"}) @ComponentScan(basePackages = {"pro","dao"})//掃描多個包 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; } }
3,entity實體類
package entity; public class User{ private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
4,dao介面
package dao;
import entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
public interface UserDao {
@Insert("insert into users(name) values(#{name})")
public boolean save(User user);
@Select("select * from users where id = #{id}")
public User findById(Integer id);
}
5,配置類
package pro;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
@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("${mybatis.mapperLocations}")
// private String mapperLocations;
@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;
// }
}
6,init.properties
jdbc.driverName = com.mysql.cj.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/demo?serverTimezone=UTC
jdbc.username = root
jdbc.password = 1234
mybaatis.typeAliases = entity
7,test程式碼
private ApplicationContext ctx;
@Before
public void init(){
this.ctx = new AnnotationConfigApplicationContext(AppConfig.class);
}
@org.junit.Test
public void test1(){
UserDao u = (UserDao) ctx.getBean("userDao");
System.out.println(u.findById(1));
}