首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Spring Boot 整合 MyBatis 完整實戰教程(註解 + XML 混合模式)

     編輯:Java 綜合教學

Spring Boot 整合 MyBatis 完整實戰教程(註解 + XML 混合模式)

Spring Boot 自動配置了 JdbcTemplate 與 JPA,但 MyBatis 需手動整合。本文演示基於 Druid 數據源、註解開發與 XML 映射混合的完整接入流程。

項目結構

com.xxx.firstboot
├── common/MyBatisConfig.java      # 整合入口
├── mapper/UserMapper.java         # Mapper 接口
├── mapper/UserMapper.xml          # SQL 映射
├── dao/UserDao.java               # DAO 層
├── service/UserService.java       # Service 層
├── web/UserController.java        # Controller
└── domain/User.java               # 實體類

依賴配置

<!-- JDBC & Druid -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.14</version></dependency>
<!-- MySQL -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
<!-- MyBatis -->
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.2.8</version></dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version></dependency>

application.properties

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://xxx:3306/mytestdb?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=vvvxxx

mybatis.typeAliasesPackage=com.xxx.firstboot.domain
mybatis.mapperLocations=classpath:mapper/*.xml

MyBatisConfig 整合入口

@Configuration
@MapperScan(basePackages = "com.xxx.firstboot.mapper")
public class MyBatisConfig {
    @Autowired
    private Environment env;

    @Bean
    public DataSource dataSource() throws Exception {
        Properties props = new Properties();
        props.put("driverClassName", env.getProperty("jdbc.driverClassName"));
        props.put("url", env.getProperty("jdbc.url"));
        props.put("username", env.getProperty("jdbc.username"));
        props.put("password", env.getProperty("jdbc.password"));
        return DruidDataSourceFactory.createDataSource(props);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean fb = new SqlSessionFactoryBean();
        fb.setDataSource(dataSource);
        fb.setTypeAliasesPackage(env.getProperty("mybatis.typeAliasesPackage"));
        fb.setMapperLocations(new PathMatchingResourcePatternResolver()
            .getResources(env.getProperty("mybatis.mapperLocations")));
        return fb.getObject();
    }
}

關鍵點:@MapperScan 掃描 Mapper 接口,SqlSessionFactoryBean 必須設置 DataSource,XML 非必需時可省略 typeAliasesPackage 和 mapperLocations。

Mapper 接口與 XML

UserMapper.java

public interface UserMapper {
    @Insert("INSERT INTO tb_user(username, password) VALUES(#{username}, #{password})")
    int insertUser(@Param("username") String username, @Param("password") String password);

    // 需返回自增主鍵,使用 XML
    int insertUserWithBackId(User user);
}

UserMapper.xml

<mapper namespace="com.xxx.firstboot.mapper.UserMapper">
    <insert id="insertUserWithBackId" parameterType="User" 
            useGeneratedKeys="true" keyProperty="id">
        INSERT INTO tb_user (username, password)
        VALUES (#{username, jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR})
    </insert>
</mapper>

分層調用

// Dao
@Repository
public class UserDao {
    @Autowired UserMapper userMapper;
    public int insertUser(String u, String p) { return userMapper.insertUser(u, p); }
    public int insertUserWithBackId(User user) { return userMapper.insertUserWithBackId(user); }
}

// Service
@Service
public class UserService {
    @Autowired UserDao userDao;
    public boolean addUser(String u, String p) { return userDao.insertUser(u, p) == 1; }
    public User addUserWithBackId(String u, String p) {
        User user = new User(); user.setUsername(u); user.setPassword(p);
        userDao.insertUserWithBackId(user); // 主鍵自動回填
        return user;
    }
}

// Controller
@RestController @RequestMapping("/user") @Api("User API")
public class UserController {
    @Autowired UserService userService;
    @PostMapping("/addUser") public boolean addUser(@RequestParam String username, @RequestParam String password) {
        return userService.addUser(username, password);
    }
    @PostMapping("/addUserWithBackId") public User addUserWithBackId(@RequestParam String username, @RequestParam String password) {
        return userService.addUserWithBackId(username, password);
    }
}

運行驗證

項目根目錄執行 mvn spring-boot:run,訪問 Swagger UI 測試接口。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved