一、使用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());
}
}
网友评论