前言
今天学习下SpringBoot集成mybatis,集成mybatis一般有两种方式,一个是基于注解的一个是基于xml配置的。今天先了解下基于注解的mybatis集成。下面话不多说了,来一起看看详细的介绍吧
因为是mybatis嘛,肯定是要有mybatis相关的,同时用的是mysql,所以也需要引入mysql相关的。
<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.2</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency>
这里创建了一个User的model,这样方便与数据库的表对照,这里在mysql中创建了一个名为mybatis的数据库,里面创建了一个user的表.同时创建了枚举类UserSexEnum.
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, `age` int(11) DEFAULT NULL, `sex` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
package com.example.model; import java.io.Serializable; public class User implements Serializable{ @Override public String toString() { // TODO Auto-generated method stub return "User [id=" + Id + ", name=" + Name + ", age=" + Age + "]"; } public int getId() { return Id; } public void setId(int id) { Id = id; } public String getName() { return Name; } public void setName(String name) { Name = name; } public int getAge() { return Age; } public void setAge(int age) { Age = age; } private int Id; private String Name; private int Age; private UserSexEnum Sex; public UserSexEnum getSex() { return Sex; } public void setSex(UserSexEnum sex) { Sex = sex; } }
package com.example.model; public enum UserSexEnum { MAN, WOMAN }
这里需要把model与操作数据库的sql对照起来,用什么对照呢?那就需要创建一个mapper.这里有增删改查。
package com.example.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.example.model.*;; public interface UserMapper { @Select("SELECT * FROM user") @Results({ @Result(property = "Sex", column = "sex", javaType = UserSexEnum.class), @Result(property = "Name", column = "name") }) List<User> getAll(); @Select("SELECT * FROM user WHERE id = #{id}") @Results({ @Result(property = "Sex", column = "sex", javaType = UserSexEnum.class), @Result(property = "Name", column = "name") }) User getOne(int id); @Insert("INSERT INTO user(name,age,sex) VALUES(#{name}, #{age}, #{sex})") void insert(User user); @Update("UPDATE user SET name=#{userName},age=#{age} WHERE id =#{id}") void update(User user); @Delete("DELETE FROM user WHERE id =#{id}") void delete(int id); }
上面配置了mapper,那怎么让系统知道mapper放在哪里呢?于是有了@MapperScan注解。
package com.example.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.example.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
这里创建了UserController,一个是显示所有用户,一个是新增一个用户之后再显示所有用户。
package com.example.demo; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.example.mapper.UserMapper; import com.example.model.User; import com.example.model.UserSexEnum; @Controller @RequestMapping("/user") public class UserController { @Autowired private UserMapper userMapper; @RequestMapping(value = "/alluser.do",method = RequestMethod.GET) public String getallusers(Model model) { List<User> users=userMapper.getAll(); model.addAttribute("users", users); return "userlist"; } @RequestMapping(value = "/insert.do",method = RequestMethod.GET) public String adduser(Model model) { User user=new User(); user.setName("cuiyw"); user.setAge(27); user.setSex(UserSexEnum.MAN); userMapper.insert(user); List<User> users=userMapper.getAll(); model.addAttribute("users", users); return "userlist"; } }
上面mapper也设置了,model也设置了,那要与数据库交互,肯定要配置数据库地址这些信息吧。这里在运行的时候还报了一个错误.nested exception is java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.在mysql中设置了下时区:set global time_zone='+8:00';
spring.mvc.view.prefix=/view/ spring.mvc.view.suffix=.jsp mybatis.type-aliases-package=com.example.model spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/mybatis spring.datasource.username = root spring.datasource.password = 123456
七、创建页面显示
这里还是按照上一博客用jsp显示数据。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <table> <tr><th>名字</th><th>年龄</th><th>性别</th></tr> <c:forEach items="${users}" var="item"> <tr><td>${item.name}</td><td>${item.age}</td><td>${item.sex}</td></tr> </c:forEach> </table> </body> </html>
这里先在浏览器打开http://localhost:8080/user/alluser.do,可以看到用户列表,然后输入http://localhost:8080/user/insert.do,就会看到列表显示多了一行数据。
使用基于注解的集成mybatis比较省事方便,但有利有弊,对于多表相连的可能就不太方便,使用基于xml配置的可能就更会好些。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对小牛知识库的支持。
本文向大家介绍C# 基础入门--注释,包括了C# 基础入门--注释的使用技巧和注意事项,需要的朋友参考一下 注释,是代码中的一些“说明性文字”。注释本身不会参与程序的编译和运行,仅仅供程序员阅读。 注释分为:单行注释、多行注释、文档注释。 单行注释的符号是2条斜线“//”,2条斜线右侧的内容就是注释,左侧的代码不会受影响。 多行注释以“/*”开始,以“*/”结束,之间的内容就是注释,可以包含多行。
本文向大家介绍JavaScript之Vue.js【入门基础】,包括了JavaScript之Vue.js【入门基础】的使用技巧和注意事项,需要的朋友参考一下 本篇将简单介绍一下Vue.js,并在Node.js环境下搭建一个简单的Demo。 一、简介 我个人理解,Vue.js是一套前端视图层的框架,它只关心视图展示和数据绑定,它的一些语法与Angular 1非常相似,如果有Angular 1相关的使用
基础入门 准备好体验 Timelion 了吗?以下教程将为您揭开其神秘面纱: 利用多个表达式创建时间序列图表 自定义可视化类型和格式选项 使用数学函数处理数据 跟踪趋势并用条件逻辑提取异常值 添加 Timelion 可视化控件到仪表板 查看内嵌的帮助文档
框架安装与启动 框架配置文件 URL与控制器 自动加载 Swoole Http Server 事件回调 内存管理机制 常见问题 定时器 异步进程
______ _____ _ | ____| / ____| | | | |__ __ _ ___ _ _ | (___ __
主要内容:第1节. 查询数据,第2节. 排序数据,第3节. 过滤数据,第4节. 连接表,第5节. 分组数据,第6节. 子查询,第7节. 设置操作符,第8节修改数据,第9节. 数据定义,第10节. Oracle数据类型,第11节. 约束Oracle基础知识部分涵盖了Oracle数据库的基础知识。本系列教程的主要目标是帮助您构建强大的Oracle数据库基础。完成本系列后,您将能够编写复杂的SQL语句来查询数据和管理数据库对象。 读者(网友)经常问到的问题: 有什么办法能快速学习Oracle? 有什么