1、pom文件引入
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency>2、application.properties新增配置
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.DriverController类:
@RestController @RequestMapping("user") public class UserController { @Autowired private UserService userService; @RequestMapping("createUser") public void createUser() { System.out.println("user测试"); userService.createUser("张三",14); } }Service实现类:
@Service public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; @Override public void createUser(String name,Integer age) { System.out.println(name+"-----"+age+"岁"); jdbcTemplate.update("insert into user values(1,?,?)",name,age); } }访问http://localhost:8080/user/createUser 即可在数据库中插入一条user记录。
1、pom文件引入:
<!--整合mabits--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>2、配置文件引入
#数据库连接相关信息 spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=x5 spring.datasource.driver-class-name=com.mysql.jdbc.Driver3、Mapper代码
public interface UserMapper { @Select("select * from user") List<User> getUser(); @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); }4、service实现类调用
@Service public class UserServiceImpl implements UserService { @Autowired private JdbcTemplate jdbcTemplate; @Autowired private UserMapper userMapper;//idea报错是正常的,因为没声明这个bean,使用mabits的映射器时,这种情况是正常的 @Override public void createUser(String name, Integer age) { List<User> userList = userMapper.getUser(); for (User user : userList) { System.out.println(user); } // userMapper.insert(name,age); // System.out.println("插入成功"); // jdbcTemplate.update("insert into user values(1,?,?)",name,age); } }pom文件引入
<!-- springdata jpa依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>创建Entity实体类
/** * Entity类 */ @Entity(name="userEntity") public class UserEntity { @Id @GeneratedValue private int id; @Column(length=20) private String name; @Column private int age; //get set 方法创建dao层继承Jpa
public interface UserDao extends JpaRepository<UserEntity,Integer> { }我们可以看看JpaRepository中的一些方法,如图,我们可以直接使用这些方法,包括其父类的好多方法
application.properties配置文件更新
#建表策略,这里用update,即根据实体更新表结构,如果没有该表,jpa可以直接根据entity创建表 spring.jpa.hibernate.ddl-auto = update进行单元测试:
@Autowired private UserDao userDao; @Test public void testUserDao() { UserEntity userEntity=userDao.findOne(1); System.out.println(userEntity); }效果:
mysql数据库中原本没有user_entity表,当我们启动项目,jpa会直接根据entity实体类创建表,如图:
配置文件中新增两个数据源:
#数据库连接相关信息 数据源test1 spring.datasource.test1.url=jdbc:mysql://localhost:3306/test spring.datasource.test1.username=root spring.datasource.test1.password=x5 spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver #数据库连接相关信息 数据源test2 spring.datasource.test2.url=jdbc:mysql://localhost:3306/test2 spring.datasource.test2.username=root spring.datasource.test2.password=x5 spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver数据源1配置类
/** * 配置数据源1 */ @Configuration @MapperScan(basePackages = "com.mytest.springbootDemo.mapper", sqlSessionFactoryRef = "test1SqlSessionFactory") public class MyBatisConfig1 { @Bean(name = "test1DataSource") @Primary @ConfigurationProperties(prefix = "spring.datasource.test1") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "test1SqlSessionFactory") @Primary//@Primary注解标识默认使用的数据源,如果不加启动会报如下错误:意思是有两个数据源 不知需要使用哪个数据源 public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //读取mybatis小配置文件 // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test1/*.xml")); return bean.getObject(); } @Bean(name = "test1TransactionManager") @Primary public DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test1SqlSessionTemplate") @Primary public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } } @Primary注解标识默认使用的数据源,如果不加启动会报如下错误:意思是有两个数据源 不知需要使用哪个数据源数据源2配置类
/** * 配置数据源2 */ @Configuration @MapperScan(basePackages = "com.mytest.springbootDemo.mapper2", sqlSessionFactoryRef = "test2SqlSessionFactory") public class MyBatisConfig2 { @Bean(name = "test2DataSource") @ConfigurationProperties(prefix = "spring.datasource.test2") public DataSource testDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "test2SqlSessionFactory") public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); //读取mybatis小配置文件 // bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test2/*.xml")); return bean.getObject(); } @Bean(name = "test2TransactionManager") public DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "test2SqlSessionTemplate") public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception { return new SqlSessionTemplate(sqlSessionFactory); } }分别创建针对数据源对应的mapper包,如图:
创建对应的mapper类:
usermapper:
public interface UserMapper { @Select("select * from user") List<User> getUser(); @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); }usermapper2:
public interface UserMapper2 { @Select("select * from user") List<User> getUser(); @Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})") int insert(@Param("name") String name, @Param("age") Integer age); }在测试类进行单元测试:
@RunWith(SpringRunner.class) @SpringBootTest public class SpringbootDemoApplicationTests { @Autowired private UserMapper userMapper; @Autowired private UserMapper2 userMapper2; @Test public void testUserMapper() { List<User> userList = userMapper.getUser(); List<User> userList2 = userMapper2.getUser(); for (User user : userList) { System.out.println(user); } for (User user : userList2) { System.out.println(user); } } }效果如图,将两个数据源的数据都读了出来。