springBoot-05-springBoot整合mybatis项目开发过程

springBoot-05-springBoot整合mybatis项目开发过程

1、导入静态资源

  • 静态资源可以存放的位置【可以明确看到的位置】
    在这里插入图片描述
    -例子
<!--假设资源放在static包下,在写路径的时候不用写static-->
<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
  • 静态资源可以存放的位置【webjars正常不用】
  • 需要导入的依赖
<dependency>
	<groupId>org.webjars</groupId>
	<artifactId>jquery</artifactId>
	<version>3.6.0</version>
</dependency>

在这里插入图片描述
在这里插入图片描述

2、运行项目,出现首页

在这里插入图片描述

3、项目中没有jsp,这时我们要用模板引擎Thymeleaf

  • Thymeleaf语法可以在springBoot-04中看到
  • 需要导入的依赖
  • 直接导入启动器
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • 或导入相关jar包
<dependency>
	<groupId>org.thymeleaf</groupId>
	<artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
	<groupId>org.thymeleaf.extras</groupId>
	<artifactId>thymeleaf-extras-java8time</artifactId>
</dependency>
  • 在html页面加入对应的命名空间
<html lang="en" xmlns:th="http://www.thymeleaf.org">

4、装配扩展springMVC

1.可以通过重写方法,扩展springMVC

在这里插入图片描述
在这里插入图片描述

2.自定义视图解析器

  • 这里通过@Bean的方式把我们之定义的视图解析器放到spring里面
    在这里插入图片描述

  • 这里我们通过在DispatcherServlet中的doDispatch方法上设断点,当我们请求时,就可以看到我们自定义的视图解析器已被加载
    在这里插入图片描述

5、连接数据库springBoot整合mybatis

1.需要到导入的依赖

<!--springBoot整合mybatis需要的依赖,且这个包不是官方的,看格式-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>
<!--jdbc-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
 <!--connector-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

2.编写配置文件

#数据连接
spring.datasource.username=root
spring.datasource.password=123
#serverTimezone=UTC  #比北京时间少8个小时
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=Asia/Shanghai&userUnicode=true&characterEncoding=utf-8
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

#整合mybatis
mybatis.type-aliases-package=com.lc.pojo
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

6、登录功能的实现

1.index页面

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
		<meta name="description" content="">
		<meta name="author" content="">
		<title>Signin Template for Bootstrap</title>
		<!-- Bootstrap core CSS -->
		<link th:href="@{/css/bootstrap.min.css}" rel="stylesheet">
		<!-- Custom styles for this template -->
		<link th:href="@{/css/signin.css}" rel="stylesheet">
	</head>

	<body class="text-center">
		<form class="form-signin" th:action="@{/Login}" method="post">
			<img class="mb-4" th:src="@{/img/bug.svg}" alt="" width="72" height="72">
			<h1 class="h3 mb-3 font-weight-normal" th:text="#{login.tip}"></h1>
			<!--提示错误信息-->
			<p style="color: red;" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p>

			<label class="sr-only">Username</label>
			<input type="text" th:name="username" class="form-control" th:placeholder="#{login.username}" required="" autofocus="">
			<label class="sr-only">Password</label>
			<input type="password" th:name="password" class="form-control" th:placeholder="#{login.password}" required="">
			<div class="checkbox mb-3">
			<label>
          <input type="checkbox">[[ #{login.remember} ]]
        	</label>
			</div>
			<button class="btn btn-lg btn-primary btn-block" type="submit" >[[ #{login.btn}  ]]</button>
			<p class="mt-5 mb-3 text-muted">© 2020-2021</p>
		<a class="btn btn-sm" th:href="@{/index(l='zh_CN')}">中文</a>
		<a class="btn btn-sm" th:href="@{/index(l='en_US')}">English</a>
		</form>
	</body>
</html>

2.Dao层UserMapper接口【这里必须写上@mapper相当于mapper扫描包的作用=>@MapperScan】

@Mapper
@Repository
public interface UserMapper {
    //添加一个员工
    int addUser(User user);

    //修改一个员工
    int updateUser(User user);

    //查询全部员工
    List<User> queryAllUsers();

    //根据id查询员工
    User queryUserById(String username);

    //根据id删除员工
    int deleteUserById(Integer username);
}

3.UserMapper.xml【这里注意mapper.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.lc.dao.UserMapper">

    <select id="queryAllUsers" resultType="User">
        select * from springboot.user;
    </select>

    <select id="queryUserById" parameterType="String" resultType="User">
        select * from springboot.user where username = #{username}
    </select>

    <insert id="addUser" parameterType="User">
        insert into springboot.user (username,password,level)
        values (#{username},#{password},#{level});
    </insert>

    <update id="updateUser" parameterType="User">
        update springboot.user
        set password = #{password},level=#{level}
        where username = #{username};
    </update>

    <delete id="deleteUserById" parameterType="String">
        delete from springboot.user where username=#{username}
    </delete>
</mapper>

4.UserService

public interface UserService {
    //添加一个员工
    int addUser(User user);

    //修改一个员工
    int updateUser(User user);

    //查询全部员工
    List<User> queryAllUsers();

    //根据id查询员工
    User queryUserById(String username);

    //根据id删除员工
    int deleteUserById(Integer username);
}

5.UserServiceImpl【这里注意是调用dao层,一定要写上@Autowired】

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    public void setUserMapper(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    @Override
    public int addUser(User user) {
        int i = userMapper.addUser(user);
        return i;
    }

    @Override
    public int updateUser(User user) {
        int i = userMapper.updateUser(user);
        return i;
    }

    @Override
    public List<User> queryAllUsers() {
        List<User> users = userMapper.queryAllUsers();
        return users;
    }

    @Override
    public User queryUserById(String username) {
        User user = userMapper.queryUserById(username);
        return user;
    }

    @Override
    public int deleteUserById(Integer username) {
        int i = userMapper.deleteUserById(username);
        return i;
    }
}

7、增删改查

1.Thymeleaf中代码复用

在这里插入图片描述
在这里插入图片描述

2.Dao层和Service层

a)、Dao层EmployeeMapper接口【这里必须写上@mapper】
@Mapper
@Repository
public interface EmployeeMapper {
    //添加一个员工
    int addEmployee(Employee employee);

    //修改一个员工
    int updateEmployee(Employee employee);

    //查询全部员工
    List<Employee> queryAllEmployees();

    //根据id查询员工
    Employee queryEmployeeById(Integer Eid);

    //根据id删除员工
    int deleteEmployeeById(Integer Eid);
}
b)、EmployeeMapper.xml
<mapper namespace="com.lc.dao.EmployeeMapper">

    <select id="queryAllEmployees" resultType="Employee">
        select * from springboot.employee;
    </select>

    <select id="queryEmployeeById" parameterType="Integer" resultType="Employee">
        select * from springboot.employee where Eid =#{Eid}
    </select>

    <insert id="addEmployee" parameterType="Employee">
        insert into springboot.employee (Eid,Ename,email,sex,Did,birth)
        values (#{Eid},#{Ename},#{email},#{sex},#{Did},#{birth});
    </insert>

    <update id="updateEmployee" parameterType="Employee">
        update springboot.employee
        set Ename = #{Ename},email = #{email},sex=#{sex},Did=#{Did},birth=#{birth}
        where Eid=#{Eid};
    </update>

    <delete id="deleteEmployeeById" parameterType="Integer">
        delete from springboot.employee where Eid=#{Eid}
    </delete>
</mapper>
c)、UserService
public interface EmployeeService {
    //添加一个员工
    int addEmployee(Employee employee);

    //修改一个员工
    int updateEmployee(Employee employee);

    //查询全部员工
    List<Employee> queryAllEmployees();

    //根据id查询员工
    Employee queryEmployeeById(Integer Eid);

    //根据id删除员工
    int deleteEmployeeById(Integer Eid);
}
d)、UserServiceImpl【调Dao层@Autowired】
@Service
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeMapper employeeMapper;
    public void setBookMapper(EmployeeMapper employeeMapper){
        this.employeeMapper=employeeMapper;
    }
    @Override
    public int addEmployee(Employee employee) {
        int i = employeeMapper.addEmployee(employee);
        return i;
    }

    @Override
    public int updateEmployee(Employee employee) {
        int i = employeeMapper.updateEmployee(employee);
        return i;
    }

    @Override
    public List<Employee> queryAllEmployees() {
        List<Employee> employees = employeeMapper.queryAllEmployees();
        return employees;
    }

    @Override
    public Employee queryEmployeeById(Integer Eid) {
        Employee employee = employeeMapper.queryEmployeeById(Eid);
        return employee;
    }

    @Override
    public int deleteEmployeeById(Integer Eid) {
        int i = employeeMapper.deleteEmployeeById(Eid);
        return i;
    }
}

3.Controller层

@Controller
public class EmployeeController {
    @Autowired
    EmployeeService employeeService;

    @Autowired
    DepartmentService departmentService;
}
a)、员工全查询
@RequestMapping("/emps")
    public String list(Model model){
        List<Employee> employees = employeeService.queryAllEmployees();
        model.addAttribute("employees",employees);
        return "emp/list";
    }

在这里插入图片描述

b)、添加员工
//restful风格get
    //跳转到添加员工页面
    @GetMapping("/emp")
    public String toAddEmp(Model model){
        //查询所有部门的信息
        List<Department> departments = departmentService.queryAllDepartments();
        model.addAttribute("departments",departments);
        return "emp/addEmployee";
    }
    //restful风格post
    //添加员工并返回list页面
    @PostMapping("/emp")
    public String addEmployee(Employee employee){
        //添加员工
        System.out.println("addEmployee=>"+employee);
        employeeService.addEmployee(employee);
        return "redirect:/emps";
    }

在这里插入图片描述

c)、修改员工
    //跳转到修改员工页面
    @GetMapping("/toUpdateEmp/{Eid}")
    public String toUpdateEmp(@PathVariable("Eid")Integer Eid, Model model){
        //根据id查询员工信息
        Employee employee = employeeService.queryEmployeeById(Eid);
        model.addAttribute("employee",employee);
        System.out.println(Eid+"*******************************************"+ employee.toString());
        //查询所有的部门
        List<Department> departments = departmentService.queryAllDepartments();
        model.addAttribute("departments",departments);
        return "emp/updateEmployee";
    }
    //修改员工并返回list页面
    @PostMapping("/updateEmployee")
    public String updateEmployee(Employee employee){
        employeeService.updateEmployee(employee);
        return "redirect:/emps";
    }

在这里插入图片描述

d)、删除员工
<!--list页面-->
<a class="btn btn-sm btn-danger" th:href="@{'/deleteEmployee/'+${emp.getEid()}}">删除</a>
//删除员工
    @GetMapping("/deleteEmployee/{Eid}")
    public String deleteEmployee(@PathVariable("Eid")Integer Eid){
        employeeService.deleteEmployeeById(Eid);
        System.out.println(Eid+"*************************************");
        //重定向==> redirect:/
        return "redirect:/emps";
    }
e)、注销
<!--commons页面-->
<a class="nav-link" th:href="@{/loginOut}">注销</a>
@RequestMapping("/loginOut")
    public String loginOut(HttpSession session){
        System.out.println("***********************");
        //注销
        session.invalidate();
        return "redirect:/index.html";
    }
f)、404页面和500页面

在这里插入图片描述

8、拦截器

1.编写扩展springMVC的config【必须加上@Configuration】

@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/main.html").setViewName("dashboard");
    }

    //注册bean之后自定义国际化才生效
    @Bean
    public LocaleResolver localeResolver(){
        return new MyLocalResolver();
    }

    //拦截器
    //在这里添加上登录拦截,并添加要拦截的url和要排除的url
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
                .excludePathPatterns("/Login","/index.html","/css/**","/js/**","/img/**");
    }
}

2.登录拦截【写完之后必须在】

public class LoginHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object handler) throws Exception {
        Object loginUser = request.getSession().getAttribute("loginUser");
        if(loginUser==null){
            request.setAttribute("msg","没有权限请先登录!");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            return true;
        }
    }
}

3.国际化要配置一个地区解析【之后必须在MyMvcConfig 注册@Bean才能生效】

public class MyLocalResolver implements LocaleResolver {

    //解析请求
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        //获取请求中的语言参数
        String language = request.getParameter("l");
        //如果没有参数就使用默认的
        Locale locale = Locale.getDefault();
        System.out.println("sdf"+language);
        //如果请求的连接携带了国际化的参数
        if(!StringUtils.isEmpty(language)){
            //zh_CN
            String[] split = language.split("_");
            //国家,地区
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

9、中英文切换【国际化】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、效果图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关资源: 学习狂神说 学习地址(以上仅为笔记)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值