微服务之三springBoot操作数据库

依照第一篇文章创建一个数据操作的工程,这里是展现操作mysql数据库的。采用JPA是一种比较普通的使用方法,就从这里开始。

当然首先的是要引进对MYSQL的MAVEN依赖,在POM文件中增加下面的几个引用:

        <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-actuator</artifactId>

        </dependency>

        <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

        <dependency>

           <groupId>org.springframework.boot</groupId>

           <artifactId>spring-boot-starter-data-jpa</artifactId>

        </dependency>

        <dependency>

           <groupId>mysql</groupId>

           <artifactId>mysql-connector-java</artifactId>

            <scope>runtime</scope>

        </dependency>

这几个依赖不大,不过可能需要人品,如果能翻墙代理最好或者配置一些好的国内的代理。这样会快很多,时间也是金钱。

在工程中增加一个配置类:

@Order(Ordered.HIGHEST_PRECEDENCE)

@Configuration

@EnableTransactionManagement(proxyTargetClass= true)

@EnableJpaRepositories(basePackages= "com.example.**.repository")

@EntityScan(basePackages ="com.example.**.entity")

public classJpaConfiguration {

 

    @Bean

   PersistenceExceptionTranslationPostProcessorpersistenceExceptionTranslationPostProcessor(){

        return newPersistenceExceptionTranslationPostProcessor();

    }

 

}

需要注意的是@EntityScan这个注解已经提示不推荐使用了。

然后在resources中再增加一个yml文件:

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/test

    username: test

    password: 123456

  jpa:

    database: MYSQL

    show-sql: true

  #Hibernate ddl auto(validate|create|create-drop|update)

    hibernate:

      ddl-auto: update

      naming-strategy:org.hibernate.cfg.ImprovedNamingStrategy

    properties:

      hibernate:

        dialect:org.hibernate.dialect.MySQL5Dialect

这是一个配置数据库操作的配置文件,在整个程序完成后,运行时,这里会报一个没有权限操作本地的错误:

ERROR 1045 (28000): Accessdenied for user 'mysql'@'localhost' (using password: NO)

解决方法:

grant all privileges on *.*to 'test'@'localhost'  identified by'123456' with grant option;

然后重启MYSQL的服务即可。

根据实际情况创建表的ORM映射类即可,JPA会自动的连接到数据库并在MYSQL中自动创建相关的表。

同样,要创建访问DAO的接口层,并且需要使用@Repository将其定义为一个资源库,针对上面创建的表比如User:

@Repository

public interfaceUserRepository extends JpaRepository<User, Long> {

    User findByNameLike(String name);

    User readByName(String name);

    List<User>getByCreatedateLessThan(Date star);

}

同理,根据不同的情况创建不同的表的这种资源接口。定义好这些接口后就可以直接使用相关的CRUD等数据库的操作了。

这时候,可以用intelidea增加一个junit的单元测试:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration(classes= {JpaConfiguration.class})

public class MysqlTest {

    private static Logger logger =LoggerFactory.getLogger(MysqlTest.class);

 

    @Autowired

    UserRepository userRepository;

    @Autowired

    DepartmentRepository departmentRepository;

    @Autowired

    RoleRepository roleRepository;

 

    @Before

    public void initData(){

        userRepository.deleteAll();

        roleRepository.deleteAll();

        departmentRepository.deleteAll();

 

        Department department = new Department();

        department.setName("开发部");

        departmentRepository.save(department);

        Assert.notNull(department.getId());

 

        Role role = new Role();

        role.setName("admin");

        roleRepository.save(role);

        Assert.notNull(role.getId());

 

        User user = new User();

        user.setName("user");

        user.setCreatedate(new Date());

        user.setDeparment(department);

 

        List<Role> roles =roleRepository.findAll();

        Assert.notNull(roles);

        user.setRoles(roles);

 

        userRepository.save(user);

        Assert.notNull(user.getId());

    }

 

    @Test

    public void findPage(){

        Pageable pageable = new PageRequest(0,10, new Sort(Sort.Direction.ASC, "id"));

        Page<User> page =userRepository.findAll(pageable);

        Assert.notNull(page);

        for(User user : page.getContent()) {

            logger.info("====user==== username:{}, department name:{}, role name:{}",

                    user.getName(),user.getDeparment().getName(), user.getRoles().get(0).getName());

        }

    }

 

    //@Test

    public void test(){

        User user1 =userRepository.findByNameLike("u%");

        Assert.notNull(user1);

 

        User user2 =userRepository.readByName("user");

        Assert.notNull(user2);

 

        List<User> users =userRepository.getByCreatedateLessThan(new Date());

        Assert.notNull(users);

    }

}

程序就可以直接跑起来了。

这里唯一遇到的麻烦是配置数据库时,各种无语,密码不对,没有重启和用户名不对啊。最后一一修改后才完成了整个工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值