美文网首页
数据访问

数据访问

作者: PC_Repair | 来源:发表于2018-07-23 19:15 被阅读13次

一、使用JdbcTemplate访问数据库

pom.xml文件配置

  • 引入jdbc支持
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
  • 引入MySQL连接依赖包
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

注意:版本不对可能连不上MySQL

  • src/main/resources/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.Driver

其中test为数据库名称,3306为默认的端口号。

使用SpringBoot测试类进行测试
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class SpringbootTestApplicationTests {
    @Autowired
    private UserService userService;  //使用UserServiceImpl也行

    @Before
    public void setUp() {
        userService.deleteAllUsers();
        System.out.println("清空user表");
    }

    @Test
    public void test() throws Exception {
        System.out.println("插入5个用户");
        userService.create("a", 1);
        userService.create("b", 2);
        userService.create("c", 3);
        userService.create("d", 4);
        userService.create("e", 5);
        // 查数据库,应该有5个用户
        Assert.assertEquals(5, userService.getAllUsers().intValue());
        // 删除两个用户
        userService.deleteByName("a");
        userService.deleteByName("e");
        // 查数据库,应该有5个用户
        Assert.assertEquals(3, userService.getAllUsers().intValue());
    }
}
UserService类实现
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    @Override
    public void create(String name, Integer age) {
        jdbcTemplate.update("insert into USER(NAME, AGE ) values(?, ?)", name, age);
    }

    @Override
    public void deleteByName(String name) {
        jdbcTemplate.update("delete from USER where NAME = ?", name);
    }

    @Override
    public Integer getAllUsers() {
        return jdbcTemplate.queryForObject("select count(1) from USER", Integer.class);
    }

    @Override
    public void deleteAllUsers() {
        jdbcTemplate.update("delete from USER");
    }
UserService 接口
public interface UserService {
    void create(String name, Integer age);
    void deleteByName(String name);
    Integer getAllUsers();
    void deleteAllUsers();
}
在命令行查询的结果
asd.png

二、使用Spring-data-jpa访问数据库

pom.xml文件配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • src/main/resources/application.properties配置数据源信息

在上述一中增加如下配置:

spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop

Spring-data-jpa依赖于Hibernate,spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:

  • create:每次加载hibernate时都会删除上一次生成的表,然后根据你的model类再重新生成新表,两次没有任何改变也会这样执行。
  • create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
  • update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
  • validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。
示例:

创建实体:

@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;
    @Column(nullable = true)
    private String name;
    @Column(nullable = true)
    private Integer age;

    public User(){}  //需要默认构造函数,否则可能会报错

    public User(String name, Integer age){
        this.name = name;
        this.age = age;
    }

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public Integer getAge() { return age; }
    public void setAge(Integer age) { this.age = age; }
}

创建数据访问接口:

public interface UserRepository extends JpaRepository<User, Long> {
    //jpa特性:通过解析方法名创建查询
    User findByName(String name);
    User findByNameAndAge(String name, Integer age);
    //@Query注解来创建查询,需编写JPQL语句
    @Query("from User u where u.name=:name")
    User findUser(@Param("name") String name);
}

单元测试:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(Application.class)
public class ApplicationTests {

    @Autowired//用来给指定的字段或方法注入所需的外部资源
    private UserRepository userRepository;

    @Test
    public void test() throws Exception {

        // 创建10条记录
        userRepository.save(new User("AAA", 10));
        userRepository.save(new User("BBB", 20));
        userRepository.save(new User("CCC", 30));
        userRepository.save(new User("DDD", 40));
        userRepository.save(new User("EEE", 50));
        userRepository.save(new User("FFF", 60));
        userRepository.save(new User("GGG", 70));
        userRepository.save(new User("HHH", 80));
        userRepository.save(new User("III", 90));
        userRepository.save(new User("JJJ", 100));

        // 测试findAll, 查询所有记录
        Assert.assertEquals(10, userRepository.findAll().size());

        // 测试findByName, 查询姓名为FFF的User
        Assert.assertEquals(60, userRepository.findByName("FFF").getAge().longValue());

        // 测试findUser, 查询姓名为FFF的User
        Assert.assertEquals(60, userRepository.findUser("FFF").getAge().longValue());

        // 测试findByNameAndAge, 查询姓名为FFF并且年龄为60的User
        Assert.assertEquals("FFF", userRepository.findByNameAndAge("FFF", 60).getName());

        // 测试删除姓名为AAA的User
        userRepository.delete(userRepository.findByName("AAA"));

        // 测试findAll, 查询所有记录, 验证上面的删除是否成功
        Assert.assertEquals(9, userRepository.findAll().size());
    }
}

相关文章

  • Day09:数据访问

    1、数据访问 1.1 数据访问 spring data规范了API进行数据访问操作 spring data rep...

  • 对Method、Field的访问

    访问非静态方法 访问静态方法 访问Java的构造方法 访问基本类型数据数组 访问引用数据类型数组

  • 数据访问

    一、使用JdbcTemplate访问数据库 pom.xml文件配置 引入jdbc支持 引入MySQL连接依赖包 注...

  • 数据访问

    1,service实现类注解为@Component(SpringMVC)@Service(阿里) 2,dao是局部...

  • 内存数据库 网络

    数据库访问 通过API访问数据库:直接访问,ODBC,JDBCODBC访问DBMS的标准API,是为了把数据库与系...

  • 异步请求数据的集中方法实现(1)——接口回调

      Android对于访问请求数据,经常需要异步访问访问网络,请求数据。对于请求的数据需要传递给数据使用的地方。所...

  • Python 获取url分页数据

    通过实时访问API接口获取json数据落地至本地,分享一个小脚本。 API访问数据接口格式为:数据访问结构 从数据...

  • DAO和hibernate的区别

    DAO,data access model,数据访问对象,主要是用来访问数据库的。它属于web开发的数据访问层,他...

  • SpringBoot 中使用Redis缓存

    项目中,数据的访问往往都是直接访问数据库的方式,但如果对数据的访问量很大或者访问很频繁的话,将会对数据库来很大的压...

  • Spring Boot数据访问书目录

    Spring Boot数据访问 Spring Boot数据访问之使用JdbcTemplate Spring Boo...

网友评论

      本文标题:数据访问

      本文链接:https://www.haomeiwen.com/subject/jeajmftx.html