Spring可以方便地使用多种持久化技术,例如JdbcTemplate、MyBatis、JPA等。下面看一下Spring boot中如何使用JdbcTemplate访问Mysql。
-
用Spring Initializr创建一个新工程,填好group、artifact等。
-
选择Web、Mysql、JDBC,点击下一步就OK了。
创建完成后会出现很简洁的Web服务入口。
@SpringBootApplication
public class JdbctempleApplication {
public static void main(String[] args) {
SpringApplication.run(JdbctempleApplication.class, args);
}
}
- pom.xml中默认会有spring-boot-starter-web、spring-boot-starter-jdbc、mysql-connector-java的依赖。(这些依赖也可以自己手动添加)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
- 在application.properties中配置数据库参数。(也可以选择使用application.yml作为配置文件)
spring.datasource.url=jdbc:mysql://localhost:3306/myspring
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
- 代码实现一个例子
- a. 创建Bean
public class Person {
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private Long id;
private String name;
private int age;
}
- b. 创建Dao(仅简单列举了增加和查找所有)
public interface IPersonDao {
int add(Person person);
Person findPersonList();
}
@Repository
public class PersonDaoImpl implements IPersonDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public int add(Person person) {
return jdbcTemplate.update("insert into person(name, age) values(?, ?)", person.getName(), person.getAge());
}
@Override
public List<Person> findPersonList() {
List<Person> list = jdbcTemplate.query("select * from person", new Object[]{}, new BeanPropertyRowMapper(Person.class));
if (list != null && list.size() > 0) {
return list;
} else {
return null;
}
}
}
- c. 创建service
public interface IPersonService {
int add(Person person);
List<Person> findPersonList();
}
@Service
public class PersonServiceImpl implements IPersonService{
@Autowired
IPersonDao personDao;
@Override
public int add(Person person) {
return personDao.add(person);
}
@Override
public List<Person> findPersonList() {
return personDao.findPersonList();
}
}
- d. 创建controller
@RestController
@RequestMapping("/person")
public class PersonController {
@Autowired
IPersonService personService;
@RequestMapping(value = "",method = RequestMethod.POST)
public String addPerson( @RequestParam(value = "name",required = true)String name, @RequestParam(value = "age" ,required = true)int age){
Person person=new Person();
person.setName(name);
person.setAge(age);
if(personService.add(person) == 1){
return "Add a new person!";
}else{
return "Fail to add a new person!";
}
}
@RequestMapping(value = "/",method = RequestMethod.GET)
public List<Person> getAccounts(){
return personService.findPersonList();
}
}
- Mysql数据库中构建表。
CREATE TABLE `person`(
`id` int(20) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`age` int(8) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 启动web工程,简单测试一下。
- a. 插入数据
- b. 查找数据
- 总结
JdbcTemplate是Spring对JDBC(Java DataBase Connectivity)的封装。
其优点点是高效、支持AOP事务;缺点是并不支持缓存。