- 数据的传输
http请求(由用户输入)---- 由controller接收获得的数据 ---- 由mapper对数据库执行操作 ------到达sql
同时也包含了entity层,存放实体类,实现了set和get方法,与数据库的属性基本保持一致
包中包含了entity(实体类),controller,mapper
- 增加依赖
添加了两个依赖库,分别为MySQL和Mybatis
某些依赖需要进行配置,否则会运行报错
<!--MySQL--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency>
- 配置
对spring,需要设置该服务应用的名称
spring.application.name = server-mybatis
对sever,需要设置通信的端口
server.port = 8080
对Mabatis依赖,需要设置通信的网址,用户名,密码
设置MySQL的请求网址
spring.datasourse.url= jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false
格式为idbc:mysql://服务器名:端口号/数据库名?参数1&参数2
此处的数据库名指的是use database中的database
建议加上如下参数避免时区错误
serverTimezone=Asia/Shanghai&allowMultiQueries=true
user | 数据库用户名(用于连接数据库) | 所有版本 | |
password | 用户密码(用于连接数据库) | 所有版本 | |
useUnicode | 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true | false | 1.1g |
characterEncoding | 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk | false | 1.1g |
autoReconnect | 当数据库连接异常中断时,是否自动重新连接? | false | 1.1 |
autoReconnectForPools | 是否使用针对数据库连接池的重连策略 | false | 3.1.3 |
failOverReadOnly | 自动重连成功后,连接是否设置为只读? | true | 3.0.12 |
也可以设置用户名和密码
spring.datasourse,username = root
spring.datasourse,password = ******
指定Mybatis对应实体类的包名(mapper),主要是进行映射
mybatis.typeAliasesPackage = com.Lee.connect.mapper
- controller
package com.Lee.connect.controller; import com.Lee.connect.mapper.UserMapper; import com.Lee.connect.table.TableUser; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping(value = "/") public class UserController{ @Autowired UserMapper userMapper; @RequestMapping(value = "/getUser") @ResponseBody public Object getUser(){ TableUser user = userMapper.getUserById(2); return user; } }
@Controller表示当前类为一个控制器,加载在类上
@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,其被加载在了当前方法上(也可以加载在类上)
拥有参数
value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等
@Controller @RequestMapping(value = "/", method = RequestMethod.GET) public class ContactController { @RequestMapping(value = "/", method = RequestMethod.GET) public String redirectToContactPage() { return "redirect:contact"; } @RequestMapping(value = "/admin", method = RequestMethod.GET) public String toAdminPage() { return "admin"; } @RequestMapping(value = "/contact", method = RequestMethod.GET) public String toContactForOhersPage() { return "contact"; } }
在上面的例子中,@RequestMapping
加在了类和方法上
访问/
的请求会被ContactController
的redirectToContactPage()
方法处理(加载在类上)
访问/admin
的请求会被ContactController
的toAdminPage()
方法处理(加载在类的方法上)
其指定了不同请求对应要调用的方法
@ResponseBody加载在类的方法上,将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML数据
@Autowired,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作
此处将mapper中的类方法重新定义了一个新的对象,用于后续在方法中调用(使用了mapper中定义的getuserbyid方法)
controller由以下结构组成
(头部两个注解)
定义@Controller
定义@RequestMapping
(一个类)
使用@Autowired将mapper类对象进行转换(此处就将controller和mapper连接起来)
加载@ResponseBody和@RequestMapping到方法中(此处就将controller和http请求连接起来)
方法中使用刚刚的转换中的mapper对象(实际上就是一个接口)中方法获得一个结果,将结果赋值给一个object(实际上是entity类对应的实例对象,此处就将controllrt和entity连接了起来)并进行返回
- mapper
package com.Lee.connect.mapper; import com.Lee.connect.table.TableUser; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Component; @Mapper @Component(value = "UserMapper") public interface UserMapper { @Select("select * from t1 where id=#{id};") TableUser getUserById(@Param("id") Integer id); }
mapper实际上是一个接口,controller通过继承这个接口来获得mapper中的方法进行使用
(接口只定义方法)
@Mapper定义该类是一个映射类
@component ,当类不属于各种归类的时候(不属于@Controller、@Services等的时候),可以使用@Component来标注这个类
使用value参数,参数名为当前类名,只有使用这种方式,当前的类才会被划入spring的容器中去
(使用@component才能对该类使用@Autowired)
@Select(“ ”),其内加上sql语句即可,其可以加载到方法上
此处为sql中的select关键字,同时当然也有@Delete,@Update,@Insert等等
@Param主要用于传递参数
在方法参数的前面写上@Param("参数名"),表示给参数命名,名称就是括号中的内容
例如public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id);
给参数 String name 命名为aaaa,然后sql语句....where s_name= #{aaaa} 中就可以根据aaaa得到参数值了
mapper由以下结构组成
(头部两个注解)
定义@Mapper和@@component
(一个接口)
使用@select来执行sql语句(此处就将mapper和sql服务器连接起来),将其加载到下面的方法中
(注意sql语句中的外部变量使用#{外部变量名}来操作)
定义一个方法,自定义函数名,其参数就是sql语句中使用的外部变量,返回的结果就是sql语句查询的结果
返回结果由entity对应的object接收(此处就将mapper和entity连接起来)
有时候sql语句也没有返回结果(比如删除和更新),此时就使用void
有时候sql语句会返回一个主键id(比如插入),此时就使用int来接收这个id
- entity
package com.Lee.connect.table; import org.apache.ibatis.annotations.Param; public class TableUser { private int id; private String UserName; private String PassWord; public int getId() { return id; } public void setId(int id){ this.id = id; } public String getUserName(){ return UserName; } public void setUserName(String userName){ UserName = userName; } public String getPassWord(){ return PassWord; } public void setPassWord(String passWord){ PassWord = passWord; } }
按照数据表的格式,为所有的字段添加set和get方法
返回这个表对应的类