Spring整合MyBatis-纯注解形式(最简)
前提: 整合MyBatis使用Idea创建Maven工程, 下图为工程目录结构

1. 导入Maven工程相关的坐标 - pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xxx</groupId> <artifactId>spring-mybatis02-zh</artifactId> <version>1.0</version> <!--指定java1.8版本--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <!--MyBatis坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <!--Mybatis-spring整合坐标--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!--druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <!--MySQL连接坐标--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--spring坐标--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <!--Spring-jdbc--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <!--Junit-单元测试坐标--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <!--Junit-spring的test--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.1.9.RELEASE</version> </dependency> </dependencies> </project>
2. 创建jdbc的配置文件 - jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_db
jdbc.username=root
jdbc.password=root
3. config - SpringConfig.java
package com.xxx.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.PropertySource; /** * @author : longChuanJiang * @date : Created in 2020/8/24 14:07 */ @Configuration @ComponentScan(value = "com.xxx") @PropertySource("classpath:jdbc.properties") @Import({JdbcConfig.class, MyBatisConfig.class}) public class SpringConfig { /* ###########-Spring核心配置类详解-########### 1. 开启Spring注解扫描器, 扫描Spring可识别的注解 @ComponentScan(value = "com.xxx") 2. 加载jdbc配置文件 @PropertySource("classpath:jdbc.properties") 3. 导入JdbcConfig和MyBatisConfig的配置类 @Import({JdbcConfig.class, MyBatisConfig.class}) */ }
4. config - JdbcConfig.java
package com.xxx.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; /** * @author : longChuanJiang * @date : Created in 2020/8/24 14:06 */ public class JdbcConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String username; @Value("${jdbc.password}") private String password; @Bean public DataSource getDataSource() { DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(username); ds.setPassword(password); return ds; } }
5. config - MyBatisConfig.java
package com.xxx.config; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; import javax.sql.DataSource; /** * @author : longChuanJiang * @date : Created in 2020/8/24 14:07 */ public class MyBatisConfig { /** * 获取数据源 * * @param dataSource 数据源 * @return 数据源 */ @Bean public SqlSessionFactoryBean getSqlSessionFactoryBean(@Autowired DataSource dataSource) { SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean(); ssfb.setDataSource(dataSource); // 设置实体类的别名路径 ssfb.setTypeAliasesPackage("com.xxx.domain"); return ssfb; } /** * 注册扫描器: 扫描包下面的mapper接口 */ @Bean public MapperScannerConfigurer getMapperScannerConfigurer() { MapperScannerConfigurer msc = new MapperScannerConfigurer(); // 设置MyBatis的Mapper接口路径 msc.setBasePackage("com.xxx.dao"); return msc; } }
6. dao - AccountDao.java(接口)
package com.xxx.dao; import com.xxx.domain.Account; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.springframework.stereotype.Component; import java.util.List; /** * @author longChuanJiang */ @Component public interface AccountDao { @Insert("insert into account(name,money)values(#{name},#{money})") void save(Account account); @Delete("delete from account where id = #{id} ") void delete(Integer id); @Update("update account set name = #{name} , money = #{money} where id = #{id} ") void update(Account account); @Select("select * from account") List<Account> findAll(); @Select("select * from account where id = #{id} ") Account findById(Integer id); }
7. doamin - Account.java
package com.xxx.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; 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; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } }
8. service - AccountService.java(接口)
package com.xxx.service; import com.xxx.domain.Account; import java.util.List; public interface AccountService { void save(Account account); void delete(Integer id); void update(Account account); List<Account> findAll(); Account findById(Integer id); }
9. service.impl - AccountServiceImpl.java
package com.xxx.service.impl; import com.xxx.dao.AccountDao; import com.xxx.domain.Account; import com.xxx.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Service; import java.util.List; /** * @author longChuanJiang */ @Service("accountService") public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; @Override public void save(Account account) { accountDao.save(account); } @Override public void update(Account account) { accountDao.update(account); } @Override public void delete(Integer id) { accountDao.delete(id); } @Override public Account findById(Integer id) { return accountDao.findById(id); } @Override public List<Account> findAll() { return accountDao.findAll(); } }
10. 数据库源码 - spring-db.sql
/* Navicat Premium Data Transfer Source Server : localMySQL Source Server Type : MySQL Source Server Version : 50729 Source Host : localhost:3306 Source Schema : spring_db Target Server Type : MySQL Target Server Version : 50729 File Encoding : 65001 Date: 24/08/2020 17:30:33 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for account -- ---------------------------- DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `money` double(255, 30) NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of account -- ---------------------------- INSERT INTO `account` VALUES (1, '张三', 24.990000000000000000000000000000); INSERT INTO `account` VALUES (2, '赵四', 26.120000000000000000000000000000); INSERT INTO `account` VALUES (3, '王五', 19555.555000000000000000000000000000); INSERT INTO `account` VALUES (4, 'jock', 193.222000000000000000000000000000); SET FOREIGN_KEY_CHECKS = 1;
11. 测试源码 - AccountServiceTest.java
package com.xxx.service; import com.xxx.config.SpringConfig; import com.xxx.domain.Account; import com.xxx.service.AccountService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.List; /** * @author : longChuanJiang * @date : Created in 2020/8/24 14:43 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class AccountServiceTest { @Autowired private AccountService accountService; @Test public void findAllTest(){ List<Account> all = accountService.findAll(); System.out.println("all = " + all); } @Test public void findByIdTest(){ Account ac = accountService.findById(4); System.out.println("ac = " + ac); } @Test public void saveTest(){ Account account = new Account(); account.setName("jock"); account.setMoney(193.222); accountService.save(account); findAllTest(); } }
浙公网安备 33010602011771号