数据的传输
http请求(由用户输入)---- 由controller接收获得的数据 ---- 由mapper对数据库执行操作 ------到达sql
同时也包含了entity层,存放实体类,实现了set和get方法,与数据库的属性基本保持一致
包中包含了entity(实体类),controller,mapper
增加依赖
添加了两个依赖库,分别为MySQL和Mybatis
某些依赖需要进行配置,否则会运行报错
mysql
mysql-connector-java
runtime
org.mybatis.spring.boot
mybatis-spring-boot-starter
2.0.1
配置
对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
packagecom.Lee.connect.controller;importcom.Lee.connect.mapper.UserMapper;importcom.Lee.connect.table.TableUser;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping(value= "/")public classUserController{
@Autowired
UserMapper userMapper;
@RequestMapping(value= "/getUser")
@ResponseBodypublicObject getUser(){
TableUser user= userMapper.getUserById(2);returnuser;
}
}
@Controller表示当前类为一个控制器,加载在类上
@RequestMapping来映射请求,也就是通过它来指定控制器可以处理哪些URL请求,其被加载在了当前方法上(也可以加载在类上)
拥有参数
value:指定请求的实际地址,指定的地址可以是URI Template 模式(后面将会说明);
method: 指定请求的method类型, GET、POST、PUT、DELETE等
@Controller
@RequestMapping(value= "/", method =RequestMethod.GET)public classContactController {
@RequestMapping(value= "/", method =RequestMethod.GET)publicString redirectToContactPage() {return "redirect:contact";
}
@RequestMapping(value= "/admin", method =RequestMethod.GET)publicString toAdminPage() {return "admin";
}
@RequestMapping(value= "/contact", method =RequestMethod.GET)publicString 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
packagecom.Lee.connect.mapper;importcom.Lee.connect.table.TableUser;importorg.apache.ibatis.annotations.Mapper;importorg.apache.ibatis.annotations.Param;importorg.apache.ibatis.annotations.Select;importorg.springframework.stereotype.Component;
@Mapper
@Component(value= "UserMapper")public interfaceUserMapper {
@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
packagecom.Lee.connect.table;importorg.apache.ibatis.annotations.Param;public classTableUser {private intid;privateString UserName;privateString PassWord;public intgetId() {returnid;
}public void setId(intid){this.id =id;
}publicString getUserName(){returnUserName;
}public voidsetUserName(String userName){
UserName=userName;
}publicString getPassWord(){returnPassWord;
}public voidsetPassWord(String passWord){
PassWord=passWord;
}
}
按照数据表的格式,为所有的字段添加set和get方法
返回这个表对应的类