目录
2.在resources文件夹下新建mappers文件夹,并添加PersonMapper类
3.在application.properties中配置连接,数据库端口、名称、用户名、密码和包名改成自己的,否则连接不到数据库
2.在mappers文件夹下新建PersonMapper.xml
3.service层新建PersonService接口,新建impl文件夹,并在impl文件夹下新建PersonServiceImpl实现类
4.controller层新建PersonController类
5.在templates文件夹下新建personlist.html
5.修改perosnlist.xml , 并在templates文件夹下新建addPerson.html 、updateperson.html
浏览器手动输入: http://localhost:8080/personlist
点击 增加页面 --> 跳转到:http://localhost:8080/addperson
mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
mybatis解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
mybatis提供xml标签,支持编写动态sql。
Mybatis的功能架构分为三层。
一、基本框架
1.导入MyBatis和mysql依赖包
<!-- 引入mybatis包-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- 引入mysql包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.29</version>
</dependency>
2.在resources文件夹下新建mappers文件夹,并添加PersonMapper类
3.在application.properties中配置连接,数据库端口、名称、用户名、密码和包名改成自己的,否则连接不到数据库
#更改端口号
#server.port=8086
#变更路径
#server.servlet.context-path=/springboot
#引入数据集(图片音频视频什么的)-->静态资源访问
spring.web.resources.static-locations=classpath:/img
# 数据库驱动:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# 数据源名称
spring.datasource.name=defaultDataSource
# 数据库连接地址
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC
# 数据库用户名&密码:
spring.datasource.username=你自己的数据库名称
spring.datasource.password=你自己的数据库密码
#mybatis配置 sql写到配置文件
#下面这些内容是为了让MyBatis映射
#指定Mybatis的Mapper文件 -- sql配置xml文件
mybatis.mapper-locations=classpath:mapper/*.xml
#指定Mybatis的实体目录(实体类包)
mybatis.type-aliases-package=com.lbcjxx.springboot.pojo
#数据修改的日志记录
logging.level.com.wangyang.springboot = debug
4.下载工具MyBatisX
-->后面建好框架会出现小鸟:
二、连接数据库并查询
总框架:
1.dao层新建PersonMapper接口
package com.lbcjxx.springboot.dao;
import com.lbcjxx.springboot.pojo.Person;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//mybatis dao层实现类写到配置文件中
@Mapper
public interface PersonMapper {
public List<Person> findAllPerson();
}
2.在mappers文件夹下新建PersonMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lbcjxx.springboot.dao.PersonMapper">
<!-- id 接口中方法的名字 resultType返回值的类型 集合对象 可以省略集合-->
<select id="findAllPerson" resultType="com.lbcjxx.springboot.pojo.Person">
select * from class
</select>
</mapper>
3.service层新建PersonService接口,新建impl文件夹,并在impl文件夹下新建PersonServiceImpl实现类
package com.lbcjxx.springboot.service;
import com.lbcjxx.springboot.pojo.Person;
import java.util.List;
public interface PersonService {
public List<Person> findAllPerson();
}
package com.lbcjxx.springboot.service.impl;
import com.lbcjxx.springboot.dao.PersonMapper;
import com.lbcjxx.springboot.pojo.Person;
import com.lbcjxx.springboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
PersonMapper personMapper;
@Override
public List<Person> findAllPerson(){
return personMapper.findAllPerson();
}
}
4.controller层新建PersonController类
package com.lbcjxx.springboot.controller;
import com.lbcjxx.springboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PersonController {
@Autowired
PersonService personService;
@RequestMapping("personlist")
public String personlist(Model model){
model.addAttribute("personlist",personService.findAllPerson());
return "personlist.html";
}
}
5.在templates文件夹下新建personlist.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<table border="1">
<tr>
<td>用户id</td>
<td>用户年龄</td>
<td>用户姓名</td>
</tr>
<tr th:each="person:${personlist}">
<td th:text="${person.id}">用户id</td>
<td th:text="${person.age}">用户年龄</td>
<td th:text="${person.name}">用户姓名</td>
</tr>
</table>
</body>
</html>
6.像springboot(四)中一样打开mysql
7.运行:数据库数据访问成功
三、案例练习 -- 增加、删除、修改用户
总框架:
1.在dao层PersonMappe接口类中添加代码
package com.lbcjxx.springboot.dao;
import com.lbcjxx.springboot.pojo.Person;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
//mybatis dao层实现类写到配置文件中
@Mapper
public interface PersonMapper {
public List<Person> findAllPerson();
//删除用户
public int deletePersonById(Integer id);
//增加用户
public int addPerson(Person person);
//修改(更新)用户
public int updatePerson(Person person);
}
2.在PersonMapper.xml中添加代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.lbcjxx.springboot.dao.PersonMapper">
<!-- id 接口中方法的名字 resultType返回值的类型 集合对象 可以省略集合-->
<select id="findAllPerson" resultType="com.lbcjxx.springboot.pojo.Person">
select * from class
</select>
<!-- 删除用户-->
<delete id="deletePersonById" parameterType="Integer">
delete from class where id=#{id}
</delete>
<!--<!–如果参数是对象类型 对象类型可以省略–>-->
<!-- 添加用户-->
<insert id="addPerson" parameterType="com.lbcjxx.springboot.pojo.Person">
insert into class(name,age) values (#{name},#{age})
</insert>
<!-- 修改(更新)用户-->
<update id="updatePerson" parameterType="com.lbcjxx.springboot.pojo.Person">
update class
set name=#{name},age=#{age}
where id=#{id}
</update>
</mapper>
3.在PersonService接口类
package com.lbcjxx.springboot.service;
import com.lbcjxx.springboot.pojo.Person;
import java.util.List;
public interface PersonService {
public List<Person> findAllPerson();
// 删除用户
public int deletePersonById(Integer id);
// 增加用户
public int addPerson(Person person);
// 修改(更新)用户
public int updatePerson(Person person);
}
4.在PersonServiceImpl实现类
package com.lbcjxx.springboot.service.impl;
import com.lbcjxx.springboot.dao.PersonMapper;
import com.lbcjxx.springboot.pojo.Person;
import com.lbcjxx.springboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PersonServiceImpl implements PersonService {
@Autowired
PersonMapper personMapper;
@Override
public List<Person> findAllPerson(){
return personMapper.findAllPerson();
}
// 删除用户
@Override
public int deletePersonById(Integer id) {
return personMapper.deletePersonById(id);
}
// 增加用户
@Override
public int addPerson(Person person) {
return personMapper.addPerson(person);
}
// 修改(更新)用户
@Override
public int updatePerson(Person person) {
return personMapper.updatePerson(person);
}
}
5.修改perosnlist.xml , 并在templates文件夹下新建addPerson.html 、updateperson.html
perosnlist.xml:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>用户列表</h1>
<a th:href="@{/addperson}">增加页面</a>
<table border="1">
<tr>
<td>用户id</td>
<td>用户年龄</td>
<td>用户姓名</td>
<td>删除</td>
<td>更新</td>
</tr>
<tr th:each="person:${personlist}">
<td th:text="${person.id}">用户id</td>
<td th:text="${person.age}">用户年龄</td>
<td th:text="${person.name}">用户姓名</td>
<th>
<a th:href="@{'/deletepersonbyid?id='+${person.id}}">删除用户</a>
</th>
<th>
<a th:href="@{/updateperson(id=${person.id},age=${person.age},name=${person.name})}">更新用户</a>
</th>
</tr>
</table>
</body>
</html>
addPerson.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>增加用户</h1>
<form th:action="@{/addpersoncommit}" method="post">
<div>用户名:<input name="name"></div>
<div>年龄:<input name="age"></div>
<div><input type="submit" value="提交"></div>
</form>
</body>
</html>
updateperson.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>
更新页面
</h1>
<form th:action="@{/updatepersoncommit}" method="post">
<div>id:<input name="id" th:value="${id}"></div>
<div>用户名:<input name="name" th:value="${name}"></div>
<div>年龄:<input name="age" th:value="${age}"></div>
<div><input type="submit" value="提交"></div>
</form>
</body>
</html>
6.修改PersonController类
package com.lbcjxx.springboot.controller;
import com.lbcjxx.springboot.pojo.Person;
import com.lbcjxx.springboot.service.PersonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class PersonController {
@Autowired
PersonService personService;
// 展示数据库用户列表
@RequestMapping("personlist")
public String personlist(Model model){
model.addAttribute("personlist",personService.findAllPerson());
return "personlist.html";
}
// 删除用户
@RequestMapping("deletepersonbyid")
public String deletePersonbyid(int id){
personService.deletePersonById(id);
return "redirect:/personlist";
}
// 添加用户
@RequestMapping("addperson")
public String addperson(){
return "addPerson.html";
}
@RequestMapping("addpersoncommit")
public String addpersoncommit(Person person){
personService.addPerson(person);
return "redirect:/personlist";
}
// 修改(更新)用户
@RequestMapping("updateperson")
public String updateperson(Model model,Person person){
model.addAttribute("id",person.getId());
model.addAttribute("age",person.getAge());
model.addAttribute("name",person.getName());
return "updateperson.html";
}
@RequestMapping("updatepersoncommit")
public String updatepersoncommit(Person person){
personService.updatePerson(person);
return "redirect:/personlist";
}
}
7.运行:
浏览器手动输入: http://localhost:8080/personlist
点击 增加页面 --> 跳转到:http://localhost:8080/addperson
提交-->跳转回用户列表
点击 更新用户 -->跳转到:
提交-->跳转回用户列表 同时数据修改成功
点击 删除用户 --> 成功删除用户
四、resultmap属性
数据库字段和实体类字段不一致,进行手工配置
修改PersonMapper.xml