最近在学习spring boot,想着用jdbc连接mysql数据库,查询取出数据封装成对象并返回一个列表,然后通过thyemeleaf取出展现给前端。这期间遇到了不少的坑。
文件目录如下:
项目目录
1首先是pom.xml中引入依赖
org.springframework.boot
spring-boot-starter-jdbc
mysql
mysql-connector-java
runtime
org.springframework.boot
spring-boot-starter-thymeleaf
2然后是自建的application.yml中配置数据库信息
spring:
datasource:
username: root
password: 123456
url: jdbc:mysql://localhost:3306/scrapy_db?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
thymeleaf:
cache: false
这里的url后面如果不加?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai会报错。
数据库中信息如下:
mysql中数据
3编写与数据库对应的实体类person
public class Person {
private String name;
private String age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
}
这里实体类里不能单独有有参构造函数,要么无参构造和有参构造都写出来要么都不写,否则会报错(曾经卡过我)
4编写Dao接口和实现方法
#Dao接口
public interface PersonDao {
List findAll();
}
#Dao实现方法
@Repository
public class PersonDaoImp implements PersonDao{
@Autowired
private JdbcTemplate jdbcTemplate;
@Override
public List findAll() {
String sql = "select * from person";
List query = this.jdbcTemplate.query(sql, new BeanPropertyRowMapper(Person.class));
return query;
}
}
这里的实现方法要通过@Repository添加到容器中
5编写service和实现方法
##接口
public interface PersonService {
List findAll();
}
##实现方法
@Service
public class PersonSerImp implements PersonService{
@Autowired
PersonDaoImp personDaoImp;
@Override
public List findAll() {
return personDaoImp.findAll();
}
}
这里的实现方法野要通过@Service加入到容器中!
6编写controller文件
@Controller
public class mysqlController {
@Autowired
PersonSerImp personSerImp;
@GetMapping("/mysql")
public String map(Model model){
List list = personSerImp.findAll();
model.addAttribute("list",list);
return "list";
}
这里的model.addAttribute("list",list);千万不要写成model.addAttribute("list","list")!!!!
7编写list.html
振振有词#jz{ margin:0 auto; width:40%; height:50%; border:1px solid #ee1717; margin-top:100px
}
姓名年龄性别
8启动项目输入网址
浏览器打开网址
感想:虽然只是一个很简单的功能,但是却折磨了我一天半,真的是see see easy,do do hard。不过当完成的那一刻还是很开心的,长路漫漫,还需努力。