1. 程式人生 > 其它 >spring整合mybatis純註解編碼

spring整合mybatis純註解編碼

技術標籤:筆記mybatisspringmysql

目錄

1,匯入依賴

2,配置bean

3,entity實體類

4,dao介面

5,配置類

6,init.properties

7,test程式碼

8,結果:


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));

    }

8,結果: